angle | @param angle Новый угол для вращения твердого тела. |
Вращение твердого дела на угол
.
Вращение твердого тела на точно определенный угол
рассчитывается через соответствующую угловую скорость, требуемую для поворота твердого тела на этот угол на протяжении следующего обновления физики. На протяжении движения угловое торможение не действует на тело. Поэтому тело может быстро повернутся на соответствующий угол
.
Т.к. эта особенности позволяет твердому телу быстро повернутся в указанный угол, все коллайдеры, прикрепленные к твердому телу будут реагировать как обычно, т.е. будут обеспечивать коллизии, будут оказывать влияние на движение твердого тела и вероятно на его остановку по достижению указанного угла
на протяжении следующего обновления физики. Если твердое тело кинематическое, тогда все коллизии не будут оказывать воздействие на само твердое тело, а только на другие динамические коллайдеры.
2D твердые тела имеют фиксированное ограничение на скорость поворота, поэтому попытки поворота на большие углы за короткие временные промежутки могут привести к тому, что твердое тело не достигнет указанного угла за следующее физическое обновление. Рекомендуется использовать только для поворота на относительно небольшие расстояния.
Важно понимать, что фактическое изменение физики будет только на протяжении следующего физического обновления, поэтому вызов этого метода напрямую, без ожидания следующего обновления приведет к тому что будет использован последний вызов. Поэтому рекомендуется делать вызов в функции 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); } }