Unity螺旋圆形楼梯实现求助:按空格键生成台阶出现堆叠问题
螺旋楼梯堆叠问题修复方案
核心问题分析
- 台阶未设置旋转:当前代码仅给台阶分配了螺旋轨迹上的位置,但台阶朝向始终固定,导致不同角度的台阶在平面上重叠堆叠。
- 高度增量过小:
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çı
相关产品推荐
相关产品推荐

