Обнаружение и отслеживание игрока

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

Я искал ответ в ответах сообщества единства и нашел скрипт, который использую, в этой ссылке https://answers.unity.com/questions/274809/how-to-make-enemy-chase-player-basic-ai.html, а также я погуглили, но не смогли найти правильного решения.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class AIController : MonoBehaviour
{
    public int AttackTrigger2;
    public Transform Player;
    public int MoveSpeed = 4;
    public int MaxDist = 10;
    public int MinDist = 5;

    void Update()
    {
        transform.LookAt(Player);

        if (Vector3.Distance(transform.position, Player.position) >= MinDist)
        {               
            transform.position += transform.forward * MoveSpeed * Time.deltaTime;       
            if (Vector3.Distance(transform.position, Player.position) <= MaxDist)
            {
                //Here Call any function U want Like Shoot at here or something
            }   
        }
    }
}

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


person helder ventura    schedule 12.07.2019    source источник


Ответы (2)


Вы должны изменить условие в первом if случае. Согласно вашему коду враг будет следовать за игроком, если расстояние между ними больше MinDist. Замените >= на<=. И я думаю, что вы, возможно, хотели чего-то подобного.

if (Vector3.Distance(transform.position, Player.position) <= MaxDist)//not MinDist
        {               
            transform.position += transform.forward * MoveSpeed * Time.deltaTime;       
            if (Vector3.Distance(transform.position, Player.position) <= MinDist)//not MaxDist
            {
                //Here Call any function you want, like Shoot or something
            }   
        }
person Harut Hunanyan    schedule 12.07.2019

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

>= MinDist 

Означает, что противник будет следовать за игроком, пока он будет больше или равен MinDist, в данном случае 5. Я предполагаю, что вы хотите:

<= MaxDist

так что противник следует за ним, только если он находится на расстоянии менее 10 км. Если до него больше 10, перестаньте подписываться.

person eye_am_groot    schedule 12.07.2019