質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

395閲覧

Unityのサンプルゲームのバグについて

tokiwa123

総合スコア15

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2019/02/06 13:44

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); } } }

多分スコアを表示しようとするところでバグが起きたと思うんですが、初心者なもんで分かりません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

vo3

2019/02/06 15:28

実行したときにコンソールログにエラーが出てたりしませんか。 例えば public Text countText; public Text winText; この二つがnullになっていたりとか。
guest

回答1

0

ベストアンサー

プログラム見る限り、当たり判定は出来てるので
https://unity3d.com/jp/learn/tutorials/projects/2d-ufo-tutorial/picking-collectables?playlist=25844
10:30あたりからやってるピックアップオブジェクトのタグ付け(タグをPickUpにする)がされてないのではと思います。

あとcountTextとwinTextの関連付けもかな
https://unity3d.com/jp/learn/tutorials/projects/2d-ufo-tutorial/counting-collectables-and-displaying-score?playlist=25844
10:50あたりのやつかな

投稿2019/02/06 17:05

編集2019/02/06 17:10
rururu3

総合スコア5545

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tokiwa123

2019/02/07 01:38

Textの関連付けは出来ていたのですが、ピックアップオブジェクトのタグ付けはされてなかったので、タグ付けしたら無事、ピックアップオブジェクトが消えるようになりました。 とても丁寧な回答ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問