Top.Mail.Ru
Ответы

Как реализовать, чтобы враг 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 для создания луча от врага до игрока. Если луч пересекается с игроком и не пересекается с другими объектами (например, стенами), то враг будет двигаться к игроку. Вы можете настроить дальность обзора и маску препятствий для управления тем, какие объекты блокируют обзор врага.