私の他の質問と同じ内容に関する内容ですが、問題が絞れてきたので、再度質問させて頂きます。
###発生している問題・エラーメッセージ
カメラに割り当てたスクリプトで、カメラのz座標が300の地点まで達するまでz座標を+30し、300の地点を超えるとオブジェクトAを非アクティブにし、同時に(非アクティブの)オブジェクトBをアクティブにする。
というスクリプトを書きたいのですが、オブジェクトの取得が上手くいきません。
原因を調べてみたところ、startメソッドの時点でオブジェクトBであるBox1/Sphere101の取得ができていないようです。
非アクティブのオブジェクトを参照する為に、親オブジェクトがアクティブであれば参照が可能なtransform.Findを使用して、EmptyなオブジェクトBox1の子階層にSphere101を入れ、参照しています。(画像参照)
###試したこと
-
GameObject.FindでBox1を取得する事が出来たので、オブジェクトの問題ではないように思われます。
-
Box1/Sphere101
から
Box1
と変更し、取得できるか試してみましたが、変更前と同じように取得できませんでした。
(↑この画像のSphere101は非アクティブ状態です)
###該当のソースコード
C#
1using UnityEngine; 2using System.Collections; 3 4public class mvcam_new3 : MonoBehaviour 5{ 6 public Vector3 pos = new Vector3(-11, 0, 0); 7 private GameObject game_object01 = null; 8 private GameObject game_object02 = null; 9 void Start() 10 { 11 game_object01 = GameObject.Find("Sphere100"); 12 game_object02 = transform.Find("Box1/Sphere101").gameObject; 13 } 14 void Update() 15 { 16 17 if (Input.GetKeyDown(KeyCode.Space) && pos.z < 300) 18 { //spaceキーの入力があり、かつx座標が300以下の場合にという条件文 19 pos.z += 30; //x座標を+30する(移動する) 20 transform.position = pos; //位置更新 21 print(transform.position.z); //コンソールを開くと座標が今どこにいるのかわかるのか書いてくれる 22 } 23 else if (Input.GetKeyDown(KeyCode.Space) && pos.z >= 300) 24 { 25 pos.z = 0; 26 transform.position = pos; 27 print(transform.position.z); 28 game_object01.SetActive(false); 29 game_object02.SetActive(true); 30 } 31 } 32}
このスクリプトではtransform.Findを使用していますが、非アクティブなオブジェクトを参照する事ができれば別の方法でも問題ありません。
どうぞよろしくお願いいたします。
###改変
using UnityEngine; using System.Collections; public class mvcam_new3 : MonoBehaviour { public Vector3 pos = new Vector3(-11, 0, 0); private GameObject game_object01 = null; private GameObject game_object02 = null; public void Start() { game_object01 = GameObject.Find("Sphere100"); GameObject game_object02 = (GameObject)Resources.Load ("Prefabs/Sphere101"); Instantiate (game_object02,transform.position,transform.rotation); } void Update() { if (Input.GetKeyDown(KeyCode.Space) && pos.z < 300) { //spaceキーの入力があり、かつx座標が300以下の場合にという条件文 pos.z += 30; //x座標を+30する(移動する) transform.position = pos; //位置更新 print(transform.position.z); //コンソールを開くと座標が今どこにいるのかわかるのか書いてくれる } else if (Input.GetKeyDown(KeyCode.Space) && pos.z >= 300) { pos.z = 0; transform.position = pos; print(transform.position.z); game_object01.SetActive(false); //game_object02.SetActive(true); game_object02.SetActive(true); //game_object02.transform.gameObject.SetActive(true); } } }

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/10/31 05:18
退会済みユーザー
2016/10/31 06:00
2016/10/31 10:32
退会済みユーザー
2016/10/31 10:41