2016-10-31 16 views
0

私はunity3dの問題に直面しています。シンプルなキューブであるgameobjectがあり、 というコンポーネントが付いています。これは、赤色のMaterialというコンポーネントです。また、この キューブに添付されているマウスの左クリックでイベントを実行するスクリプトがあります。つまり、材料の色が緑色に変わります。スクリプト はうまく動作しますが、シーン内で欲しいものはcanvasgameobjectです。これはデフォルトでは無効です。 Picture材料色が緑色の場合はこのゲームオブジェクトをアクティブにし、色が赤色の場合は無効化します。 私は GameObject.Find("Canvas")と呼ばれる機能を使用していますが、エラーが発生しています。また、私はこの関数を呼び出すことによってこのキャンバスでタグを使用してこの問題を解決しようとしますGameObject.FindWithTag("Canvas")しかし、何も動作しません。同じエラーが来ています。マウスクリックでゲームオブジェクトがアクティブにならない

NullReferenceException: Object reference not set to an instance of an object

コード:ゲームオブジェクトが無効になっているとき

public class Cube : MonoBehaviour { 

    [SerializeField] private bool check; 


    void OnMouseDown() { 


     if (!check) { 

      gameObject.GetComponent<Renderer>().material.color = Color.green; 


      GameObject.Find("Canvas").SetActive(true); 

      check = true; 

     } else if (check) { 

      gameObject.GetComponent<Renderer>().material.color = Color.red; 

      check = false; 

     } 

    } 


} 

答えて

0

GameObject.Findは動作しません。あなたの質問のスクリーンショットから、Canvas GameObjectは無効になっています。

あなたが得ている理由です:NullReferenceException: Object reference not set to an instance of an object

はそれのためのパブリック変数を作成し、そこにキャンバスをドラッグに。

[SerializeField] 
private bool check; 

public GameObject myCanvas; 

void OnMouseDown() 
{ 
    if (!check) 
    { 
     gameObject.GetComponent<Renderer>().material.color = Color.green; 
     myCanvas.SetActive(true); 
     check = true; 
    } 
    else if (check) 
    { 
     gameObject.GetComponent<Renderer>().material.color = Color.red; 
     check = false; 
    } 
} 
+0

ok私は理解しています!私はゲームオブジェクトの子供だけを非アクティブにすることができます。 – hamel123

+0

ゲームオブジェクトを無効にすることはできますが、GameObject.FindWithTagは非表示のオブジェクトまたは親が非表示のオブジェクトでは機能しません。あなたがアクティブなときにオブジェクトの参照を取得する必要がありますか、または私はそれに参照をドラッグして私の答えで行ったようにそれを行う必要があります。 – Programmer

関連する問題