コード ```### 前提・実現したいこと とても初歩的な質問で失礼します EnemyのHPが0になったことを契機にTrueにして表示したPanelを 一定秒数後(3秒後)にもう一度falseにして非表示にしたいです ### 発生している問題・エラーメッセージ
現在Time.deltaTimeを使っているが非表示の処理だけ行われない
### 該当のソースコード
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class MainSystem : MonoBehaviour
{
public int Ratp;
public Player player;
public Enemy enemy;
public GameObject ResultPanel;
public GameObject NextStagePanel;
//PlayerTurnのTF
bool IsPlayerTurn;
//GameOverのTF
bool IsGameOver;
//次enemy出現タイムのTF
float second = 0f; void Start() { //PlayerTurnをT、GameOverをF、GameOver画面を隠す IsPlayerTurn = true; IsGameOver = false; ResultPanel.SetActive(false); NextStagePanel.SetActive(false); } //GameOver画面を出す処理 void ViewResult() { ResultPanel.SetActive(true); } //NextStage画面を出す処理 void Update() { //Playerのターン終了後の処理 if (!IsPlayerTurn) { //enemyのターン、playerターンの1秒後に開始 second += Time.deltaTime; if (second >= 1f) { //playerはenemyの攻撃力分のダメージを受け、enemyターン終了 player.Damage(enemy.atp); IsPlayerTurn = true; second = 0f; } } if(enemy.hp <= 0) { Destroy(this.gameObject); Debug.Log("Trueに変更"); StartCoroutine(ShowImageSecond(NextStagePanel, 2f)); } //playerが負けた際の処理 if(player.hp <= 0) { IsGameOver = true; } //GameOverになった時の処理 if(IsGameOver) { ViewResult(); return; } } IEnumerator ShowImageSecond(GameObject targetObj,float sec) { targetObj.SetActive(true); yield return new WaitForSeconds(sec); targetObj.SetActive(false); } //攻撃ボタンを押した時の処理 public void PushAttackButton() { //player攻撃力の抽選、Ratpに代入、攻撃、playerターンの終了 Ratp = Random.Range(1, 1000); Debug.Log(Ratp); enemy.Damage(Ratp); IsPlayerTurn = false; }
}
### 試したこと 関数をInvoke,StartCoroutineに置き換えて実行してみたがどうしても非表示の処理だけが行われません。 ### 補足情報(FW/ツールのバージョンなど) 開発環境 Mac Unity2020,3,15f2 VScommunityforMac コード上の("treeに変更")のDebug.logは表示されるのでそこまでは正常に動作していると思われます。 また、他の実装方法があれば教えていただけると助かります。 よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー