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

时间:2016-06-24 17:07:03

标签: c# graphics 2d unity5 rigid-bodies

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

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

void Update () {

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

    rb2d.freezeRotation.freezeRotation = true;

}

但它显然不起作用。 如何使用c#正确冻结精灵的旋转?我在哪里放这个代码?

提前致谢 - 乔治:)

2 个答案:

答案 0 :(得分:0)

您可以做的是约束对象一个轴上的旋转:

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

  • 并写下此transfrom.rotation = Quaternion.Euler(freezeRotationX, transfrom.rotation.y, transfrom.rotation.z);此行应位于更新方法中。

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

希望对你有所帮助。

答案 1 :(得分:0)

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

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

语法可能不正确,它可能会减慢游戏速度,但如果你的开始统一则是一个简单的解决方案。