Единство навмешь. следовать + остановка на определенном расстоянии от цели

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

     using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 using UnityEngine.AI;
 public class Attacking : MonoBehaviour {
     NavMeshAgent agent;
     Transform target;
     public float distance;
     public float followDistance;
     // Use this for initialization
     void Start () {
         agent = GetComponent<NavMeshAgent>();
     }

     // Update is called once per frame
     void Update () {
         if (Input.GetMouseButton(0))
         {
             target = null;
         }
             if (Input.GetMouseButton(1))
         {
             RaycastHit hit;

             if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out hit, 100))
             {
                 if (hit.collider.gameObject.tag == "enemy" || hit.collider.gameObject.tag == "Player")
                 {
                     target = hit.collider.transform;
                 }

             }
         }
         if(target != null)
         {
             distance = Vector3.Distance(transform.position, target.position);
             if (followDistance <= distance)
                 agent.destination = target.position;
         }
     }
 }

1 ответ

Прикрепите скрипт к врагу и дайте ему определенный радиус, скажем, 3f.

public float radius=3f;

для лучшего понимания и использования визуальной помощи OnDrawGizmosSelected() (по вашему вражескому сценарию).

void OnDrawGizmosSelected ()
{
Gizmos.color=Color.yellow;
Gizmos.DrawWireSphere(transform.position,radius);

}

Теперь на вашем плеере используется скрипт agent.StoppingDistance() как:

if(target != null)
     {
         distance = Vector3.Distance(transform.position, target.position);
         if (followDistance <= distance){
             agent.destination = target.position;
             agent.StoppingDistance=target.radius;
            }


     }

Примечание: вам придется сменить цель с трансформации на экземпляр вашего игрока

Другие вопросы по тегам