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

Unity3D 高速生成移动块时相邻对象间隔过大问题咨询

问题根因

你当前的实现存在两个核心问题:

  • 生成触发逻辑在Update中执行,帧间隔不固定,速度越快单帧位移量越大,触发生成时上一个方块已经超出判定阈值一段距离,直接导致间隔产生
  • 新生成的方块没有做位置校准,默认使用生成点坐标,没有和上一个方块的尾部对齐

修正方案

核心逻辑是生成新方块时,直接以上一个方块的当前位置做偏移校准,抵消帧波动带来的超出量,修正后的代码如下:

// 提前赋值为你的方块预设,提前绑好Rigidbody组件
public Rigidbody spawnerPrefab;
// 方块X轴向的尺寸
public float size;
// 方块移动速度
public float moveSpeed = 15f;
// 生成起始X坐标
public float startcoordinateX;

// 缓存上一个生成的方块刚体
private Rigidbody lastSpawned;

void Update()
{
    // 首次生成逻辑
    if (lastSpawned == null)
    {
        lastSpawned = Instantiate(spawnerPrefab, new Vector3(startcoordinateX, 0, 0), Quaternion.identity);
        lastSpawned.velocity = new Vector3(moveSpeed, 0, 0);
        return;
    }
    
    // 生成判定
    if (lastSpawned.transform.position.x - startcoordinateX >= size)
    {
        // 新方块X坐标直接对齐上一个方块的左边界,保证无缝
        Vector3 newSpawnPos = new Vector3(lastSpawned.transform.position.x - size, 0, 0);
        Rigidbody newSpawn = Instantiate(spawnerPrefab, newSpawnPos, Quaternion.identity);
        newSpawn.velocity = new Vector3(moveSpeed, 0, 0);
        lastSpawned = newSpawn;
    }
}

可选优化点

  • 若追求更高判定稳定性,可将生成判定逻辑移到FixedUpdate中执行,FixedUpdate使用固定时间步,不受帧率波动影响,更适配物理相关的运算逻辑
  • 若方块移动不需要物理碰撞模拟,可直接用Transform.Translate配合Time.deltaTime控制移动,将移动逻辑和生成逻辑统一管理,也可以完全消除间隔问题
  • 无限生成的场景下建议搭配对象池复用方块,避免频繁Instantiate/Destroy带来的性能开销

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 22:15:02