Преследование врага

221
24 августа 2017, 18:22

В моих планах - кликнуть пкм на врага, чтобы персонаж подбежал к врагу и, когда игрок к нему уже будет подбегать, чтобы бежал не к его прошлому местоположению и пробегал сквозь него (Враг при опр. расстоянии начинает идти на перса), а именно к врагу. Пока у меня получилось, как не нужно было бы(Он бежит на его прежнее местоположение).:

void Update () {

    if (Input.GetMouseButton(1))
    {
        RaycastHit hit;
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        if (Physics.Raycast(ray, out hit, Mathf.Infinity))
            if (hit.collider.CompareTag("Enemy"))
            {
                target = hit.transform;
                transform.LookAt(target);
                tPosition = hit.point;
                GetComponent<NavMeshAgent>().SetDestination(tPosition);
            }
    }
Answer 1

Во-первых, сохраните компонент NavMeshAgent вашего персонажа в методе Start() в отдельную переменную, чтобы не выполнять в каждом Update() метод GetComponent<>, так как он довольно дорогостоящий.

Например:

NavMeshAgent navAgent;
void Start(){
// это называется кэшированием компонента
navAgent = GetComponent<NavMeshAgent>();
}

Во-вторых, модифицируйте ваш код таким образом, чтобы если вы кликнули на врага, его компонент transform сохранялся в отдельную переменную, например Transform enemyTransoform. Далее добавьте следующий код в метод Update(), перед обработкой клика :

if (enemyTransoform != null)
{
  transform.LookAt(target);
  navAgent.SetDestination(tPosition);
}

Таким образом вы будете в каждом Update() корректировать путь вашего персонажа. Также, чтобы ваш персонаж не проходил сквозь врага, можно добавить вычисление расстояния до противника и сравнивать его с некой удобной вам констаной, например радиусом NavMeshAgent вашего персонажа. Если расстояние будет меньше, чем этот радиус останавливайте персонажа и выполняйте другие действия (например атака или что бы вы не захотели).

READ ALSO
Как передать параметр windows service?

Как передать параметр windows service?

Есть написанная службаИз программы запускаю эту службу

331
REST. Один GET запрос для разных ролей

REST. Один GET запрос для разных ролей

Есть три роли: admin, area(оператор района) и school(оператор школы)

293
Потокобезопасная коллекция с#

Потокобезопасная коллекция с#

ПриветИскал инфу про потокобезопасную коллекцию и почти везде такой код:

298
Создание View из Controller MVC

Создание View из Controller MVC

ASP занимаюсь недавно поэтому прошу сильно не битьЕсть небольшое приложение на asp MVC в котором нужно вывести на страничку некоторый список

289