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

Unity中如何生成间距至少2米的10个随机障碍物?

如何确保随机生成的障碍物间距至少2米?

你当前的代码仅随机生成位置并实例化障碍物,未做间距校验。要满足所有障碍物间距≥2米的要求,核心思路是记录已生成的障碍物位置,每次生成新位置时校验其与所有已有位置的距离,具体修改如下:

public GameObject obstacle;
// 存储已生成的障碍物位置,用于间距校验
private List<Vector3> spawnedPositions = new List<Vector3>();
// 需要生成的障碍物总数
public int totalObstacles = 10;
// 最小间距要求(可根据需求调整)
public float minDistance = 2f;

void Start()
{
    while (spawnedPositions.Count < totalObstacles)
    {
        // 生成随机位置(改用float类型,避免整数位置限制过死)
        float xPos = Random.Range(-6f, 7f); 
        float zPos = Random.Range(85f, 245f);
        Vector3 newPos = new Vector3(xPos, 1f, zPos);

        // 校验新位置与所有已生成位置的间距
        bool isPositionValid = true;
        foreach (Vector3 pos in spawnedPositions)
        {
            if (Vector3.Distance(newPos, pos) < minDistance)
            {
                isPositionValid = false;
                break;
            }
        }

        // 位置合法则实例化障碍物并记录位置
        if (isPositionValid)
        {
            Instantiate(obstacle, newPos, Quaternion.identity);
            spawnedPositions.Add(newPos);
        }
    }
}

关键改动说明:

  • 新增spawnedPositions列表,保存所有合规的障碍物位置,作为后续校验的依据
  • 新增minDistance变量,统一管理最小间距,后续调整无需修改逻辑代码
  • 生成新位置后,通过Vector3.Distance计算与所有已有位置的距离,只要有一个不满足要求就丢弃当前位置,重新生成
  • 仅当位置通过校验时,才实例化障碍物并将位置加入列表,直到生成足够数量的合规障碍物

额外优化提示:

  • 可将x/z轴的生成范围设为可配置变量,避免硬编码,方便调整区域大小
  • 若担心极端场景(如区域过小导致无法生成足够数量的障碍物),可添加最大尝试次数限制,超过次数后停止生成并打印提示

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 23:54:41