Hi I’m not sure am I correctly ask, sorry if i make mistake.
I have a script which have an array of float values. This script is holding data about when i kill an enemy. It adds value of pointsToEarn to my general score. I want to make it randomize. I dont want to give “pointsToEarn” a static value, I want to give it a random value, such as random.range(1,5). But I dont understand how should i put Random.Range inside it.
Can you help me? Thank you for your patience.
public float[] pointsToEarn = new float[2];
(...)
Anotherscript.anotherFunction(0, pointsToEarn[0]);
From what I can tell, you’re trying to add a score of 1 to 5 randomly. This is the best way to do it:
public float maxPointsToEarn = 5;
// add to score (yours may be different)
void AddScore(float points)
{
score += points;
}
// somewhere else
AddScore(Random.Range(1, maxPointsToEarn));
I hope this ain’t too much. But I wanted to show three ways of using random numbers with arrays.
Start calls 3 functions. Each of them shows a different way to use Random.Range.
- The first example just stores random values into an array.
- The second example pick random values from an array.
- The third example got random ranges in the array. To clarify, you could access
knownRanges[0].Value
10 times, get 10 random values each time, but within the range of [100, 150].
RandomRangeArrayExamples.cs
using UnityEngine;
using StringBuilder = System.Text.StringBuilder;
public class RandomRangeArrayExamples : MonoBehaviour
{
StringBuilder logger = new StringBuilder();
void Start()
{
DemoRandomNumbersInArray();
DemoKnownNumbersInArray();
DemoKnownRangesInArray();
print(logger);
}
/*
DemoRandomNumbersInArray
number > 7.994198
number > 0.01712418
number > -7.934887
number > -3.391624
*/
void DemoRandomNumbersInArray()
{
logger.AppendLine("DemoRandomNumbersInArray");
// 4 randomly generated numbers between -10 and 10
float[] randomNumbers = {
Random.Range(-10f, 10f),
Random.Range(-10f, 10f),
Random.Range(-10f, 10f),
Random.Range(-10f, 10f)
};
// each number in the array is random
foreach (float randomNumber in randomNumbers)
logger.AppendLine(" number > " + randomNumber);
logger.AppendLine();
}
/*
DemoKnownNumbersInArray
index 0 > 100
index 2 > 300
index 2 > 300
index 0 > 100
*/
void DemoKnownNumbersInArray()
{
logger.AppendLine("DemoKnownNumbersInArray");
// 4 chosen numbers, accessed randomly
float[] knownNumbers = {
100,
200,
300,
500
};
// each access to the array is random
for (int i = 0; i < 4; ++i)
{
int randomIndex = Random.Range(0, knownNumbers.Length);
float randomNumber = knownNumbers[randomIndex];
logger.AppendLine(" index " + randomIndex + " > " + randomNumber);
}
logger.AppendLine();
}
/*
DemoKnownRangesInArray
range[100, 150] > 121.7349
range[200, 250] > 233.4365
range[300, 350] > 335.7147
range[500, 550] > 529.447
*/
void DemoKnownRangesInArray()
{
logger.AppendLine("DemoKnownRangesInArray");
// 4 chosen ranges of random numbers
RandomRange[] knownRanges = {
new RandomRange(100, 150),
new RandomRange(200, 250),
new RandomRange(300, 350),
new RandomRange(500, 550)
};
// each range in the array generate a random number
foreach (RandomRange knownRange in knownRanges)
logger.AppendLine(" range " + knownRange + " > " + knownRange.Value);
logger.AppendLine();
}
}
[System.Serializable]
public class RandomRange
{
public float min;
public float max;
public float Value { get { return Random.Range(min, max); } }
public RandomRange(int min, int max)
{
this.min = min;
this.max = max;
}
public override string ToString()
{
return "[" + min + ", " + max + "]";
}
}
something like this:
pointsToEarn[0] = UnityEngine.Random.Range(-10f, 10f)
?