unity航点寻径
一、游戏框架:设置了六个路标,角色会在这六个路标之间一次移动,当移动到第六个路标后又会返回第一个路标,继续依次移动。
road: 道路,由五个立方体组成
sign:路标,由六个胶囊组成
enemy:寻路的角色
二、游戏实现:
1、创建一个平面,赋予图案使界面美观
2、创建一个空物体命名为road,创建五个立方体用来摆放成路的形状,要注意把立方体的y轴调小一点
3、创建一个空物体命名为sign,创建六个胶囊用来作为路标,并以此给他们的tag改为sign0-sign5
4、创建一个球命名为enemy,赋予颜色,添加组件Nav Mesh Agent,编写代码赋予enemy
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
public class Enemyfindway : MonoBehaviour
{
NavMeshAgent pathfinder;
Transform target;
private int num;
private string playername;
void Start()
{
num = 0;
playername = "sign" + num;
pathfinder = GetComponent<NavMeshAgent>();
target = GameObject.FindGameObjectWithTag(playername).transform;
}
void FixedUpdate()
{
move();
}
private void move()
{
Debug.Log("num: " + num);
Debug.Log("sign:" + playername);
target = GameObject.FindGameObjectWithTag(playername).transform;
pathfinder.SetDestination(target.position);
num = (num + 1) % 6;
playername = "sign" + num;
}
}
5、网格烘焙,设置plane和road中的五个立方体为可行走区域Windows->AI->navigation,选中plane进行设置,具体可烘焙方法可参照下面这个链接敌人追逐玩家、路径烘焙
6、设置FixedUpdate的间隔时间,默认的时间使0.02秒,不足以让enemy从一个路标移动到另一个路标,所以需要把间隔时间加大,edit->project settings,找到Time,把Fixed Timestep改为5
7、点击运行后可以看到小球从第一个路标移动一次移动到第五个路标然后又回到第一个路标一次循环。