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

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

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

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

Unity

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

Q&A

解決済

1回答

1418閲覧

消した画像をシーンが変わっても消したままにしたい

Buddha_san2

総合スコア27

C#

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

Unity

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

0グッド

0クリップ

投稿2018/05/17 19:23

編集2018/05/19 02:24

前提

Unity、C#でクイズゲームを作っています。
ライフ制(3回間違えたらゲームオーバー)を考えています。
間違えたら、ライフの画像が消えるようにしたいです。

問題

とても初心者の質問で申し訳ございません。
シーンにある画像を消したいと思います。
しかし、消したはいいものの、次のシーン(同じシーンを新たに発生させる)に移ると消した画像がまた出てきます。
staticを使えばずっと消えた状態になると思いましたがうまくいきません。

該当のソースコード

public class QuizMgr : MonoBehaviour { public static GameObject Heart;
Heart = GameObject.Find("ハート"); Heart.SetActive(false);

よろしくお願いします。

追記

using UnityEngine; using System.Collections; public class HeartBox : MonoBehaviour { public bool dontDestroyEnabled = true; private static GameObject instance = null; public static GameObject Instance { get { return instance; } } void Awake() { //対応させる instance = this.gameObject; //instanceに入っていて、それがHeartBoxなら破壊 if (instance != null && instance != this) { Destroy(this.gameObject); return; } DontDestroyOnLoad(this.gameObject); } //このDeleteInstance2は、今は何も使っていません public static void DeleteInstance2() { if (instance != null) { Destroy(instance.gameObject); instance = null; } } }

画像(ハートのマーク)にこのスプリクトを入れます。
次のシーンに移動させるメソッドの中に、

//ダメージの変数 public static int qCount; //ハートを見つける変数 public static GameObject Heart;
public void NextQuiz() { //もし不正解なら if(g_judgeData == "不正解") {    //同じシーンが続く SceneManager.LoadScene("Quiz"); //1ダメージを入れる qCount++;    //1ダメージ入ったのなら if (qCount == 1) { //ライフの画像を非表示 Heart = GameObject.Find("ハートのマーク"); Heart.SetActive(false); } } }

ボタンにこのNextQuiz()を入れて、ボタンを押すと、同じシーンがまた現れるようになってます。
次は、最初から画像が消えた状態になってしまいました。画像が消えたのはHeartBoxクラスのAwake()のif文が問題だろうと思います。しかし、どうしたら画像を最初だけ出して、一回目の「不正解」以降は非表示、にすればいいのか分かりません。
よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

シーンが呼び出されるたびに、ライフの画像が生成されるからだと思われます。
Heart.SetActive(false);は単に非表示にしているだけなので、前の質問のようなSingleton(+DontDestroyOnLoad())を使えば解決すると思います。


追記:

C#

1 void Awake() 2 { 3 //instanceに入っていて、それがHeartBoxなら破壊 4 if (instance != null && instance != this.gameObject) // 修正:this→this.gameObject 5 { 6 Destroy(this.gameObject); 7 return; 8 } 9 10 instance = this.gameObject; // 修正:位置が違うので移動 11 12 DontDestroyOnLoad(this.gameObject); 13 }

投稿2018/05/18 00:56

編集2018/05/19 04:21
fiveHundred

総合スコア9774

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

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

Buddha_san2

2018/05/18 11:38

同じように出来るんですね・・・すいませんでした 今、前の質問と回答を少し訂正して、作り直したのですが、うまく消えてくれませんでした。 画像本体にSingletonスプリクトを入れて、DeleteInstance()を起動したい所に置いたんですがダメでした。 初心者で申し訳ないです、もう少し教えて頂けると嬉しいです。
fiveHundred

2018/05/18 12:00

「先に存在しているライフ表示のオブジェクトを削除する」のではなく、「Heart.SetActive(false);で非表示になっているオブジェクトはそのままにして、新しいオブジェクトを削除する」感じです。 前の質問のSingletonであれば「複数存在している場合は、後から生成した方を削除する」ようになっているので、特に何もせずとも、勝手に新しいオブジェクトが削除されるはずです。
Buddha_san2

2018/05/18 14:00

試したのですが、うまくいきません・・・追記にコードを書きました、見て頂けると非常に嬉しいです・・・
fiveHundred

2018/05/19 00:59

「HeartBox.DeleteInstance2();」は不要ではないかと思います。 それと、「起動したいスプリクト」というのが実行されるタイミングがいつなのか分からないので、呼び出し元も記載してくれると分かるかもしれません。
fiveHundred

2018/05/19 01:17

後、今気づいたのですが、Awake()に「instance = this.gameObject;」が入って無いので、そこも修正してください。
Buddha_san2

2018/05/19 02:21

修正して、作り直しましたが、まだ直らないです。追記を大きく変えました。もう少しだけお付き合い頂けると大変うれしいです。
fiveHundred

2018/05/19 04:21

まだAwake()におかしいところがあるので、回答にソースコードを記載しました。 これで直りますでしょうか?
Buddha_san2

2018/05/19 10:33

直りました!!!何日も付き合って頂きありがとうございます!また少しSingletonを理解できた気がします、ありがとうございます!
Buddha_san2

2018/05/19 12:37 編集

余談なので、気にしないで頂いて結構なのですが、出来たのをTwitterに上げました! https://twitter.com/Buddha_san2 fiveHundredさんのおかげでここまで出来るようになりました、ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問