自动寻径

来源:互联网 发布:static nodes.json 编辑:程序博客网 时间:2024/06/09 23:01

今天的内容是自动寻径

一、什么是自动寻径?


       点击场景上的一个位置,角色就会自动寻路。中间可能会有喝多的障碍物,角色会自动绕过障碍物,最终到达终点。

使用Unity来开发手游,自动寻路可以有很多的实现方式。

 

二、下面来举一个例子


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

 

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

 

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

 

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

 

     然后给角色添加脚本。:

 

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

 

     首先定义一个人物对象agent   :

 

      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://www.gopedu.com/

0 0
原创粉丝点击