如何以编程方式冻结刚体的旋转?

How do I freeze rotation of a Rigidbody programatically?

我正在创建一个 2D 平台游戏,我已经编写了成功向前和向后移动精灵的脚本。但是,我非常 Unity 和 C# 新手,所以我不知道如何冻结精灵的旋转。

我尝试以编程方式进行(因为使用重力选项没有出现在检查器中),就像这样-

void Update () {

    anim.SetBool("Grounded", grounded);
    anim.SetFloat("Speed", Mathf.Abs(Input.GetAxis("Horizontal")));

    rb2d.freezeRotation.freezeRotation = true;

}

但显然不行。 如何使用 C# 正确地冻结精灵的旋转?我应该把这段代码放在哪里?

提前致谢- 乔治 :)

你可以做些什么来限制对象在一个轴上的旋转:

  • 创建一个变量float freezeRotationX = 5.0f; //5.0 is just an example

  • 然后写这个transfrom.rotation = Quaternion.Euler(freezeRotationX, transfrom.rotation.y, transfrom.rotation.z);这一行应该在更新方法中。

这将固定 X 轴上的旋转,并保留其他轴的当前值。 当然你可以为每个轴创建一个变量。

希望对你有所帮助。

这很简单,你真的不必使用 C#,你可以将 rigidbody2D 的 angular velocity 设置得非常高,但如果这不起作用,请尝试不断将变换旋转设置为 0,(代码在更新函数中看起来像这样,

getcomponent<yourgameobject>().transform.rotation.z = 0
getcomponent<yourgameobject>().transform.rotation.x = 0
getcomponent<yourgameobject>().transform.rotation.y = 0

语法可能不正确,并且可能会减慢游戏速度,但如果您一开始就团结一致,这是一个简单的解决方案。