You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity中如何避免Random.Range生成重复的Z轴坐标值?

解决Unity生成物体时Z轴坐标重复的问题

要解决Z轴坐标重复的问题,核心思路是先预先生成所有符合要求的Z值候选列表,再从中随机选取不重复的数值。你的Z值范围是20到100、步长10,可选的数值有20、30、40、50、60、70、80、90、100,共9个,完全足够选出6个不重复的。

修改后的代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SpawnerScript : MonoBehaviour
{
    public GameObject GateSingle;
    public GameObject GateDouble;
    public static SpawnerScript instance;

    float minZValue = 20;
    float maxZValue = 100;
    float StepZSize = 10;

    void Awake()
    {
        instance = this;
    }

    public void Spawn()
    {
        // 生成所有符合要求的Z值列表
        List<float> availableZValues = new List<float>();
        for (float z = minZValue; z <= maxZValue; z += StepZSize)
        {
            availableZValues.Add(z);
        }

        // 循环生成6个物体
        for (int i = 0; i < 6; i++)
        {
            // 从可用列表中随机选一个索引
            int randomIndex = Random.Range(0, availableZValues.Count);
            float selectedZ = availableZValues[randomIndex];
            // 选中后从列表移除,避免重复
            availableZValues.RemoveAt(randomIndex);

            // 简化X轴取值逻辑
            float randomXValue = Random.Range(0, 2) == 0 ? -2.2f : 2.2f;

            Instantiate(GateSingle, new Vector3(randomXValue, 0, selectedZ), Quaternion.identity);
        }
    }
}

关键修改点说明:

  • 预生成Z值列表:通过循环把20到100步长10的所有Z值存入列表,确保所有可选值都在范围内且符合步长要求。
  • 随机抽取并移除:每次从列表中随机选一个元素,然后立刻从列表中删除该元素,这样后续就不会再选中重复的Z值。
  • 简化X轴逻辑:用三元运算符替代冗余的if-else判断,代码更简洁。

这样修改后,生成的6个物体的Z轴坐标就不会出现重复的情况了。

内容的提问来源于stack exchange,提问作者Leon Ristic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 00:24:25