StageViewスクリプトで、monsterViewPrefabをインタンシエイトしています。
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5 6public class StageView : MonoBehaviour 7{ 8 [SerializeField] GameObject monsterViewPrefab; 9 [SerializeField] GameObject monster; 10 11 public void SpawnMonster() 12 { 13 monster = Instantiate(monsterViewPrefab); 14 monster.transform.SetParent(transform, false); 15 //return monster.GetComponent<MonsterView>(); 16 } 17 18 19}
その後、MonsterViewスクリプトを用いてmonsterViewPrefabにボタン機能をアタッチしており、生成されたmonsterViewPrefabをクリックすると、Destroyされます。Destoryされ3秒後にまたmonsterViewPrefabを生成したいのですが、うまくいきません。
using System.Collections; using System.Collections.Generic; using UnityEngine; using System; public class MonsterView : MonoBehaviour { //[SerializeField] StageView stageView; /*Action onTap; // public void AddListenerOnTap(Action action) { onTap += action; }*/ public void OnTap() { Debug.Log("MonsterをTap"); Destroy(this.gameObject); //Invoke("SpawnLead",3.0f); } /*void SpwanLead() { stageView.SpawnMonster(); }*/ }
MonsterViewスクリプトでOnTap関数の中で、ボタンが押されたら、 SpwanLead関数を作って、その中にmonsterViewPrefabを生成するSpawnMonster関数を入れて見ましたが、Playボタンを押しても反応がありませんでした。
生成する関数SpawnMonsterは、下のMainPresenterスクリプトで行っています。
StageViewクラスでは、monster変数にInstantiateしたものを入れているので、
これがnullで何も入っていなかったらInvoke関数を用いて、Invoke("SpawnMonster", 3.0f);このように呼び出せるかと思いましたが、「stageView.monster == null」のmonsterはアクセスできない保護レベルになっていてできませんでした。
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5using UnityEngine.SceneManagement; 6 7public class MainPresenter : MonoBehaviour 8{ 9 [SerializeField] PlayerStatusView playerStatusView; 10 [SerializeField] StageView stageView1; 11 [SerializeField] StageView stageView2; 12 [SerializeField] StageView stageView3; 13 [SerializeField] GameObject menuView; 14 [SerializeField] GameObject finalScoreText; 15 16 [SerializeField] GameObject leftTimeText; 17 //TimeController timeController; 18 PlayerModel playerModel; 19 StageView stageView; 20 public float leftTime = 20; 21 22 23 24 public void OnRetryButton() 25 { 26 SceneManager.LoadScene("Main"); 27 } 28 29 public void OnToTitleButton() 30 { 31 SceneManager.LoadScene("Title"); 32 } 33 34 void Start() 35 { 36 playerModel = new PlayerModel(); 37 stageView = new StageView(); 38 39 //timeController = new TimeController(); 40 41 stageView1.SpawnMonster(); 42 stageView2.SpawnMonster(); 43 stageView3.SpawnMonster(); 44 //playerStatusView.UpdateText(playerModel); 45 leftTimeText.GetComponent<Text>().text = ((int)leftTime).ToString(); 46 } 47 48 void Update() 49 { 50 51 leftTime -= Time.deltaTime; 52 53 if (leftTime < 0) leftTime = 0; 54 //GetComponent<Text>().text = "残り時間:" + ((int)leftTime).ToString(); 55 56 57 if(stageView.monster == null) 58 { 59 Debug.Log("nothing"); 60 Invoke("SpawnMonster", 3.0f); 61 } 62 63 64 65 if (leftTime <= 0) 66 { 67 menuView.SetActive(true); 68 finalScoreText.SetActive(true); 69 } 70 71 leftTimeText.GetComponent<Text>().text = "残り時間:" + ((int)leftTime).ToString(); 72 } 73 74}
行いたいことは、プレハブのモグラを叩いて消えたら3秒後に生成することです。
どなたか、ご教示よろしくお願いいたします。
何か不十分な点があれば、情報を追記いたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/02 13:03