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
相关产品推荐
相关产品推荐

