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

Unity螺旋圆形楼梯实现求助:按空格键生成台阶出现堆叠问题

螺旋楼梯堆叠问题修复方案

核心问题分析

  1. 台阶未设置旋转:当前代码仅给台阶分配了螺旋轨迹上的位置,但台阶朝向始终固定,导致不同角度的台阶在平面上重叠堆叠。
  2. 高度增量过小:HeightIncrement=0.0035f的数值太小,每旋转10度仅上升0.035单位,垂直方向间距不足以区分台阶,进一步加剧堆叠问题。

修复步骤

  • 添加台阶旋转逻辑
    让台阶绕Y轴旋转与当前角度匹配的数值,确保台阶沿着螺旋方向摆放,避免平面重叠。在设置位置后添加旋转代码:

    stair.transform.rotation = Quaternion.Euler(0, CurrentAngle, 0);
    
  • 增大高度增量参数
    将HeightIncrement调整为合理数值(比如0.1f,可根据实际台阶尺寸微调),让每级台阶有明显的垂直高度差,解决垂直堆叠问题。

  • 可选:调整台阶位置偏移(若台阶轴心不在底部)
    如果台阶的轴心不在底部,可在Y轴位置上额外加上台阶自身的半高,避免台阶陷入下方台阶:

    float yPosition = CurrentAngle * HeightIncrement + stair.GetComponent<Collider>().bounds.extents.y;
    

修改后的完整代码

public PoolManager PoolManager;
public float Radius = 1f;
// 增大高度增量,根据实际台阶尺寸调整
public float HeightIncrement=0.1f;
public float CurrentAngle;

private void Update()
{
    if (Input.GetKeyDown(KeyCode.Space))
    {
        CreateStair();
    }
}

private void CreateStair()
{
    float radians = Mathf.Deg2Rad * CurrentAngle;

    float xPosition = Radius * Mathf.Cos(radians);
    float yPosition = CurrentAngle * HeightIncrement;
    float zPosition = Radius * Mathf.Sin(radians);

    GameObject stair = PoolManager.GetPooledObject(0);
    if (stair != null)
    {
        stair.transform.position = new Vector3(xPosition, yPosition, zPosition);
        // 添加旋转,让台阶沿螺旋方向摆放
        stair.transform.rotation = Quaternion.Euler(0, CurrentAngle, 0);
        CurrentAngle += 10.0f;
    }
}

内容的提问来源于stack exchange,提问作者Furkan Lütfü Batakçı

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 15:16:00