Привет друзья, я начал изучать единство. Я собираюсь создать простой 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$