参考:
https://www.cnblogs.com/chinarbolg/p/9601366.html
目录
准备工作
新建项目
新建一个项目,放一个Plane进去
下载动画素材
Asset Store里面随便下载一个有动作的动画教材,导入项目。
然后放一个小人到平台上
Animator
添加Animator组件
给小人添加Animator组件
创建一个Animator Controller
我这里创建了一个Animator Controller叫Test
把Test添加到Animator 中的Controller
添加状态
点击刚刚创建的Animator Controller,在控制面板中添加两个空的状态
修改名字Idle和Run,右键点击状态添加Transition(就是下面的箭头)
添加Motion
给两个状态都添加Motion
添加一些控制参数
这里我添加了bool类型的TestRun
点击箭头添加参数和值
这里的exit time取消(我暂时没有查什么原因)
脚本
创建脚本
创建一个TestMove脚本,来源见开头链接
using UnityEngine;
using UnityEngine.AI;
public class TestMove : MonoBehaviour
{
private NavMeshAgent navMeshAgent;
private Animator animator;
void Start()
{
navMeshAgent = GetComponent<NavMeshAgent>(); //获取自身AI组件
animator = GetComponent<Animator>(); //动画组件
}
void Update()
{
if (Input.GetMouseButton(1)) //右键
{
object ray = Camera.main.ScreenPointToRay(Input.mousePosition); //屏幕坐标转射线
RaycastHit hit; //射线投射碰撞
bool isHit = Physics.Raycast((Ray)ray, out hit); //射线投射(射线,结构体信息) ;返回bool 值 是否检测到碰撞
if (isHit)
{
print("坐标:" + hit.point); //射线与物体碰撞点
navMeshAgent.SetDestination(hit.point); //AI组件,设置目的地/终点
animator.SetBool("TestRun", true); //让人物跑起来
}
}
if (navMeshAgent.remainingDistance < 0.5f) //当前位置 与终点 的 剩余距离<0.5f
{
animator.SetBool("TestRun", false); //让人物站立
}
}
}
给人物添加脚本
Nav Mesh
给人物添加Nav Mesh Agent组件
烘焙
点击Plane,选择static
选中Plane,点击window-AI-Na。。。
点击Bake
然后就可以运行了。