В чём различие?
На ютубе во многих образовательных видеоуроках rb.velocity вставляют то просто в Start, то в Update. В чём различие? Если нужно только один раз задать объекту rb.velocity, чтобы объект просто вправо двигался, можно же просто первый код использовать? Update же только будет нагружать игру. Или Update нужен с rb.velocity?
1.
private void Start()
{
rb = gameObject.GetComponent<Rigidbody2D>();
rb.velocity = new Vector2(1, 0);
}
private void Start()
{
rb = gameObject.GetComponent<Rigidbody2D>();
}
private void Update() or private void FixedUpdate()
{
rb.velocity = new Vector2(1, 0);
}
Ответы (1 шт):
Автор решения: Yaroslav
→ Ссылка
Разница огромная. Если ты видишь GetComponent в Update, закрывай это видео, человек не умеет код писать. Всяких гошь дударей в интернетах как грязи.
А вообще код должен выглядеть так:
// обязует иметь компонент тела, делая ошибку отсутствия не возможной
[RequireComponent(typeof(Rigidbody2D))]
public class Foo : MonoBehaviour
{
// public полей не должно существовать
[SerializeField] private float _speed = 1;
// то с чем постоянно работают кешируют в поля класса, что-бы не тратить ресурсы
private Rigidbody2D _body;
// движение и инпуты это разные ответственности, поэтому их должен посылать
// кто-то снаружи, для этого используются свойства, а не публичные поля
// то есть персонаж и враг могут двигаться одним и тем-же скриптом, а команды даются разными
public float HorizontalInput { get; set; }
public float Speed => _speed;
private void Start ()
{
_body = GetComponent<Rigidbody2D>();
}
// с тем что касается физики тел, работают в FixedUpdate
private void FixedUpdate ()
{
_body.velocity = new Vector2(HorizontalInput*_speed, 0);
}
}