Единство навмешь. следовать + остановка на определенном расстоянии от цели
Привет, так что я пытаюсь создать это игрок может щелкнуть правой кнопкой мыши на враге, и он будет следовать на определенном расстоянии. который работает нормально. но я тоже хочу, чтобы это было и на этом расстоянии. в настоящее время, если враг останавливается, он попытается вернуться в свое точное положение, вместо того, чтобы немного остановиться, это то, что я имею в настоящее время.
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;
}
}
Примечание: вам придется сменить цель с трансформации на экземпляр вашего игрока