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
相关产品推荐
相关产品推荐

