ai写的,未测试
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
public class MultiPlayerController : MonoBehaviour
{
public GameObject enemy; // 敌人对象
public float detectionRange = 10f; // 检测范围
public float stoppingDistance = 2f; // 停止距离
private NavMeshAgent[] agents; // 导航代理数组
private void Start()
{
agents = GetComponentsInChildren<NavMeshAgent>();
}
private void Update()
{
// 获取敌人位置
Vector3 enemyPosition = enemy.transform.position;
// 检查每个代理是否可以看到敌人
foreach (NavMeshAgent agent in agents)
{
if (Vector3.Distance(agent.transform.position, enemyPosition) <= detectionRange)
{
RaycastHit hit;
if (Physics.Linecast(agent.transform.position, enemyPosition, out hit))
{
if (hit.collider.gameObject == enemy)
{
// 如果代理可以看到敌人,则将其设置为目标点
agent.stoppingDistance = stoppingDistance;
agent.SetDestination(enemyPosition);
}
}
}
else
{
// 如果代理看不到敌人,则停止移动
agent.stoppingDistance = 0f;
agent.ResetPath();
}
}
}
}
在这个示例中,我们假设场景中有多个角色,每个角色都有一个NavMeshAgent组件,并且已经在场景中创建了一个移动敌人对象。我们首先获取所有NavMeshAgent组件的引用,在Update方法中检查每个代理是否可以看到敌人,并在必要时将其设置为目标点。如果代理无法看到敌人,则停止移动并清除其路径。
请注意,这只是一个简单的示例代码,您可能需要对其进行调整以实现所需的行为和效果。例如,您可能需要调整检测范围、停止距离或其他属性来获得更好的结果。