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

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

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

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

Unity

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

Q&A

解決済

3回答

1415閲覧

Unityでランダムな値を取得したい

rsu

総合スコア75

Visual Studio

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

Unity

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

0グッド

0クリップ

投稿2019/08/29 01:05

編集2019/08/29 01:42

Random.Rangeが止まらない。

ジャンケンゲームを作っています。2Dです。
1~3のランダムな整数を出してその数字によって処理が変わるようにしたいのですが、ずっと数字が変わっていて止まりません。Random.Rangeって止まらないのでしょうか。
intでランダムな数字にしてます。

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5using UnityEngine.SceneManagement; 6 7public class Janken : MonoBehaviour 8{ 9 public GameObject start1; 10 public GameObject start2; 11 public GameObject win; 12 public GameObject lose; 13 public GameObject aiko; 14 public GameObject rockButton; 15 public GameObject scissorsButton; 16 public GameObject paperButton; 17 public GameObject EnemyRock; 18 public GameObject EnemyScissors; 19 public GameObject EnemyPaper; 20 public GameObject PlayerRock; 21 public GameObject PlayerScissors; 22 public GameObject PlayerPaper; 23 public bool rockBool = false; 24 public bool scissorsBool = false; 25 public bool paperBool = false; 26 public bool winBool = false; 27 public bool loseBool = false; 28 public bool aikoBool = false; 29 public int EnemyNumber; 30 31 // Start is called before the first frame update 32 void Start() 33 { 34 start1.SetActive(true); 35 start2.SetActive(false); 36 win.SetActive(false); 37 lose.SetActive(false); 38 aiko.SetActive(false); 39 rockButton.SetActive(false); 40 scissorsButton.SetActive(false); 41 paperButton.SetActive(false); 42 EnemyPaper.SetActive(false); 43 EnemyRock.SetActive(false); 44 EnemyScissors.SetActive(false); 45 PlayerRock.SetActive(false); 46 PlayerScissors.SetActive(false); 47 PlayerPaper.SetActive(false); 48 Invoke("start2Text", 3); 49 } 50 public void start2Text() 51 { 52 start1.SetActive(false); 53 start2.SetActive(true); 54 rockButton.SetActive(true); 55 scissorsButton.SetActive(true); 56 paperButton.SetActive(true); 57 } 58 public void RockButtonScene() 59 { 60 rockBool = true; 61 } 62 63 public void ScissorsButtonScene() 64 { 65 scissorsBool = true; 66 } 67 68 public void PaperButtonScene() 69 { 70 paperBool = true; 71 } 72 73 // Update is called once per frame 74 void Update() 75 { 76 if (rockBool) 77 { 78 start2.SetActive(false); 79 rockButton.SetActive(false); 80 scissorsButton.SetActive(false); 81 paperButton.SetActive(false); 82 PlayerRock.SetActive(true); 83 Enemy(); 84 } 85 else if (scissorsBool) 86 { 87 start2.SetActive(false); 88 rockButton.SetActive(false); 89 scissorsButton.SetActive(false); 90 paperButton.SetActive(false); 91 PlayerScissors.SetActive(true); 92 Enemy(); 93 } 94 else if (paperBool) 95 { 96 start2.SetActive(false); 97 rockButton.SetActive(false); 98 scissorsButton.SetActive(false); 99 paperButton.SetActive(false); 100 PlayerPaper.SetActive(true); 101 Enemy(); 102 } 103 //グー 相手も グー 104 else if ((rockBool == true)&&(EnemyNumber == 1)) 105 { 106 EnemyRock.SetActive(true); 107 aiko.SetActive(true); 108 } 109 //グー 相手は チョキ 110 else if ((rockBool == true)&&(EnemyNumber == 2)) 111 { 112 EnemyScissors.SetActive(true); 113 win.SetActive(true); 114 } 115 //グー 相手は パー 116 else if ((rockBool == true)&&(EnemyNumber == 3)) 117 { 118 EnemyPaper.SetActive(true); 119 lose.SetActive(true); 120 } 121 //チョキ 相手は グー 122 else if ((scissorsBool == true)&&(EnemyNumber == 1)) 123 { 124 EnemyRock.SetActive(true); 125 lose.SetActive(true); 126 } 127 //チョキ 相手も チョキ 128 else if ((scissorsBool == true)&&(EnemyNumber == 2)) 129 { 130 EnemyScissors.SetActive(true); 131 aiko.SetActive(true); 132 } 133 //チョキ 相手は パー 134 else if ((scissorsBool == true)&&(EnemyNumber == 3)) 135 { 136 EnemyPaper.SetActive(true); 137 win.SetActive(true); 138 } 139 //パー 相手は グー 140 else if ((paperBool == true)&&(EnemyNumber == 1)) 141 { 142 EnemyRock.SetActive(true); 143 win.SetActive(true); 144 } 145 //パー 相手は チョキ 146 else if ((paperBool == true)&&(EnemyNumber == 2)) 147 { 148 EnemyScissors.SetActive(true); 149 lose.SetActive(true); 150 } 151 //パー 相手も パー 152 else if ((paperBool == true)&&(EnemyNumber == 3)) 153 { 154 EnemyPaper.SetActive(true); 155 aiko.SetActive(true); 156 } 157 } 158 public void Enemy() 159 { 160 // EnemyNumberが1だったらグー 161 // EnemyNumberが2だったらパー 162 // EnemyNumberが3だったらチョキ 163 EnemyNumber = Random.Range(1,4); 164 } 165 //ボタンを押したらもう一回このシーンを呼び出す。 166 public void Restart() 167 { 168 SceneManager.LoadScene("Main"); 169 } 170} 171

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

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

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

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

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

guest

回答3

0

ベストアンサー

Random.Rangeが止まらない訳ではなく、あなたが止まらないコードを書いています。

Updateは毎フレーム呼ばれます。
一度ボタンが押されて(?)rockBool / scissorsBool / paperBoolがtrueになった後、falseになる所がありません。
なのでその後Update内のif (rockBool) {〜} else if (scissorsBool) {〜} else if (paperBool) {〜}が条件を満たし続けます。
このif文内でEnemy()が呼ばれるので、Random.Rangeが繰り返し実行されます。

進行状況を管理する変数を追加するなり何なりする必要があります。

投稿2019/08/29 01:31

sakura_hana

総合スコア11427

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

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

rsu

2019/08/29 01:40

Enemy()にrockBoolとscissorsBoolとpaperBoolをfalseにするよう追加しときます。ありがとうございます!
sakura_hana

2019/08/29 01:45

そうすると「//グー 相手も グー」などの判定が出来なくなるので、その辺上手いこと調整が必要かと思います。
rsu

2019/09/04 12:22

Update()からEnemy()を外し、グーチョキパーのどれかのボタンが押されたらEnemy()を呼び出しにしたら上手くいきました!!
guest

0

ランダムな整数を生成している関数Enemy()rockBoolscissorsBoolpaperBooltrueのとき常に呼び出されているようです。falseにしている記述が見当たらないのですが、どこかで別の所で操作しているのでしょうか。
一度だけ読まれるようにするには、特定のタイミングで(Enemy()呼んだ後とか)falseにしてみるといいかと思います。

投稿2019/08/29 01:31

simapiko

総合スコア332

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

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

0

Random.Range(1,4) は1.0以上4.0以下のfloatを返す関数です
呼び出すたびに毎回ランダムの値を生成します
止まる、という意味がわかりませんが、値を保存しておきたいなら変数に入れておけばいいと思います

ちなみに、低確率で4になることだけ注意してください

投稿2019/08/29 01:29

izmktr

総合スコア2856

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問