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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Unity

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

Q&A

解決済

1回答

1035閲覧

ランダムで画面遷移するようにしたい

ururin

総合スコア10

Unity

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

0グッド

0クリップ

投稿2020/11/06 04:17

using System.Collections;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using System.Collections.Generic;
public class Randomfunction : MonoBehaviour
{

//初期化
List<int> lst = new List<int> { 0, 1, 2, 3 };
public void Onclikwarp()
{

int aaa = lst[Random.Range(0, lst.Count)]; Debug.Log(lst[aaa]); // 要素を表示 //出力したランダムの値をlistから削除 lst.Remove(aaa); //空要素の削除 // lst.Remove(null); if (aaa == 0) { SceneManager.LoadScene("game"); } else if (aaa == 1) { SceneManager.LoadScene("game1"); } else if (aaa == 2) { SceneManager.LoadScene("game2"); } else if (aaa == 3) { SceneManager.LoadScene("game3"); }

}
}

こちらのプログラムでボタンをクリックしたときランダムで画面遷移を行いたいのです。

分からないことが2つあります。
①ランダムで画面遷移した場所を次またでないようにする
②要素数を削除するとnullになりますが、上記のやり方でnullを消すとint型でnullはだめとエラーメッセージが出てしまいます。他に要素数のnullの消し方があれば是非お願い致します。

①の例としました下記のようにしたいです。

例えばダンジョンとして
最初ボタンを押すと1~5階の好きなとこ
ランダムで3が出たら3階にいきまたボタンを押すと3階はでないようにして1、2、4、5の中からランダムに飛ぶ。飛んだ場所は1階としたら次は2、4、5の中からランダムに飛ぶという感じにしたいです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

要素数を削除するとnullになりますが、

それは間違いです。
Listの要素をRemove()で削除した場合、その要素が詰められます。
例えばlst.Remove(1);の場合、0, 2, 3となります(実行例
(というか、そもそもint型がnullになることはありません)

また、シーンチェンジした場合は、初期設定では全てのゲームオブジェクトが削除されます。
その場合、当然ながらスクリプトも全て削除されます。
仮にRandomfunctionを呼び出したとしても、それは別物なので、lstは初期値の状態です。
これを回避する場合は、以下のようにしてください。

  • セーブする必要が無い場合:staticやDontDestroyOnLoad()を使う
  • セーブする必要が有る場合(再起動後も値を維持したい場合):ファイルやPlayerPrefsに保存

投稿2020/11/06 05:20

fiveHundred

総合スコア10152

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

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

ururin

2020/11/06 06:17

ありがとうございます!つまり空の削除は不要ということでしょうか?
ururin

2020/11/09 04:58

先日教えていただいた初期値にならない方法ですが、もしDontDestroyOnLoadを使用する場合 スクリプトの記述ではDontDestroyOnLoad(オブジェクト名)となると思いますが、2つ疑問があります。 ①次のシーンで引き継いできたオブジェクトの最初の位置を違う位置にできるのか ②次のシーン以降の引き継ぎのやり方がわかりません ②については最初のシーンはボタンオブジェクトをインスペクターに挿入すれば次のシーンで残るオブジェクトとなるのですが、次のシーンから次の次のシーンへ残す場合どのようにしたら残るでしょうか?よろしくお願い致します。
fiveHundred

2020/11/09 11:55

> ①次のシーンで引き継いできたオブジェクトの最初の位置を違う位置にできるのか 引き継いだオブジェクトの位置はシーン変更前のものを引き継ぎます。 > ②次のシーン以降の引き継ぎのやり方がわかりません そもそも、DontDestroyOnLoadで指定したオブジェクトは、解除するか破棄するまで永遠に残り続けます。
ururin

2020/11/09 14:08

ありがとうございます!無事にランダムプログラム完成致しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問