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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 02:55:10