学习Unity3D之自动寻径。

本文介绍如何在Unity3D中实现自动寻径功能,适用于mmo游戏。通过创建地形,添加角色,摆放复杂障碍物,并在Navigation窗口设置Navigation Static,使角色能自动绕过障碍物寻找最短路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

欢迎来到unity学习unity培训unity企业培训教育专区,这里有很多U3D资源U3D培训视频U3D教程U3D常见问题U3D项目源码,我们致力于打造业内unity3d培训、学习第一品牌。

 

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

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


       1、创建地形     


       2、添加角色


       3、创建多个障碍物,尽量摆的复杂一点,来检查Navmesh的可用性和效率。


       4、选中地形,在Navigation窗口中,设置Navigation Static

       5、依次选中障碍物,在avigation窗口中,设置Navigation Static

       6、Navigation窗口中,选择Bake(烘焙)界面,点击Bake按钮,进程场景烘焙,就可以烘焙出寻路网格了

       7、为角色添加NavMeshAgent组件。Component->Navigation->Nav Mesh Agent

       8、为角色新增一个脚本PlayerController.cs,实现点击目标,自动寻路功能
       代码:
       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){ 
                   AnimationToIdle(); 
               } 
               else{ 
               AnimationToWalk(); 
               } 
           }
           public void AnimationToIdle(){
               anim.SetFloat("idle", 1F);
               anim.SetFloat("walk", 0.0F);
               anim.SetFloat("run", 0F);
           }
           public void AnimationToWalk(){
               anim.SetFloat("run", 0.0F);
               anim.SetFloat("idle", 0F);
               anim.SetFloat("walk", 1.0F);
           }

宠物跟随
       public Transform target;
       private NavMeshAgent agent;
       void Start () {
           agent = GetComponent<NavMeshAgent>();
       }
       void Update () {
           if (target!= null) {
               agent.destination=target.position;
           }
       }

       把脚本给宠物,为宠物添加NavMeshAgent,target为巨魔
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值