Как реализовать, чтобы враг AI с NavMesh Agent ходил за игроком, если игрок находится в поле зрения врага.
Unity 3D Передвижение я уже сделал, он ходит за мной, но постоянно. Вот код:
1234567891011121314151617181920
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
public class EnemyController : MonoBehaviour
{
public Transform player;
private NavMeshAgent agent;
void Start()
{
agent = GetComponent<NavMeshAgent>();
}
void Update()
{
agent.SetDestination(player.position);
}
}

По дате
По рейтингу
Вы можете использовать функцию Physics.Raycast для определения, видит ли враг игрока. Вот пример кода, который вы можете использовать:
123456789101112131415161718192021222324252627282930313233
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
public class EnemyController : MonoBehaviour
{
public Transform player;
private NavMeshAgent agent;
public float viewDistance = 10f;
public LayerMask obstacleMask;
void Start()
{
agent = GetComponent<NavMeshAgent>();
}
void Update()
{
Vector3 direction = player.position - transform.position;
Ray ray = new Ray(transform.position, direction);
RaycastHit hit;
if (Physics.Raycast(ray, out hit, viewDistance, obstacleMask))
{
if (hit.transform == player)
{
agent.SetDestination(player.position);
}
}
}
}
В этом примере мы используем Physics.Raycast для создания луча от врага до игрока. Если луч пересекается с игроком и не пересекается с другими объектами (например, стенами), то враг будет двигаться к игроку. Вы можете настроить дальность обзора и маску препятствий для управления тем, какие объекты блокируют обзор врага.