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

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

ただいまの
回答率

90.47%

  • C#

    9238questions

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

  • Unity

    5653questions

    Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

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

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 248

tokiwa123

score 3

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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • vo3

    2019/02/07 00:28

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

    キャンセル

回答 1

checkベストアンサー

+1

プログラム見る限り、当たり判定は出来てるので
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/07 10:38

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

    キャンセル

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

  • ただいまの回答率 90.47%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • C#

    9238questions

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

  • Unity

    5653questions

    Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。