web-dev-qa-db-ja.com

Unity3Dの乱数?

私が見つけたのは、乱数を作成する方法でした。すごい。ただし、このソリューションは他の機能では機能しませんでした。乱数を作成するために、私は

_Random randomDirection = new Random();
int directionChoice = randomDirection.Next(1, 4); 
_

enemyWalk(){}と呼ばれる関数の内部;

ただし、これによりエラーが発生しました。

タイプ「UnityEngine.Random」には「Next」の定義が含まれておらず、タイプ「UnityEngine.Random」の拡張メソッド「Next」が見つかりませんでした(usingディレクティブまたはアセンブリ参照がありませんか?)

ランダム整数ジェネレーターを関数から削除しても、このエラーは表示されません。この問題を解決するための解決策はありますか?

このコードを使用して、何もしていないときに敵が歩く方向(上、左、右、または下)を決定する整数をランダムに選択し、ランダムなダブルジェネレーターを使用して距離を決定することで、敵をさまようようにしたいと考えています。歩きます。ただし、enemyWalk(){};が呼び出されるたびに生成される乱数が必要です。

6
Jeff

Unity C#では、方法は次のとおりです

_Random.Range(minVal, maxVal);
_

nity Documentation-Random を参照してください。

このメソッドは、整数または浮動小数点引数のいずれかを受け入れます。 intsを使用する場合、minValinclusiveであり、maxValexclusiveの戻りランダム値です。あなたの場合は次のようになります。

_Random.Range(1,4);
_

Next(1,4)の代わりに。

たとえば、フロートを使用する場合

_Random.Range(1.0F, 3.5F);
_

戻り値もfloatであり、この場合、minValmaxVal包括的です。

12
Michael

簡単な解決策は、.NETのRandomクラスを使用することです。これはたまたまSystem名前空間にあります。

using System;

...

//Or System.Random without the using
Random randomDirection = new Random();
int directionChoice = randomDirection.Next(1, 5);

Unityを使用する場合は、Rangeの代わりにNextを呼び出します。

int directionChoice = randomDirection.Range(1, 5);

「max」はどちらの場合もexclusiveであることに注意してください。したがって、1〜4(4を含む)の値を返すには5を使用する必要があります。

ランダムに取得するにはfloat

Random.NextDouble(); //careful, this is between 0 and 1, you have to scale it
//Also, this one is exclusive on the upper bound (1)

Random.Range(1f, 4f); //max is inclusive now
6
BradleyDotNET