質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

1202閲覧

一度表示したPanelを一定時間後に非表示にしたい

BounceTime

総合スコア1

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2021/09/03 06:04

編集2021/09/03 12:59
コード ```### 前提・実現したいこと とても初歩的な質問で失礼します 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は表示されるのでそこまでは正常に動作していると思われます。 また、他の実装方法があれば教えていただけると助かります。 よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YAmaGNZ

2021/09/03 12:34

Destroyしてスクリプトが止まってたりしませんか?
bboydaisuke

2021/09/03 12:54 編集

コードブロックが効いてない状態でコードを貼ってるので書式がめちゃくちゃになっていて、読めません。
BounceTime

2021/09/03 13:03

今コードを修正しました。 bboydaisuke様。ご指摘ありがとうございます。 こちらのサイトを使うのが初めてで不慣れな部分があり、見にくい質問をして申し訳ございません。 YAmaGNZ様の言う通りenemyのHPが0になった際、スクリプトごとデストロイしていたため正常に動きませんでした。 ご回答ありがとうございました。
guest

回答1

0

ベストアンサー

Update() の中で自分自身を Destroy するのをやめればよいです。
というか、MainSystem を Destroy してしまったらその後何もできなくなってしまうので、それをしないで済むように全体を考え直さなければいけないと思います。

投稿2021/09/03 09:56

編集2021/09/03 13:32
bboydaisuke

総合スコア5275

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bboydaisuke

2021/09/03 09:57

失礼しました。Invoke は試してるんですね。ソースコードをコードブロックで貼り付けてくれたら見ます。
bboydaisuke

2021/09/11 04:10

ソースコードがコードブロックで貼り付けられていることを確認したので、コードを見て回答を編集しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問