Unityを使用してゲームを作成しているのですが、Instantiate()
を使用して作成したgameObjectと呼び出し元のgameObjectの紐づけがうまくできず困っています。
具体例として、MainObjectと、NewObjectというprefabsを作成し、それぞれのスクリプトを
C#
1public class MainObject : MonoBehaviour{ 2 gameObject hoge; 3 4 public void CreateObject(){ 5 hoge = Instate(newObject); 6 } 7 8 public void Close(){ 9 Destroy(hoge); 10 } 11}
C#
1public class NewObject : MonoBehaviour{ 2 gameObject mainObj; 3 4 public void OnClick(){ 5 MainObject mainObj = GameObject.Find("MainObject").GetComponent<BattleMain>(); 6 hoge2.GetComponent<MainObject>().Close(); 7 } 8}
とした場合、mainObj中のhoge = nullとなってしまいNewObject側からOnClickを実行してもCreateObject()
で新たに作成したhogeが削除できませんでした。mainObjを
C#
1 [SerializeField] 2 private gameObject mainObj;
とし、予めMainObjectのprefabsをアタッチした場合も、mainObj中のhoge = nullとなってしまいダメでした。
理想としては、NewObject側からCreateObject()
を呼び出したgameObject(MainObject)中の、Close()
関数を呼び出し、hogeを削除したいのですが、このようなことは可能なのでしょうか?
つたない説明で申し訳ないのですが、アドバイスよろしくお願いします。
///////////////////////////////////////////////////////////////////////
問題部分を抜き出したコードに不備があったため、サンプルコードを作成しました。こちらでは、正常に処理が行えるため、今一度自分なりにコードを見直してみようと思います。
上記コード同様,MainObjectと、そこから作成されるNewObjectのプレファブを作成し、それぞれのスクリプトを
C#
1using UnityEngine; 2using UnityEngine.UI; 3using System.Collections; 4 5public class MainObject : MonoBehaviour { 6 GameObject hoge; 7 8 [SerializeField] 9 private Canvas canvas; 10 [SerializeField] 11 private GameObject newObject; 12 13 public void CreateObject() 14 { 15 if (hoge == null || !hoge.activeInHierarchy) 16 { 17 hoge = Instantiate(newObject); 18 hoge.transform.SetParent(canvas.transform, false); 19 } 20 21 } 22 public void Close() 23 { 24 Destroy(hoge); 25 } 26}
C#
1using UnityEngine; 2using System.Collections; 3 4public class NewObject : MonoBehaviour { 5 6 GameObject mainObj; 7 8 public void OnClick() 9 { 10 MainObject mainObj = GameObject.Find("MainObject").GetComponent<MainObject>(); 11 mainObj.GetComponent<MainObject>().Close(); 12 } 13}
としており、MainObject中のcanvasには、MainOjectが配置してあるcanvasを、newObjectにはNewObjectをアタッチしてあります。
CreateObject()が呼び出されると、NewObjectであるhogeが作成され、作成されたhogeのOnclick()が呼び出されると、MainObject側のClose()を実行し、hogeを削除することができます。
自分のプログラムでは、NewObject側から、MainObjectのClose()を呼び出した際、hoge = null となってしまっており、hogeを削除することができません。特にエラーなどは出ていません。何か、心当たりがある方また、改善案等ありましたら、ぜひアドバイスお願いします。
長文失礼いたしました。よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー