?
Пример такой:
Quaternion myRotation, rotation;
public Vector3 from, to;
void Awake()
{
myRotation = this.transform.rotation;
}
void FixedUpdate()
{
rotation = Quaternion.FromToRotation(from, to);
myRotation *= rotation;
}
Не работает, объект не вращается, работает только если не кэшировать, вместо myRotation использовать transform.rotation
Ты можешь закешировать rotation, поместив его значение в поле своего класса, НО ты закешируешь его значение и изменять будешь просто это значение, transform на это никак реагировать не будет и не должен. Закешировав transform, ты сохраняешь ссылку на него, поэтому изменение rotation у transform будет вращать игровой объект. Почитай про значимые и ссылочные типы в C#. И да, кеширование transform имеет смысл при частом обращении к нему, например в Update, если ты обращаешься к нему разово, условно только на старте, это делать незачем
Ого, спасибо за развёрнутый ответ. Value и reference, types. Хорошо, посмотрю в этом направлении тоже.
Зачем вообще трансформ кешировать?
Недавно даже кто-то на ютубе мерил, правда неправильно :) https://t.me/dyadichenkoga/106
Может, это чужой трансформ, дочернего объекта, например.
А чем отличается void update от void fixedupdate?
Всем советую посомтреть, чтобы лучше понимать физику в Unity https://www.youtube.com/playlist?list=PL8C4SmiVZY0wUFQrUXKQCS3BhRk2MIs8v
Посмотрю, спасибо.
Fixed фиксированный интервал между исполнениями, а update зависит от мощности машины на которой update вызывается. Может быстрее если лаптоп подключён к питанию и медленнее если лаптоп на батарейках
Обсуждают сегодня