В чём различие?

На ютубе во многих образовательных видеоуроках 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);
    }
}
→ Ссылка