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

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

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

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

Unity

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

Q&A

解決済

2回答

662閲覧

Unity:ランキング入力時のリセットキー無効化

YA87

総合スコア6

C#

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

Unity

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

0グッド

0クリップ

投稿2023/01/31 08:21

前提

Unityで制作しているゲームに、こちらのサイトを参考にしてランキング機能をつけました。
https://blog.naichilab.com/entry/webgl-simple-ranking

ゲームオーバー時にゲームオーバーパネルが出現、そのときにRキー、Bキーで画面を切り替えるようにしています。
そのキー入力がランキング入力時にも反映されてしまうので名前にbやrが入っている人の場合、送信前に画面が切り替わってしまいます。
ランキングがシーン上にあるか検知してif分に追加する方法を探しているのですが、ランキングはゲームとは別のシーンなのでどう検知すればいいか分かりません。
検知方法、もしくはその他の方法があれば教えていただきたいです。

実現したいこと

ランキング入力中はリセットキー・リスタートキーを無効化したい。

発生している問題・エラーメッセージ

ランキング入力中に特定キーを入力すると、スコアが破棄されて画面が切り替わってしまう。

該当のソースコード

using System.Collections; using DG.Tweening; using UnityEngine; using UnityEngine.UI; using UnityEngine.SceneManagement; public class GameManager : MonoBehaviour { [SerializeField] private int countDownTime; [SerializeField] private Text countDownText, gameOverText, scoreText; [SerializeField] private GameObject gameOverPanel; void Start() { if (!countDownText.gameObject.activeSelf) { countDownText.gameObject.SetActive(true); } StartCoroutine(CountDownStart()); } private void Update() { //ここにランキングシーンの検知を追加したい。 if (gameOverPanel.activeSelf) { if (Input.GetKeyDown(KeyCode.B)) { SceneManager.LoadScene(0); Time.timeScale = 1; } else if (Input.GetKeyDown(KeyCode.R)) { SceneManager.LoadScene(1); Time.timeScale = 1; } } } IEnumerator CountDownStart() { while (countDownTime > 0) { countDownText.text = countDownTime.ToString(); yield return new WaitForSeconds(1f); countDownTime --; } countDownText.text = "START!"; yield return new WaitForSeconds(1f); countDownText.gameObject.SetActive(false); yield break; } public void GameOver() { scoreText.text = string.Format("SCORE:{0}", ScoreManager.score); gameOverPanel.SetActive(true); gameOverText.transform.DOShakePosition(1f, 100f, 30, 30, false, true) .SetUpdate(true); //ランキングの表示 naichilab.RankingLoader.Instance.SendScoreAndShowRanking(ScoreManager.score); Time.timeScale = 0; } }

試したこと

Active

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

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

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

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

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

guest

回答2

0

自己解決

GameManager.csにstatic boolを作って、スコア送信ボタンか閉じるボタンが押されたときにtrueになるような処理を書いてif文の条件に追加しました。

投稿2023/01/31 13:46

YA87

総合スコア6

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

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

0

手っ取り早くやるなら、boolを包んだScriptableObjectを使うと良い感じです。

参考記事:
https://unity.com/ja/how-to/architect-game-code-scriptable-objects

C#

1using System; 2using UnityEngine; 3 4[CreateAssetMenu] 5public class BoolVariable : ScriptableObject,ISerializationCallbackReceiver 6{ 7 [SerializeField] 8 private bool initialValue; // 初期値 9 10 [NonSerialized] 11 public bool Value; // ゲーム中に見る値 12 13 // ゲーム内で使う時に初期化 14 public void OnAfterDeserialize() 15 { 16 Value = initialValue; 17 } 18 19 public void OnBeforeSerialize() 20 { 21 } 22}

使い方

C# ランキング表示側クラス

1 [SerializeField] 2 private BoolVariable isRanking; // インスペクターでBoolVariableをセットする 3 4 // ランキング表示非表示時にValueを変える処理を作って適当に呼ぶ 5 private void OnRankingOpen() 6 { 7 isRanking.Value = true; 8 } 9 10 private void OnRankingClose() 11 { 12 isRanking.Value = false; 13 }

C# GameManager

1 [SerializeField] 2 private BoolVariable isRanking; // GameManagerにも同じBoolVariableをセットする。 3 4 private void Update() 5 { 6 // BoolVariableを見る 7 if (isRanking.Value == true) 8 { 9 // キー入力無効の処理を書く 10 } 11 12 if (gameOverPanel.activeSelf) 13 { 14 if (Input.GetKeyDown(KeyCode.B)) 15 { 16

ScritptableObjectはシーン関係なく参照できるので、このようなシーン間の値の共有ができます。
やってることはグローバル変数なので、やりすぎ使いすぎ注意です。

投稿2023/01/31 09:41

編集2023/01/31 09:58
UnchFullburst

総合スコア669

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

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

YA87

2023/01/31 13:48

結局自己解決しましたが、とても参考になりました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問