自动寻径

来源:互联网 发布:铝合金型材批发 知乎 编辑:程序博客网 时间:2024/06/02 11:40

欢迎来到 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里面BakeDrop Height的值

2、勾选Navigation里面ObjectOffMeshLink Generatic

3Bake

人物选择性的行走

 

1、把Navigation里面BakeDrop Height的值设为0

2、取消勾选Navigation里面ObjectOffMeshLink Generatic

3Bake

4、在Navigation里面Layers创建两个Layers(LayersUp  

      LayersDown)-->Bake

5、选中人物,设置人物属性(NavMesh Walkable Default  LayersUpLayersDown)

 


0 0
原创粉丝点击