自动寻径

来源:互联网 发布:windows snmp dhcp 编辑:程序博客网 时间:2024/06/09 23:41
欢迎来到U3D社区:

       现在的大部分MMO游戏都有了自动寻路功能。点击场景上的一个位置,角色就会自动寻路。中间可能会有喝多的障碍物,角色会自动绕过障碍物,最终到达终点。使用Unitu来开发手游,自动寻路可以有喝多的实现方式。

       我们要实现一个功能:鼠标点击场景中的一个位置,角色自动寻路过去 角色会绕过各种复杂的障碍物,找到一个理论上的最短路径

       首先 我们需要先创建一个地形后  摆多个障碍物  , 在选中地形    Navigation-->Navigation Static   所有的障碍物都需要添加Navigation Static  

       然后在Navigation窗口中选择Bake   就可以 看到那些地方可以通过  那些地方不可以通过。

       然后创建一个人物模型  给人物添加一个NavMeshAgent组件。

      然后给角色添加脚本。:

      人物脚本中主要应用了射线的原理      :

      我们需要首先定义一个人物   :

      private NavMeshAgent agent;
      private  Animator anim;

       接下来需要添加组件

    void  Start()

{     
       agent=GetComponent<NavMeshAgent>();
       anim= GetComponent<Animator>();
}
      RaycastHit hit;//射线命中点为人物
        if(Input.GetMouseButtonDown(0))
{
       Ray ray=Camera.main.ScreenPointToRay(Input.mouse.position);      //射线只想鼠标所点击的位置

       if(Physice.Raycast(ray.out hit))

{
       agent.SetDestination(hit.point);
}

}

将这段代码给了 人物      人物便可以自动移动到鼠标所点击的位置

让人物有走路和跑步的效果:

       需要用到判断语句:

       if(agent.remainingDistance==0)//人物剩余的距离为0时

{
         AnimatorToIdle();//人物停顿
}
else

{
       AnimtorToWalk();//人物走路
}

public void AnimatorToIdle()

{
       anim.SetFloat("idle",1f);
       anim.SetFloat("wale",0.0f);
       anim.SetFloat("run",0.0f);
}

public  void  AnimatorToWalk()

{
        anim.SetFloat("idle",0.0f);
        anim.SetFolat("run",0.0f);
        anim.SetFloat("walk",1.0f);
}

       将代码给人物时便可以行走

       宠物跟随:  游戏中基本都有宠物

        需要建立一个宠物  给宠物添加NabMeshAgent组件

      给宠物写代码:

       public Transform.target;//定义要跟随的人物
       private NavMeshAgent  agent;
  void Start()

{
       agent=GetComponent<NavMeshAgent>();
}
    void Update()

{
       if (target!=null)

{
       agent.destination=taeget.position;
}

       我们还可以做一个障碍物 在障碍物上添加 NAVMeshOstacle      人物便过不去了

        设置有写高出可以跳下  选中要挑的位置后 点击Navigation里边Bake的 Drop Height    填写的值要大于 所在的高度
  
       勾选  NavMeshOstacle 的 Object 的OffMeshLink  Generatic/

更多精彩在http://unity.gopedu.com/forum.php
0 0