using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
using System;
public class NavmeshAgent: MonoBehaviour
{
public NavMeshAgent character;//创建自动导航对象
public GameObject targetTransformFather;//巡逻目标父类
public Transform[] targetTransforms;//巡逻目标数组
public int destinationIndex = 0;//巡逻点位重置变量
void Start()
{
targetTransforms = targetTransformFather.GetComponentsInChildren<Transform>();//传入巡逻目标点对象
character = this.GetComponent<NavMeshAgent>();//给角色调用自动巡航组件
if (character != null && targetTransforms != null)//如果目标存在并且巡航点不为空
{
character.destination = targetTransforms[0].position;//角色从数组第一个点开始
}
}
void Update()
{
if (!character.pathPending&&character.remainingDistance<0.5f)//如果角色到达目的地并且与其距离小于0.5
{//目的地更换
destinationIndex = (destinationIndex + 1) % targetTransforms.Length;//遍历每一个目标点
//每次取余数组长度,得到原数加一,当期和数组长度相同时,取余为1,回到起始位置,会在数组元素内循环
character.destination = targetTransforms[destinationIndex].position;//更新点位
}
}
}
以上为自动巡逻,如果怪物加入刚体等组件,需要合理调整怪物与目标点的距离。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
public class MousePointMove : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{//添加射线
if (Input.GetMouseButtonDown(0))//记录鼠标左键
{
RaycastHit hit;
if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition),out hit,1000))//射线参数为1000距离
{
this.GetComponent<NavMeshAgent>().destination = hit.point;//加入自动导航组件使角色位置,移动到鼠标发射射线的位置
}
}
}
}