unity 不重复随机数怎么写
时间: 2023-09-01 16:10:39 浏览: 100
在Unity中生成不重复的随机数可以使用Fisher–Yates shuffle算法,具体实现如下:
```csharp
int[] nums = new int[maxNum]; // 创建一个数组,用于保存随机数
for (int i = 0; i < maxNum; i++) {
nums[i] = i; // 将数字按顺序填入数组
}
for (int i = 0; i < maxNum; i++) {
int randomIndex = Random.Range(i, maxNum); // 在剩余数字中随机选择一个数字的位置
int temp = nums[i]; // 将当前数字保存到临时变量中
nums[i] = nums[randomIndex]; // 将随机选择的数字赋值给当前位置
nums[randomIndex] = temp; // 将当前数字赋值给随机选择的位置
}
// 现在nums数组中保存的就是不重复的随机数
```
以上代码会生成一个包含0到maxNum-1之间所有数字的数组,然后对这个数组进行随机排序,最终得到的数组就是不重复的随机数。
相关问题
unity不重复随机数
在Unity中,生成不重复的随机数可以通过以下步骤实现:
1. 创建一个整型数组,用于存储已生成的随机数。
2. 设定需要生成的随机数数量,例如设定为n个。
3. 使用循环,不断生成随机数,直到数组中存储的随机数数量等于n。
a. 在循环中生成一个随机数。
b. 使用另一个循环,遍历数组,检查生成的随机数是否已存在于数组中。
c. 如果随机数已存在,则返回到步骤a重新生成随机数。
d. 如果随机数不存在,则将其存储到数组中。
4. 当循环结束后,数组中存储的即为不重复的随机数。
以下是一个示例代码:
```csharp
using UnityEngine;
public class NonRepeatingRandom : MonoBehaviour
{
public int numberOfRandomNumbers;
public int[] nonRepeatingRandomNumbers;
void Start()
{
nonRepeatingRandomNumbers = GenerateNonRepeatingRandomNumbers(numberOfRandomNumbers);
}
int[] GenerateNonRepeatingRandomNumbers(int count)
{
int[] nonRepeatingNumbers = new int[count];
int randomNumber;
int currentIndex = 0;
while (currentIndex < count)
{
randomNumber = Random.Range(1, 100); // 生成1到100之间的随机数,根据需求可修改范围
bool isDuplicate = false;
for (int i = 0; i < currentIndex; i++)
{
if (randomNumber == nonRepeatingNumbers[i])
{
isDuplicate = true;
break;
}
}
if (!isDuplicate)
{
nonRepeatingNumbers[currentIndex] = randomNumber;
currentIndex++;
}
}
return nonRepeatingNumbers;
}
}
```
通过以上代码,我们可以在Unity中生成指定数量的不重复随机数,并存储在一个整型数组中。修改代码中的`numberOfRandomNumbers`变量,可以控制生成的随机数数量。根据需要,也可调整生成随机数的范围。
unity产生不重复随机数
在Unity中,可以使用Random.Range(min, max)函数生成随机数。如果要生成不重复的随机数,可以利用List数据结构来存储所有可能的值,然后随机从中取出一个值并从列表中移除,以保证不会重复。
以下是一个示例代码:
```
public class RandomGenerator : MonoBehaviour
{
private List<int> numbers = new List<int>(); // 存储所有可能的值
private int currentNumber; // 当前随机数
void Start()
{
// 添加所有可能的值到列表中
for (int i = 0; i < 10; i++)
{
numbers.Add(i);
}
// 初始化当前随机数
currentNumber = GetRandomNumber();
}
// 生成随机数并从列表中移除
private int GetRandomNumber()
{
int index = Random.Range(0, numbers.Count); // 随机取出一个索引
int number = numbers[index]; // 取出对应的值
numbers.RemoveAt(index); // 从列表中移除该值
return number;
}
// 示例用法:每次按下空格键生成一个新的随机数
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
currentNumber = GetRandomNumber();
Debug.Log("Current number: " + currentNumber);
}
}
}
```
在上述示例中,每次按下空格键会生成一个新的随机数,并且保证不会与之前生成的随机数重复。
阅读全文