В отличие от того, чтобы наши враги случайным образом бросали пули прямо вниз от их позиции, я хочу сделать что-то более интересное и динамичное. Я хочу, чтобы игрок действительно чувствовал, что в него стреляют, и ему НУЖНО двигаться, чтобы уклоняться от входящих снарядов. Таким образом, даже при большом количестве врагов у вас всегда будет шанс выжить, если вы достаточно опытны, чтобы увернуться от всех их выстрелов, а не просто повезет, если вы не наткнетесь на неизбежную волну пуль.

Таким образом, поведение, которое я хочу, чтобы наши враги прицеливались и стреляли прямо в позицию игрока, независимо от того, где они в настоящее время расположены, и где в настоящее время находится игрок. К счастью, мы уже написали половину этого, когда создавали поведение игрока при стрельбе!

Я взял у игрока заявление о стрельбе и просто убрал то, что нам не нужно.

Очевидно, что нам не нужен ввод данных от игрока, так как это должно происходить автоматически, и нам фактически не понадобится отдельный скрипт Pistol для связи со скриптом PistolRound, поэтому мы убрали посредника и просто создали экземпляр вражескогоPistolRound непосредственно из скрипта Enemy. !

Вот и все на стороне скрипта Enemy, но теперь не такая простая часть начинается со скрипта EnemyPistolRound. Мы должны выяснить, как сделать так, чтобы наши выстрелы направлялись прямо в игрока.

Сначала нам нужно получить позицию игрока. Я сделал это, используя FindObjectWithTag("Enemy Target") и получив его transform.position.

Затем я создал отдельный GameObject, дочерний для Cubert, и пометил его как Enemy Target. Это будет наше значение Vector3, к которому мы хотим, чтобы наша пуля направлялась.

Я использовал Vector3.MoveTowards, чтобы использовать его текущую позицию, и позицию игрока, чтобы начать сокращать расстояние между двумя позициями в каждом кадре.

И с этой системой у нас действительно динамичное поведение стрельбы по врагу, которое меняется в зависимости от положения игрока!

Я помещаю целевую позицию немного позади Куберта по двум причинам, причина первая заключается в том, что как только пуля достигает этого преобразования, она остается на месте до тех пор, пока не сработает таймер, чтобы уничтожить ее. Поэтому я не могу сделать так, чтобы целевая позиция была прямо на Куберте, потому что тогда игрок увидит тонну пуль, застрявших во времени и месте, вместо того, чтобы лететь мимо Куберта, как они должны были бы. Поэтому я поместил игровой объект за игроком так, чтобы он не попадал в поле зрения камеры, чтобы решить эту проблему.

Вторая причина на самом деле для гладкой и простой функции игрового дизайна. Расположение цели немного позади игрока создаст динамическую разницу углов по отношению к положению противника. Эта разница в ракурсе становится все заметнее, чем дальше игрок и противник. Таким образом, это создает для противника способ быть менее точным, чем дальше он находится от игрока, поскольку Куберт технически не будет находиться перед целевой позицией в зависимости от угла врага. Таким образом, получается аккуратный дизайнерский трюк, когда самые опасные враги — это враги, находящиеся непосредственно перед Кубертом, поскольку Куберт будет более непосредственно находиться на пути к целевой позиции.

И с этой системой наш маленький прототип начинает выглядеть как настоящая игра!

В следующем девблоге мы собираемся разработать систему возрождения для наших врагов, используя корутины!