Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Все Гайды Мой Кабинет

Преследование вражеского персонажа за игроком

В данной статье мы реализуем искусственный интеллект вражеского персонажа, который будет постоянно преследовать нашего игрока. Первым делом, необходимо создать 2 игровых объекта, с названиями, например Player - наш игрок, и Enemy - вражеский персонаж.

Далее необходимо добавить объекту Player тег Player.

Далее создаём файл типа C# скрипт, и дадим ему название, например, Follow. Пропишем в данном скрипте следующий C# код:

using UnityEngine;

public class Follow : MonoBehaviour
{
    public float speed = 5f;
    public Transform player;

    void Awake()
    {
        player = GameObject.FindGameObjectWithTag(“Player”).GetComponent<Transform>();
    }

    
    void FixedUpdate()
    {
        transform.position = Vector2.moveTowards(transform.position, player.position, speed);
    }
}

Весь данный скрипт присваиваем к объекту вражеского персонажа, ведь именно он должен перемещаться к нашему Игроку. Поздравляем, искусственный интеллект персонажа, который перемещается к вашему объекту создан!

Давайте теперь разберём данный c# код поподробне:

public float speed = 5f;
public Transform player; 

Здесь мы объявляем две переменные. Переменная speed необходима для указания скорости, с которой вражеский персонаж будет двигаться к Игроку. Переменная player будет хранить информацию о местоположении нашего Игрока.

Далее в методе Awake() мы прописываем следующий код:

player = GameObject.FindGameObjectWithTag(“Player”).GetComponent<Transform>();

Здесь мы находим объект нашего игрока по тегу Player, и заносим данные о его местоположении в переменную player. Благодаря этой строчке кода, вражеский персонаж теперь будет понимать, где находится игрок.

Ну и в завершении, в методе FixedUpdate() мы с помощью класса Vector2 обновляем местоположение нашего врага, который с помощью метода moveTowards будет постепенно смещаться к местоположению нашего Игрока со скоростью speed:

transform.position = Vector2.moveTowards(transform.position, player.position, speed); 

Если данный гайд был полезен для Вас, не забывайте оставлять свои лайки.

Вы можете отблагодарить автора донатом. ₽ Спасибо

Комментарии

5
kessyamessya 1 год назад

Извините а такой вопрос выдает в коде ошибку "Vektor2" не содержит определение для "moveTovards" (я тоже новичок в юнити) Как решить эту ошибку???

Name_1009 1 год назад

kessyamessya, чел Vector2. Ты опечатался

Name_1538 5 месяцев назад

kessyamessya, там опечатка в коде(или просто какое-то новое обновление, где всё переделали) moveTovards надо писать с заглавной буквы.
Та строчка должна выглядеть так:


transform.position = Vector2.MoveTowards(transform.position, player.transform.position, speed);

Naushnik2024 6 месяцев назад

Здравствуйте, добавил данный скрипт к врагу но у меня еще скрипт есть, почему при старте враг примагничивается к игроку?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class WalkingMonster : Entity
{


private Vector3 dir;
private SpriteRenderer sprite;

private void Awake()
{
sprite = GetComponentInChildren<SpriteRenderer>();
}
private void Start()
{
dir = transform.right;
lives = 5;
}

private void Update()
{
Move();
}

private void Move()
{
Collider2D[] colliders = Physics2D.OverlapCircleAll(transform.position + transform.up * 0.1f + transform.right * dir.x * 0.7f, 0.1f);

if (colliders.Length > 0) dir *= -1f;
transform.position = Vector3.MoveTowards(transform.position, transform.position + dir, Time.deltaTime);
sprite.flipX = dir.x > 0.0f;

}


private void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject == Player.Instance.gameObject)
{
Player.Instance.GetDamage();
}
if (lives < 1)
Die();
}
}

vlaos 2 месяца назад

Помогите пожалуйста, сделал все также весь код скопировал и пишет данное сообщение
Assets\Scripts\Follow.cs(12,51): error CS1056: Unexpected character '“'
Что делать игрок и враг называются точно также

Гости не могут оставлять комментарии. Войдите на Сайт или Зарегистрируйтесь