質問するログイン新規登録
C#

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Unity

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

Q&A

1回答

507閲覧

ボタンを押して、重複なしでランダムにシーンを切り替えたい。

cho-shoshinnsha

総合スコア0

C#

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Unity

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

0グッド

0クリップ

投稿2024/06/21 09:16

0

0

実現したいこと

unity、VisualStudioでクイズゲームを作っています。

シーンは全部で、"StartScene"、"Q1"、"Q2"、"Q3"、"GoalScene"の5つ。00StartSceneにはStartButtonがある。Q1、Q2、Q3、にはSceneChangeButtonがある。
StartButtonを押したら、ランダムでQ1、Q2、Q3のうちどれかを表示させる。続いてSceneChangeButtonを押すと、さらに前回表示されたシーンを1つ除いたQ1、Q2、Q3のうち2つのシーンからランダムでどちらかを表示させる。さらに続いて、SceneChangeButtonを押すと、前回までに表示されたシーンを2つ除いたQ1、Q2、Q3のうち残り1つのシーンを表示させる。最後にまたSceneChangeButtonを押すと、Q1、Q2、Q3のうち1度も表示されてないシーンはないので、00GoalSceneへと遷移する。

上記のようなプログラムを作りたいのですが、可能なのでしょうか、

発生している問題・分からないこと

ランダムでシーンを切り替えることはできたのですが、重複なしにするのと、ゴールシーンに移るのが出来なかったです。

該当のソースコード

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.SceneManagement; using UnityEngine.SocialPlatforms.Impl; public class SceneScript : MonoBehaviour { public GameObject[] squares; // Square オブジェクトの配列 private List<string> scenes = new List<string> { "Q1", "Q2", "Q3" }; // シーンのリスト private List<string> availableScenes; // 使用可能なシーンのリスト int[] a = new int[100]; // Start is called before the first frame update void Start() { availableScenes = new List<string>(scenes); // 使用可能なシーンのリストを初期化 a= new int[availableScenes.Count]; for (int i = 0; i < a.Length; i++) { a[i]=0; } } // Update is called once per frame void Update() { } public void StartButton() { if (availableScenes.Count == 0) { SceneManager.LoadScene("00GoalScene"); // すべてのシーンが選択されたら GoalScene に移動 //return; } else { string sceneToLoad = ""; int randomIndex = 0; int iFlag = 1; while (iFlag==1) { randomIndex = Random.Range(0, availableScenes.Count); // 使用可能なシーンのリストからランダムに選択 if (a[randomIndex]==0) { sceneToLoad = availableScenes[randomIndex]; // 選択されたシーンの名前を取得 a[randomIndex]=1; iFlag = 0; } } SceneManager.LoadScene(sceneToLoad); // シーンをロード availableScenes.RemoveAt(randomIndex); // 使用したシーンをリストから削除 } } public void SceneChangeButton() { if (availableScenes.Count == 0) { SceneManager.LoadScene("00GoalScene"); // すべてのシーンが選択されたら GoalScene に移動 //return; } else { string sceneToLoad = ""; int randomIndex = 0; int iFlag = 1; while (iFlag==1) { randomIndex = Random.Range(0, availableScenes.Count); // 使用可能なシーンのリストからランダムに選択 if (a[randomIndex]==0) { sceneToLoad = availableScenes[randomIndex]; // 選択されたシーンの名前を取得 a[randomIndex]=1; iFlag = 0; } } SceneManager.LoadScene(sceneToLoad); // シーンをロード availableScenes.RemoveAt(randomIndex); // 使用したシーンをリストから削除 } } }

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

同様のプログラムは見つかりませんでした。

補足

特になし

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

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

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

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

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

guest

回答1

0

シーン遷移を行う場合、特に設定が無ければ、ゲームオブジェクトは全て破棄されます。
そのため、staticDontDestroyOnLoadなどで破棄しないようにするか、SceneManager.LoadSceneLoadSceneMode.Additiveを指定して、追加でロードする形にする、といったことが必要です。

また、上記を行っても、すでに存在しているものと新しいシーンからロードされたものが混在して、影響が出てくる可能性がありますので、「すでに存在する場合が何もせずに自身を破棄」するような処理も必要だと思われます。

投稿2024/06/21 09:53

fiveHundred

総合スコア10499

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

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

cho-shoshinnsha

2024/06/27 09:34

ありがとうございます。お手数をお掛けして申し訳ないのですが、具体的なコードを教えていただくことは可能でしょうか。
fiveHundred

2024/06/27 09:57

大幅に追加・変更を行う必要がありそうなので、厳しいかもしれません。 とりあえず A. シーン遷移を管理するオブジェクトのスクリプト(これをDontDestroyOnLoadなどで維持する) B. 各シーンに配置するUIのスクリプト(ここからA.の各関数を呼び出す) という形で分けるのがいいのではないでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問