Unity新手求助:如何避免同一预制体连续生成两次?
解决Unity随机预制体连续重复生成的问题
嘿,这个问题很好解决~你的核心问题是没有记录上一次生成的预制体编号,所以每次随机都有可能和上一次撞车,咱们只需要加个变量记住上一次选的是什么,然后生成新随机数的时候避开它就行了。
原代码的问题点
你当前的whatToSpawn = Random.Range(1, 4);是完全无限制的随机,没有任何排除逻辑,所以连续生成同一个预制体是概率范围内的正常情况,撞上并不奇怪。
修改后的完整代码
public class randomspawnscript : MonoBehaviour { public GameObject prefab1, prefab2, prefab3; public float spawnRate = 2f; float nextSpawn = 0f; int whatToSpawn; // 新增变量:记录上一次生成的预制体编号 private int lastSpawned = 0; void Update() { if (collisionbutton.end != true || gameoverscreenrestart.restartPressed==true || gameovermainmenu.menuPressed==true) { if (Time.time > nextSpawn) { // 用do-while循环,直到生成和上次不同的编号 do { whatToSpawn = Random.Range(1, 4); } while (whatToSpawn == lastSpawned); // 记录这次的编号,下次用它来排除重复 lastSpawned = whatToSpawn; Debug.Log(whatToSpawn); switch (whatToSpawn) { case 1: Instantiate(prefab1, transform.position, Quaternion.identity); break; case 2: Instantiate(prefab2, transform.position, Quaternion.identity); break; case 3: Instantiate(prefab3, transform.position, Quaternion.identity); break; } nextSpawn = Time.time + spawnRate; } } else { return; } } }
关键修改说明
- 新增
private int lastSpawned = 0;:初始化设为0是因为你的随机范围是1-3,第一次生成的编号肯定不会和0重复,完美避开第一次的重复问题。 - 用
do-while循环生成随机数:先生成一次编号,然后判断是否和上一次的编号重复,如果重复就重新生成,直到得到不一样的编号。这样就能绝对避免连续两次生成同一个预制体的情况。
小额外建议:如果以后预制体数量变多,建议把预制体放进一个List<GameObject>集合里,通过索引来随机选择,代码会更简洁易维护哦~
内容的提问来源于stack exchange,提问作者vaso
相关产品推荐
相关产品推荐

