Version: 2021.3
public void MoveRotation (float angle);

参数

angle 刚体对象的新旋转角度。

描述

将刚体旋转到 /angle/(以度为单位)。

通过计算在下一次物理更新期间将刚体旋转到指定 angle 所需的适当角速度,将刚体旋转到该角度。在移动过程中,角阻力不会影响刚体。这使得对象能够快速从现有角度移动到指定的 /angle/。

因为此功能允许刚体快速旋转到指定的 /angle/,所以附加到刚体的任何碰撞体都将按预期作出反应,也就是说,它们将产生碰撞和/或触发。这也意味着如果碰撞体产生碰撞,则将影响到刚体的运动,并可能阻止刚体在下一次物理更新期间到达指定的 /angle/。如果是运动刚体,则任何碰撞都不影响刚体本身,只会影响任何其他动态碰撞体。

Rigidbody2D 组件对其旋转速度有固定限制,因此在短时间内尝试旋转较大的角度会导致刚体无法在下一次物理更新期间到达指定 /angle/。建议仅将此函数用于角度相对较小的旋转运动。

请务必注意,实际的旋转更改只在下一次物理更新期间进行,因此重复调用该方法而不等待下一次物理更新将导致使用最后一次调用。因此,建议在 FixedUpdate 回调期间调用该函数。

// MoveRotation
// The sprite is set a rotation speed.

using UnityEngine; using System.Collections;

public class Example : MonoBehaviour { public Texture2D tex;

private Rigidbody2D rb2D; private Sprite mySprite; private SpriteRenderer sr; private float revSpeed = 50.0f;

void Awake() { sr = gameObject.AddComponent<SpriteRenderer>(); rb2D = gameObject.AddComponent<Rigidbody2D>(); }

void Start() { mySprite = Sprite.Create(tex, new Rect(0.0f, 0.0f, tex.width, tex.height), new Vector2(0.5f, 0.5f), 100.0f); transform.localScale = new Vector3(3.0f, 3.0f, 3.0f); rb2D.gravityScale = 0.0f; sr.sprite = mySprite; }

void FixedUpdate() { rb2D.MoveRotation(rb2D.rotation + revSpeed * Time.fixedDeltaTime); } }

public void MoveRotation (Quaternion rotation);

参数

rotation 用于仅提取 z 轴旋转的完整 3D 旋转。

描述

MoveRotation 的重载,允许以参数的形式进行完整 3D 旋转。

z 轴旋转提取自给定的 Quaternion /rotation/,用作要将 Rigidbody2D 移动到的目标角度。重要的是了解不使用完整 3D 旋转,因为 Rigidbody2D 只有一个围绕 z 轴的旋转自由度。