欢迎来到 unity 学习 、 unity 培训 、 unity 企业培训 教育专区,这里有很多 U3D 资源 、 U3D 培训视频 U3D 教程 、 U3D 常见问题 、 U3D 项目源码 ,我们致力于打造业内 unity3d 培训、学习第一品牌。
玩过游戏的人都知道点击鼠标人物就可以移动,鼠标点到哪里人物就会到哪里。这就是我们所要说的自动寻径。
现在我们就要建一个场景叫人物实现自动寻径,要做下面的步骤:
首先要创建地形,然后添加角色,之后创建游戏场景,创建多个障碍物
之后选中地形在Navigation窗口中,设置Navigation static再之后选中障碍物,
进行同样的操作,然后在Navigation窗口中,选择Bake(烘焙)界面,点击Bake 按钮,最后为角色添加NavMeshAgent组件。
Component->Navigation->Nav Mesh Agent 最后添加一个脚本最终实现物体的自动寻径
private NavMeshAgent agent;
private Animator anim;
void Start() {
agent = GetComponent<NavMeshAgent>();
anim = GetComponent<Animator>();
}
void Update() {
RaycastHit hit;
if (Input.GetMouseButtonDown(0)) {
Ray ray =
Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out hit)){
agent.SetDestination(hit.point);
}
if(agent.remainingDistance==0){
AnmationTo();
}else
{
AnimalWalk();
}
}
}
public void AnmationTo(){
anim.SetFloat("idle", 0.0F);
anim.SetFloat("walk", 0.0F);
anim.SetFloat("run", 0.0F);
}
public void AnimalWalk(){
anim.SetFloat("idle", 0.0F);
anim.SetFloat("walk", 1.0F);
anim.SetFloat("run", 0F);
}
然后在写一个物体跟着另一个物体,在另一个物体上写上如下代码:
public Transform target;
private NavMeshAgent agent;
// Use this for initialization
void Start () {
agent = GetComponent<NavMeshAgent>();
}
// Update is called once per frame
void Update () {
if (target!= null)
{
agent.destination=target.position-new Vector3 (0,0,3);
}
}
这样就可以完成一个物体随着另一个物体移动的目的,再把人物拽入所写的对象。
人物从从高空跳下
1、设置Navigation里面Bake的Drop Height的值
2、勾选Navigation里面Object的OffMeshLink Generatic
3、Bake
人物选择性的行走
1、把Navigation里面Bake的Drop Height的值设为0
2、取消勾选Navigation里面Object的OffMeshLink Generatic
3、Bake
4、在Navigation里面Layers创建两个Layers(LayersUp
LayersDown)-->Bake
5、选中人物,设置人物属性(NavMesh Walkable :Default LayersUp或LayersDown)