0

シーン (ErrorMessage) にパネルがあり、エディターで無効にして、C# スクリプトに次のように記述しました。

            if(getUsernameResponse == "Login OK") {
                Application.LoadLevel("LobbyUI");
            } else {
                GameObject ErrorMessage = GameObject.FindGameObjectWithTag("ErrorMessage");
                ErrorMessage.SetActive(true);
            }

スクリプトは、「Login OK」という別の応答があるErrorMessage場合に有効にする (表示する) 必要getUsernameResponseがあります..しかし、liveDemo を開始すると、次のエラーが表示されます。

NullReferenceException: オブジェクト参照がオブジェクトのインスタンスに設定されていません) 行: 41 (ErrorMessage.SetActive(true);)

ErrorMessageエディターから有効にして無効にしようとしました

if(getUsernameResponse == "Login OK") {
                Application.LoadLevel("LobbyUI");
            } else {
                GameObject ErrorMessage = GameObject.FindGameObjectWithTag("ErrorMessage");
                ErrorMessage.SetActive(false);
            }

私のソースでは正常に動作しますがErrorMessage、スクリプトから (UI.Panel) を無効にするにはどうすればよいですか?

ご支援ありがとうございます。

4

2 に答える 2

3

それは単に次のことを意味します。

GameObject ErrorMessage = GameObject.FindGameObjectWithTag("ErrorMessage");

ゲームオブジェクトが見つかりません。

おそらく、GameObject に実際にタグを付けていないか、タグのスペルが間違っている可能性があります。レイヤーはタグではないことに注意してください。

本当に、私はあなたの設定全体を知りませんが、私の疑いは、あなたが何をしていても、あなたが本当にすべきではないということです. errorMessage ダイアログのタグを作成していますか? Unity で多くの UI を作成しました。UI でタグ付けしたことはありません。タグ付けは、グループとして簡単に取得する必要があるシーン内のオブジェクト タイプの非常に一般的なグループ化に使用する必要があります。チームA、チームB、AI、パワーアップ。非常に特殊な性質のオブジェクトを 1 つだけ取得するために使用しないでください。

GameObject.Find を使用して、実際のゲーム オブジェクトの名前で検索します。

または、Miron Alex が言ったことを実行して、インスペクターにスロットを作成し、そこにゲームオブジェクトをドラッグします。理想的には、シリアル化されたプライベート変数にする必要があります。

[SerializeField]
private GameObject errorMessage;
于 2015-03-02T08:35:56.873 に答える
1

オブジェクトが存在しないなどの「null」の場合、NullReferenceException がスローされます。あなたのコードでは、メソッド

GameObject.FindGameObjectWithTag("ErrorMessage"); 

「ErrorMessage」タグを持つオブジェクトが見つかりませんでした。これは、「null」を返し、「null」を ErrorMessage ゲームオブジェクトに割り当てたことを意味します。「null」オブジェクトでメソッドを呼び出そうとすると、「NullReferenceException」がスローされます。これは、「null」値が「SetActive(bool value)」メソッドについて何も知らないためです (GameObject が行うように)。

シーンに「errorMessage」とタグ付けされたオブジェクトがあることを確認してください。これを簡単にするには、コードで公開ゲームオブジェクトを作成し、ErrorMessage という名前を付けて、インスペクターで割り当てます。

public GameObject errorMessage;

if(getUsernameResponse == "Login OK") 
{
   Application.LoadLevel("LobbyUI");
} 
else 
{
   errorMessage.SetActive(false);
}

トリックを行う必要があります。

于 2015-03-02T07:28:52.960 に答える