UnityのUFOGameというサンプルゲームを作成していたのですが、以下のコードをプレイヤーオブジェクトにアタッチしたところ、ゲームオブジェクトがピックアップオブジェクトに接触するとピックアップオブジェクトが消える仕組みになるはずなのに、ピックアップオブジェクトを通り抜けるようになってしまいました。
using UnityEngine; using System.Collections; //これを加えると、Text を含む UI 名前空間のメンバーにアクセスできるようになります。 using UnityEngine.UI; public class PlayerController : MonoBehaviour { public float speed; //プレイヤーの移動スピードを格納する Float 変数 public Text countText; //収集したアイテムの数を表示する UI Text コンポーネントへの参照を格納します。 public Text winText; //「勝ちました!」メッセージを表示する UI Text コンポーネントへの参照を格納します。 private Rigidbody2D rb2d; //2D Physics に必要な Rigidbody2D コンポーネントへの参照を格納します private int count; //集めたアイテムの数を格納する Int // イニシャライゼーションにこれを使います void Start() { //Rigidbody2D コンポーネントへの参照を取得、格納して、 Rigidbody2D コンポーネントへアクセスできるようにします。 rb2d = GetComponent<Rigidbody2D> (); //合計を 0 に イニシャライズします。 count = 0; //開始時にはまだ、勝っていないので、winText を空の文字列にイニシャライズします。 winText.text = ""; //現在の合計数のテキストを更新するSetCountText 関数を呼び出します。 SetCountText (); } //FixedUpdate は決められた間隔で呼び出され、フレームレートとは関係ありません。物理演算のコードをここに置きます。 void FixedUpdate() { //現在の水平入力を float moveHorizontal に格納します。 float moveHorizontal = Input.GetAxis ("Horizontal"); //現在の垂直入力を float moveVertical に格納します。 float moveVertical = Input.GetAxis ("Vertical"); //2 つの格納 floats を使って新しい Vector2 変数の動きを作成します。 Vector2 movement = new Vector2 (moveHorizontal, moveVertical); // movement に speed を乗じたものを伴う Rigidbody2D rb2d の AddForce 関数を呼び出します。 rb2d.AddForce (movement * speed); } //このオブジェクトがトリガーコライダーと重なるときは常に OnTriggerEnter2D を呼び出します。 void OnTriggerEnter2D(Collider2D other) { //与えられた Collider2D パラメーター "other" が "PickUp" とタグされていないか確認し、そうであれば... if (other.gameObject.CompareTag("PickUp")) //... それから、ついさっき衝突した "other" オブジェクトを非アクティブに設定します。 other.gameObject.SetActive(false); //現在の変数の値に 1 を加えます。 count = count + 1; // SetCountText 関数を呼び出して、現在表示された数を更新します。 SetCountText (); } //この関数は、収集したオブジェクトの数をテキスト表示を更新し、すべてのアイテムを収集したら、勝利メッセージを表示します。 void SetCountText() { // countText オブジェクトの text プロパティーを "Count: " と、そのあとに count 変数に格納された数が続くように設定します。 countText.text = "Count: " + count.ToString (); //12 アイテムすべて集めたかをチェックします。もしそうなら... if (count >= 12) //... winText オブジェクトの text プロパティーを "You win!" に設定します。 winText.text = "You win!"; } }
こちらのコードでは問題なくピックアップオブジェクトが消えました。
using UnityEngine; using System.Collections; public class PlayerController : MonoBehaviour { public float speed; //プレイヤーの移動スピードを格納する Float 変数 private Rigidbody2D rb2d; //2D Physics を使うために必要な Rigidbody2D コンポーネントへの参照を格納 // イニシャライゼーションにこれを使います void Start() { //それにアクセスできるように Rigidbody2D コンポーネントへの参照を取得、格納します。 rb2d = GetComponent<Rigidbody2D> (); } //FixedUpdate は決められた間隔で呼び出され、フレームレートとは関係ありません。物理演算のコードをここに置きます。 void FixedUpdate() { //現在の水平入力を float moveHorizontal に格納します。 float moveHorizontal = Input.GetAxis ("Horizontal"); //現在の垂直入力を float moveVertical に格納します。 float moveVertical = Input.GetAxis ("Vertical"); //2 つの格納 floats を使って新しい Vector2 変数の動きを作成します。 Vector2 movement = new Vector2 (moveHorizontal, moveVertical); //movement に speed を乗じたものを伴う Rigidbody2D rb2d の AddForce 関数を呼び出します。 rb2d.AddForce (movement * speed); } //このオブジェクトがトリガーコライダーと重なるときはいつでも、OnTriggerEnter2D が呼び出されます。 void OnTriggerEnter2D(Collider2D other) { //与えられた Collider2D パラメーター "other" が "PickUp" とタグされていないか確認し、そうであれば... { other.gameObject.SetActive(false); } } }
多分スコアを表示しようとするところでバグが起きたと思うんですが、初心者なもんで分かりません。
実行したときにコンソールログにエラーが出てたりしませんか。
例えば
public Text countText;
public Text winText;
この二つがnullになっていたりとか。
回答1件
あなたの回答
tips
プレビュー