Unity中如何阻止滚动立方体Y轴位置偏移且不冻结Y轴?
解决立方体旋转时Y轴位置偏移导致射线检测失效的问题
我开发的Unity游戏玩法是旋转立方体沿平台表面移动,从粉色起始平台到绿色终点平台通关,通过射线检测判断立方体所在平台来触发关卡加载和终点动画。但目前遇到问题:立方体旋转到相邻平台时Y轴位置会偏移(初始Y=0,旋转后时正时负),视觉上虽处于平台高度,但Y值变化导致长度0.5的射线无法触达平台,手动将Y改回0后射线检测恢复正常。要求不能冻结Y轴(添加刚体会破坏现有移动逻辑),以下是可行解决方案:
强制重置Y轴位置
在立方体完成旋转的逻辑执行后,直接固定Y轴坐标。如果平台高度固定为0,代码如下:// cubeTransform为你的立方体Transform引用 cubeTransform.position = new Vector3(cubeTransform.position.x, 0f, cubeTransform.position.z);若平台高度不固定,可在游戏开始时记录起始平台的Y高度,之后每次旋转后都将立方体Y值设为该高度:
private float targetY; void Start() { // startPlatform为起始平台的Transform引用 targetY = startPlatform.position.y; } // 在旋转完成后调用此方法 void ResetYPosition() { cubeTransform.position = new Vector3(cubeTransform.position.x, targetY, cubeTransform.position.z); }优化旋转逻辑避免Y轴位移
如果当前是通过Translate结合Rotate实现滚动,可能是坐标计算误差导致Y轴偏移。改用Transform.RotateAround方法,以立方体与平台的接触点为旋转中心进行旋转,确保底部始终贴合平台:// 示例:绕X轴旋转90度,hit为射线检测到的平台接触点信息 cubeTransform.RotateAround(hit.point, Vector3.right, 90f);调整射线检测参数适配偏移
若不想修改旋转和位置逻辑,可适当增大射线长度(比如从0.5调整为0.6),或让射线从立方体底部中心向下发射,覆盖Y轴的小偏移范围:// 从立方体底部中心发射射线 Vector3 rayOrigin = cubeTransform.position + Vector3.down * cubeTransform.localScale.y / 2; Ray ray = new Ray(rayOrigin, Vector3.down); if (Physics.Raycast(ray, out RaycastHit hit, 0.6f)) { // 检测到平台后的逻辑处理 }
内容的提问来源于stack exchange,提问作者MIM
相关产品推荐
相关产品推荐

