You need to enable JavaScript to run this app. Unity3D如何冻结平台y、z轴旋转,仅保留x轴可旋转?
优惠活动
大模型
产品
解决方案
定价
更多

Unity3D如何冻结平台y、z轴旋转,仅保留x轴可旋转?

可行方案

方案1:使用Unity Rigidbody原生约束(推荐)

这是最高效、最不容易出物理bug的实现方式,不需要复杂代码:

  • 给你的平台GameObject添加Rigidbody组件
  • 取消勾选组件上的Use Gravity选项
  • 展开组件下的Constraints折叠菜单:
    • 位置约束:勾选Freeze Position下的X、Y、Z(如果只需要锁Y轴就只勾选Y即可,可按需求调整)
    • 旋转约束:勾选Freeze Rotation下的Y、Z,不要勾选X
      物理引擎会自动限制平台的旋转仅能沿X轴生效,不会出现偏移,也不需要你在Update里手动写位置冻结逻辑,性能更优。

方案2:代码手动锁定旋转

你之前的Quaternion代码无效的核心原因是:你只是声明了一个Quaternion类型的rotation变量,没有将它赋值给transform.rotation,自然不会生效。
你可以直接修改你现有的脚本,补充旋转锁定逻辑,同时优化冗余的位置锁定代码,修改后完整代码如下:

using UnityEngine;

public class DeterminantOfPlatformEquilibrium : MonoBehaviour
{
    Vector3 fixedPos;
    float currentXRot;

    void Start()
    {
        // 记录初始固定位置
        fixedPos = transform.position;
        // 记录初始X轴旋转角度
        currentXRot = transform.eulerAngles.x;
    }

    void Update()
    {
        // 锁定位置,不需要冗余的加0操作
        transform.position = fixedPos;
        
        // 只保留X轴的旋转值,Y、Z强制清零
        currentXRot = transform.eulerAngles.x;
        transform.rotation = Quaternion.Euler(currentXRot, 0f, 0f);
    }
}

如果你需要固定X轴旋转角度,直接把currentXRot替换成你要的固定值即可,比如你之前写的23f。

内容的提问来源于stack exchange,提问作者Arina Aznauryan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 19:51:03