こんにちは。初心者プログラマです。
どうしても自分で解決できなかったので、質問させてください。
##質問内容
制限時間180秒、16面でクリアのゲームを作っています。
各面は、基本的に同じSceneを使っていて、30秒ずつ経つごとにUniRxを使ってイベントが起きるようにしています。
クリアしたかどうかは他のプログラムが把握しており、IsPlayingフラグを使って、ゲーム中かそうでないかを判断させています。
ここで、2面以降、前の面のタイムがクリアされていない事態が起きました。
つまり
0. 1面を40秒でクリア
0. 2面が始まって約20秒でイベント2が発生←これが問題
0. 2面開始30秒後イベント1が発生←これは正常
というようなことが発生しています。
##コード
UniRxを使ったイベント操作
C#
1void Start(){ 2 3 // 省略 4 5 Observable.Timer(TimeSpan.FromSeconds(30)).Subscribe(_ => Event1()); 6 Observable.Timer(TimeSpan.FromSeconds(60)).Subscribe(_ => Event2()); 7 Observable.Timer(TimeSpan.FromSeconds(90)).Subscribe(_ => Event3()); 8 Observable.Timer(TimeSpan.FromSeconds(120)).Subscribe(_ => Event4()); 9} 10 11private void Event1() 12{ 13 if (IsPlaying) 14 { 15 GameObject hint1 = GameObject.Find("hint1"); 16 hint1Text = hint1.GetComponent<Text>(); 17 18 //省略 19 20 Debug.Log("hint1!"); 21 } 22} 23 24//Event2以下もほぼ同様の内容なので省略 25
##補足
最初はGameObjectの取得を、関数内ではなく、Start()内で行っていました。
しかし、そのときイベントはきちんと30秒ごとに起きていたのですが、2面以降ずっと、MissingReferenceExceptionのエラーが出ていました。
気になり調べた結果、Event1()内に書くことで、MissingReferenceExceptionのエラーが消えました。
ところが、エラーが消えると同時に、上記のような挙動が起きてしまうようになりました。
UniRxを使っているヒントのオブジェクトを破棄(Destroy)すればいいのだろうかと模索したのですが、結局行き詰まってしまいました。
いろいろ自分で検索して試しましたが、自力では解決できず、お力を貸していただきたく、書き込ませていただきました。
解決のために、さらに詳細なコードを出す必要がありましたら、ご指摘いただければ追記いたします。
どうか、よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/18 00:37
2019/10/18 13:54 編集
2019/10/19 04:29
2019/10/20 05:38