Unigine.Random Struct
This class implements pseudo-random number generation functions for various purposes. A 32-bit seed value is used, upon creation an instance is initialized with a seed value equal to the current time. In case two instances of Random are created with the same seed, and the same sequence of method calls is made for each, they will generate and return identical sequences of numbers. Therefore, if you have a component using its own internal Random member (e.g., to move a node in a random direction, see code below), the sequence of numbers generated for different nodes having this component assigned will likely be the same resulting in all nodes moving together in one direction.
public class RandomMovement : Component
{
public float speed = 2.0f; // movement speed
private Unigine.Random rnd; // internal random generator
private void Init()
{
// initializing a random generator
rnd = new Unigine.Random();
}
private void Update()
{
// getting x and y random values (same for different nodes having the component assigned)
float x = rnd.Int(-1, 2);
float y = rnd.Int(-1, 2);
vec3 dir = new vec3(x, y, 0);
// moving the node along the obtained direction vector with the given speed
node.WorldPosition = node.WorldPosition + dir * speed * Game.IFps;
}
}
To avoid such behavior you can use similar methods of the Game class as in this case there is a single Random generator (internal Game class member) and each call to Game.GetRandom*() method returns the next element of the pseudo-random number sequence.
public class RandomMovement : Component
{
public float speed = 2.0f; // movement speed
private void Update()
{
// getting x and y random values (vary for different nodes having the component assigned)
float x = Game.GetRandomInt(-1, 2);
float y = Game.GetRandomInt(-1, 2);
vec3 dir = new vec3(x, y, 0);
// moving the node along the obtained direction vector with the given speed
node.WorldPosition = node.WorldPosition + dir * speed * Game.IFps;
}
}
Random Class
Members
uint CalcRandomSeed ( ) #
Returns the randomizer seed.Return value
Resulting uint value.ref Random Get ( ) #
Returns a random value.Return value
Return value.uint UInt ( ) #
Returns a random uint value.Return value
Resulting uint value.int Int ( ) #
Returns a random int value.Return value
Resulting int value.ulong ULong ( ) #
Returns a random ulong value.Return value
Resulting ulong value.long Long ( ) #
Returns a random long value.Return value
Resulting long value.float Float ( ) #
Returns a random float value.Return value
Resulting float value.double Double ( ) #
Returns a random double value.Return value
Resulting double value.vec4 Color ( ) #
Returns a random color vector. X, Y, Z values of the color vector are random values, W value is equal to 1.0f.Return value
Random color vector.vec3 Direction ( ) #
Returns a random normalized direction vector.Return value
Random direction vector.int Int ( int from, int to ) #
Generate a random value in range [to,from).Arguments
- int from - From value (beginning of the range).
- int to - To value (end of the range).
Return value
Resulting int value.float Float ( float from, float to ) #
Generate a random value in range [to,from).Arguments
- float from - From value (beginning of the range).
- float to - To value (end of the range).
Return value
Resulting float value.double Double ( double from, double to ) #
Generate a random value in range [to,from).Arguments
- double from - From value (beginning of the range).
- double to - To value (end of the range).