6

私は と が初めてNGUIですunity 3duiルートに 2 つのパネルがあります。その名前はfirstPanelおよびsecondPanelです。secondPanel はシーンで非アクティブ化されています。私にfirstPanelは非常に多くのボタンがあり、1つはplayボタン、つまり画像ボタンです。playボタンをクリックすると、非表示になり、表示されるはずfirstPanelです新しいスクリプトをボタンに追加し、その中にコードを記述しますsecondPanelplay

void OnClick(){
    GameObject panel2  = GameObject.Find("secondPanel");
    NGUITools.SetActive(panel2,true);       
    GameObject panel1  = GameObject.Find("firstPanel");         
    NGUITools.SetActive(panel1,false);

}

しかし、私はこのエラーを受け取ります:"NullReferenceException" どのスクリプトでngui編集する必要がありますか?どうすればそれを行うことができますか? この問題を解決するのを手伝ってください よろしくお願いします。

4

4 に答える 4

8

パネルの名前が Panel1 および Panel2 の場合、GameObject.Find("secondPanel") および GameObject.Find("firstPanel") を使用してもそれらを見つけることはできません。「Panel1」と「Panel2」がゲームシーンで唯一の名前である場合 (他の Panel1 または Panel2 がない場合)、使用を試みることができます。

void OnClick(){
  GameObject panel2  = GameObject.Find("Panel2");
  NGUITools.SetActive(panel2,true);       
  GameObject panel1  = GameObject.Find("Panel1");         
  NGUITools.SetActive(panel1,false);

}
于 2013-02-07T11:28:48.050 に答える
3

GameObject.Find("Something") は無効なゲーム オブジェクトを見つけることができないため、この方法では使用できません。ボタンコードにリフレクションを追加してみることができます:

public GameObject pannel1 = null;
public GameObject pannel2 = null;

シーン エディタ ウィンドウの右側のパネルに設定します。

もう 1 つの方法は、最初に両方のパネルをシーン内でアクティブに保ち、次に次のようにボタン スクリプトにコードを追加する必要があります。

private GameObject panel1 = null;
private GameObject panel2 = null;
void Start()
{
    panel1 = GameObject.Find("Panel1");
    panel2 = GameObject.Find("Panel2");
}

void OnClick()
{
    panel2.SetActiveRecursively(true);
    panel1.SetActiveRecursively(false);
}

GameObject.Find(string name) 関数は Unity3D ではあまり効率的ではないため、Update() で、またはボタンをクリックするたびに使用しないでください。

于 2013-03-25T07:12:26.817 に答える
0

GameObject.Find() を使用して無効なゲームオブジェクトを見つけることはできません。null が返されます。

于 2014-05-29T10:32:08.513 に答える