
以下是一个简单的随机方法可以从选定的int范围中不重复地随机选取数值。如果超出数值容量则会重置并重新开始选取。using UnityEngine; using System.Collections.Generic; public class RandomSelector { private readonly int _min; private readonly int _max; private readonly Listint _availableNumbers; public RandomSelector(int min, int max) { if (min max) { Debug.LogError(min must be less than max); return; } _min min; _max max; _availableNumbers new Listint(); // 初始化可用数值列表 Reset(); } // 获取下一个不重复的随机数 public int GetNext() { if (_availableNumbers.Count 0) { // 如果所有数值都已用完则重置 Reset(); } // 随机选择一个索引 int index UnityEngine.Random.Range(0, _availableNumbers.Count); int selectedNumber _availableNumbers[index]; _availableNumbers.RemoveAt(index); // 移除已选数值 return selectedNumber; } // 重置可用数值列表 private void Reset() { _availableNumbers.Clear(); for (int i _min; i _max; i) { _availableNumbers.Add(i); } } }1. 类定义与构造函数public class RandomSelector { private readonly int _min; private readonly int _max; private readonly Listint _availableNumbers; public RandomSelector(int min, int max) { if (min max) { Debug.LogError(min must be less than max); return; } _min min; _max max; _availableNumbers new Listint(); // 初始化可用数值列表 Reset(); } }功能定义一个名为RandomSelector的类用于从指定范围内不重复地随机选取数值。构造函数接受两个参数min最小值和max最大值。逻辑参数校验检查min是否小于max否则输出错误信息并终止初始化。初始化字段_min和_max存储用户指定的范围。_availableNumbers用于保存当前可用的数值列表。调用Reset方法初始化_availableNumbers列表填充从min到max的所有整数。2. 核心方法GetNextpublic int GetNext() { if (_availableNumbers.Count 0) { // 如果所有数值都已用完则重置 Reset(); } // 随机选择一个索引 int index UnityEngine.Random.Range(0, _availableNumbers.Count); int selectedNumber _availableNumbers[index]; _availableNumbers.RemoveAt(index); // 移除已选数值 return selectedNumber; }功能从可用数值列表中随机选取一个数并确保不重复选取。逻辑检查列表是否为空如果_availableNumbers为空即所有数值已被用完调用Reset方法重新填充列表。随机选择数值使用UnityEngine.Random.Range生成一个随机索引范围是[0, _availableNumbers.Count)。根据索引从列表中取出对应的数值。移除已选数值将选中的数值从列表中移除确保下次不会重复选取。返回结果返回选中的数值。3. 辅助方法Resetprivate void Reset() { _availableNumbers.Clear(); for (int i _min; i _max; i) { _availableNumbers.Add(i); } }功能重置可用数值列表重新填充从min到max的所有整数。逻辑清空列表调用Clear方法清空_availableNumbers。重新填充列表使用循环将min到max的所有整数依次添加到列表中。4. 使用示例private RandomSelector _selector; private void Start() { // 创建一个范围为1到10的随机选择器 _selector new RandomSelector(1, 10); // 获取10个不重复的随机数 for (int i 0; i 10; i) { Debug.Log(_selector.GetNext()); } // 继续获取时会重置并重新开始 Debug.Log(Resetting...); for (int i 0; i 5; i) { Debug.Log(_selector.GetNext()); } }功能演示如何使用RandomSelector类。逻辑初始化创建一个范围为1到10的RandomSelector实例。首次选取调用GetNext方法10次输出不重复的随机数。重置后选取当所有数值用完时GetNext会自动调用Reset方法。继续选取5个数值此时会从重置后的列表中重新开始。5. 关键点总结不重复随机通过维护一个可用数值列表并在每次选取后移除已选数值确保不重复。自动重置当列表为空时自动调用Reset方法重新填充。Unity适配使用UnityEngine.Random替代System.Random更适合Unity开发环境。适用场景需要从固定范围内不重复地随机选取数值的场景例如抽奖系统。随机生成关卡或敌人。洗牌算法如卡牌游戏。