Привет друзья, я начал изучать единство. Я собираюсь создать простой 3D-платформер, в котором игрок сможет собирать монеты и избегать врагов.
Смотрю видеокурс zenva, по которому можно супердешево получить Humble Bundle.
И я хочу поделиться с вами, что и как я строю. В настоящее время я создаю простой 3D-платформер. Мой код можно найти на GitHub.
Сегодня я собираюсь написать вражеский контроллер, который заставит врага двигаться вверх и вниз.
Начнем с создания скрипта C# в папке скриптов и назовем его EnemyContoler. Откройте Visual Studio и начните программировать.
У каждого врага есть стартовая позиция, и он будет двигаться вниз на 2 единицы от стартовой позиции. Определим несколько переменных:
скорость противника, дальность движения, исходное положение и направление вверх или вниз.
// enemy speed public float speed = 3;
// range of movement public float rangeY = 2;
// initial position Vector3 initialPos;
// direction int direction = 1;
Мы собираемся сохранить начальную позицию в методе Start с помощью Transform.position.
// Use this for initialization
void Start () {
//save initial position
initialPos = transform.position;
}
Само движение будет в методе Update.
Также противник будет двигаться вниз с ускорением. Чтобы определить, движется ли враг вниз или вверх, мы будем использовать тернарный оператор.
Если направление равно -1. Это означает, что ускорение противника при движении вниз будет равно 3, иначе ускорение будет равно 1.
float factor = direction == -1 ? 3f : 1;
Следующее движение Y будет рассчитано.
float movementY = factor * speed * Time.deltaTime * direction;
Кроме того, нам нужно сохранить новую позицию врага, чтобы определить, движется ли враг в заданном нами диапазоне.
float newY = transform.position.y + movementY;
Затем нам нужно проверить, не превышает ли новая позиция наш диапазон движения. Для проверки нам нужно взять текущую позицию и вычесть начальную позицию, а потому, что если враг движется вниз, это значение может быть отрицательным, нам нужно использовать абсолютное значение. Полученное значение нужно сравнить с переменной rangeY. И если это значение больше, то rangeY меняет направление. В противном случае продолжайте движение в том же направлении.
if(Mathf.Abs(newY - initialPos.y) > rangeY) { direction *= -1; }
else { transform.position += new Vector3(0, movementY, 0); }
Чтобы прикрепить текущий скрипт к врагу префабов, выберите врага в папке префабов. С правой стороны нажмите Добавить компонент, выберите скрипт и найдите скрипт вражескийКонтолер. После этого скрипт будет прикреплен к каждому врагу, созданному из сборного объекта.
Теперь мы можем нажать старт и проверить результат.
Проверьте мой блог — http://www.devopslife.xyz
Не забудьте проверить Humble Bundle, чтобы получить доступ к активам Unity и видеокурсу zenva всего за 15$