You need to enable JavaScript to run this app. Unity中如何实现玩家沿Y轴固定抬升并生成阶梯堆叠立方体?
优惠活动
大模型
产品
解决方案
定价
更多

Unity中如何实现玩家沿Y轴固定抬升并生成阶梯堆叠立方体?

代码核心问题定位

抬升距离随机飘的原因

  • 抬升量计算逻辑写错了:现在代码里抬升值是Player.position.y * jump,相当于站得越高,单次抬的距离就越大,根本不是固定步进的效果
  • 给鼠标单次抬起的事件乱乘了Time.deltaTime:这个系数是给持续每帧运行的移动逻辑用的,单次触发的操作加这个,会因为不同设备帧率不一样,每次抬的距离忽长忽短

阶梯堆不对的原因

  • 生成立方体的时机错了:代码是先让玩家抬完升,再去读玩家的位置,这时候玩家已经移动到新高度了,读出来的坐标根本不是他原本站立的位置
  • 生成位置随便减了100的Y值,这个数值和立方体的实际尺寸、中心偏移根本对不上,生成出来的方块要么飘在半空,要么埋到地下,根本贴不上
正确实现思路
  • 鼠标左键一抬起,先把玩家当前站立的位置存下来,这个位置就是要放方块的精准点位,别等玩家跑了再读坐标
  • 抬升距离直接用固定常数值,比如每次抬1米,别拿玩家当前的高度做乘法计算
  • 单次抬升的操作别乘Time.deltaTime,把这个变量从单次触发的逻辑里删掉,抬升距离就会稳定
  • 存下来的原始坐标直接用来生成方块,不用随便减数值,只要方块和玩家立方体尺寸一致,自然能严丝合缝堆成阶梯
修正后的代码
// 可在Inspector面板调整固定抬升高度,默认1米
public float fixedStepHeight = 1f;

void Update()
{
    if (Input.GetMouseButtonUp(0))
    {
        // 先存玩家抬升前的位置,这个点就是要生成方块的位置
        Vector3 originalPlayerPos = Player.position;
        
        // 按固定高度抬升,单次操作不需要乘Time.deltaTime
        cc.Move(new Vector3(0, fixedStepHeight, 0));
        
        // 在存好的原始位置生成方块
        Instantiate(Cubes, originalPlayerPos, Quaternion.identity);
    }
}

实操提醒:如果堆出来的方块有缝隙,检查下玩家控制的碰撞体中心和立方体预制体的Pivot点是不是在同一个中心位置,Scale参数是不是完全一致,不然就算坐标对了也会错位。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.03 13:15:05