Метод Update
О чем ты узнаешь из видео:
✅Как делать написание метода
✅Введение в метод
✅Немного практики
✅Замена константы на переменную
Этот урок идет в тесной связке с предыдущим, поэтому если пропустили его - сначала восполните эти ценнейшие знания, и сюда!
Как делать написание метода
Для того чтобы сделать постоянное изменение позиции объекта надо реализовать метод, который будет вызываться много раз самим движком. Таких методов много в UNITY, начнем с Update ().
Пишем запись, как в методе START: private void Update ()
Все, метод UPDATE готов.
Введение в метод
Познакомимся с UPDATE поближе. В любой игре есть параметр FPS (Frames per second, Кадры в секунду), и вот рассматриваемый нами сегодня метод привязан к нему. Он, UPDATE, вызывается при обновлении нового кадра, из-за чего вытекает проблемка: он непостоянен (как ̶ж̶е̶н̶щ̶и̶н̶а̶ и FPS), он каждую секунду может вызываться разное количество раз.
Предположим мы уже написали код в UPDATE который перемещает объект с постоянной скоростью вверх. Ну например на 5 единиц. Но 5 единиц в час? секунду? Непонятно. Из-за непостоянства метода UPDATE мы просто не можем задать точную скорость. И в 1 секунду у нас может быть 300 FPS, а значит при скорости в 5 единиц, она будет 1500 единиц; а потом может быть 1 FPS, иии объект сдвинется всего на 5 единиц.
Лайфхак: скорость (speed) мы умножаем на Time.deltaTime. Так, абстрактная скорость 5 из нашего примера приобретёт конкретику: 5 единиц в секунду.
Немного практики
Итак, попробуем эти знания в деле?
Известно, что deltaTime это интервал времени между кадрами. Предположим, что в текущий момент времени мы имеем FPS = 100, скорость = 5, а значит скорость в конкретный момент: 5х100=500 ед/сек. Мы знаем, что 100 кадров вызовутся за 1 секунду, т.е. промежуток между кадрами = 1/100. Теперь 1/100 (deltaTime)х5х100 = 5 ед/сек. Да, FPS будет каждую секунду разный, и deltaTime тоже, но принцип прежний. Если не догнали - пробуйте еще и еще, и скоро принцип метода поддастся вам.
Хватит практики, опять теория:
Чтобы постоянно менять позицию объекта надо в методе UPDATE обратится к объекту Transform. Узнаем его позицию:
private void update ()
transform.position Потом, после знака "=" пишем вектор (new Vector3). Давайте сделаем чтобы объект двигался только по оси Y. Для этого пишем ноль по оси X, а по оси Y значение должно постоянно увеличиваться. Для этого получим текущее значение по оси Y (transform.position.y) и увеличим ее на любую константу (постоянная величина). Допустим опять 5. Затем, как вы помните, умножаем на Time.deltaTime.
Теперь жмем горячие клавиши Ctr+Shift+S, открываем UNITY, запускаем игровой режим, и видим как объект двигается вверх! Ура.
Замена константы на переменную
Теперь вынесем скорость в публичное поле класса.
Зачем?
Чтобы было удобней ее изменять в самом спекторе.
Как?
В вверху класса пишем код:
public float speed = 5;
А затем ниже вместо 5 ставим новое поле speed.
Готово.
Все понятно? Пишите комментарии, всем ответим.