こんにちわ。
初めて投稿する者です。
現在、Unityで3Dオブジェクトのスイッチ(左・右・中央)に乗ると対応する3Dオブジェクトのアニメーションが発生するシステムを作っています。
そこで、スイッチ(左・右・中央)のスクリプトにある変数を親のスクリプトにある変数に代入するスクリプトを作りました。
しかしコンソールから「NULL」と表記されてしまいます。
どこが間違っているか分からないので、ご教示頂けたら幸いです。
ハイラキーの構造(一つの親に三つの子が並列して並んでいます。)
「Goal」(親)
→「Left Switch」(子)
→「Right Switch」(子)
→「Top Switch」(子)
発生している問題・エラーメッセージ
親オブジェクト内に格納されている変数「name」がNULLと表示されてしまう。
該当のソースコード
<親オブジェクトのソースコード> using System.Collections; using System.Collections.Generic; using UnityEngine; public class Goal : MonoBehaviour { public GameObject player; [SerializeField] Animator[] animator; public GameObject[] switches; //ここで「Null」と出る。 private string name; void Start() { name = ""; } //親オブジェクトのアニメーションを再生 public void activateGate() { print(name); switch (name) { case "left": animator[0].SetBool("Unlock", true); break; case "right": animator[1].SetBool("Unlock", true); break; case "top": animator[2].SetBool("Unlock", true); break; } } } <子オブジェクトのソースコード>(三つの子オブジェクトすべてにアタッチされています。) using System.Collections; using System.Collections.Generic; using UnityEngine; public class GateSwitch : MonoBehaviour { public string switchName; public GameObject player; // Start is called before the first frame update void Start() { } // Update is called once per frame void Update() { } private void OnTriggerEnter(Collider other) { if (other.gameObject == player) { print("you touched "+switchName); //下記から親オブジェクトの変数「name」に「switchName」の文字を代入するスクリプトと親オブジェクトのアニメーションを起動するスクリプト gameObject.GetComponentInParent<Goal>().name = switchName; gameObject.GetComponentInParent<Goal>().activateGate(); } } }
試したこと
子オブジェクトのトリガーが起動することは確認できました。
補足情報(FW/ツールのバージョンなど)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/01/22 05:12
2019/01/22 05:29
2019/01/22 05:43 編集
2019/01/22 06:16
2019/01/22 06:21