在做一个FPS游戏时,需要敌方自动找到玩家方位并向玩家移动,在查找资料(并走了不少坑)后,我试了三个方法,经测试,这三个方法都能实现自动寻路功能。

方法一:使用Mathf.Lerp()方法


代码很简单:

//在enemy.cs(即敌方的脚本)中更新如下代码:
Transmform m_transform; //获得敌人组件 //在Update()函数中插入如下代码
m_transform.position =
new Vector3(Mathf.Lerp(m_transform.position.x,m_layer.m_transform.position.x,m_speed * Time.delta)),
0,
Mathf.Lerp(m_transform.position.z,m_layer.m_transform.position.z,m_speed * Time.delta))); //Mathf.Lerp(float a,float b,float t)函数表示:从点a以速度t移动至点b

这个方法似乎不需要自动寻路组件NavMeshAgent,不过NavMeshAgent用得更多一些,以下的两个方法都是基于NavMeshAgent的。


设置网格自动寻路的步骤:

1.将要进行Bake(烘焙)的场景设置为static(一定要保证Navigation Static是被勾选的):

2.通过Window -> Navgaition打开Navigation界面进行烘焙:

点击右下方的Bake(我第一次打开这个的时候一直没注意到这个Bake选项,还以为是这个选项没了!!!),等待它烘焙完成。还有另外一种烘焙方式,参见另一篇文章:http://blog.csdn.net/larry233/article/details/52022735

3.烘焙前:

烘焙后:

方法二:

简单到不知道怎么形容这个方法…
代码如下:

//先在Start()函数中获得玩家的组件:
m_player = GameObject.FindGameObjectWithTag("Player").GetComponent<Player>(); //将自动寻路的目标设置为玩家所在位置
GetComponent<NavMeshAgent>().destination = m_player.m_transform.position;

方法三:使用NavMeshAgent.Move()方法

这个方法是我最初使用的,但是出了很多意想不到的问题,我在正确烘焙场景后解决了这个问题,并使该方法正确执行了。代码如下:

NavMeshAgent m_agent;   //寻路组件

...   //省略中间代码

//在Start()函数中获得NavMeshAgent组件
void Start(){
... m_agent = GetComponent<NavMeshAgent>();
} //将敌方的速度转化为以s为单位
float speed = m_speed * Time.delta * 0.1f; m_agent.Move(m_transform.TransformDirection(new Vector3(0,0,speed)));

注1:不管哪种方法,都要将这些代码文件和enemy绑定在一起。

注2:虽然这三种方法都可行,但由于我初学unity,对它们的性能优劣以及差别并不了解,因此这些还有待研究。

Unity中使物体自动寻路的方法的更多相关文章

  1. unity中实现物体在一定角度范围内来回旋转

    using System.Collections; using System.Collections.Generic; using UnityEngine; public class Rotate : ...

  2. Unity中Instantiate物体失效问题

    才开始学Unity,开始总是这样用Instantiate函数: GameObject temp = (GameObject)Instantiate(bulletSource, transform.po ...

  3. Unity中的各种寻找GameObject方法

    1.GameObject.Find():寻找Hierarchy面板中的activie 不为false的游戏对象: 路径如官方事例写法: public class ExampleClass : Mono ...

  4. Unity中的各种寻找GameObject方法归纳

    1.GameObject.Find():寻找Hierarchy面板中的activie 不为false的游戏对象: 路径如官方事例写法: public class ExampleClass : Mono ...

  5. Unity中获取物体的子物体

    如果想获取一级子节点 foreach (Transform child in this.transform) { Debug.Log(child.name); } 如果想获取所有子节点 foreach ...

  6. Unity中UI界面颤抖解决方法

    将Render Mode中属性改为Screen Space - Camera 摄像机挂在Canvas属性下会出现UI界面颤抖的效果. UI界面颤抖解决方式:将Render Mode中属性改为Scree ...

  7. 关于unity中C#使用WaitForSeconds的方法

    //我有一段这样的代码,我要实现3秒后执行内容,JS是这样写的 function Update () { load (); } function load (){ //等待3秒执行语句 yield W ...

  8. unity中让物体移动到鼠标点击地面任一点的位置(单击移动和双击暂停移动)并生成图标

    using UnityEngine; using System.Collections.Generic; using UnityEngine.EventSystems; using UnityEngi ...

  9. Unity中激活子物体

    void GetChildrenAndSetActive() { Transform[] imageTargetObjects = GetComponentsInChildren<Transfo ...

随机推荐

  1. MSSQLSERVER数据库- LEFT JOIN后面跟着WHERE竟变成内联 解决方法

    在LEFT JOIN后面跟着WHERE竟变成内联.百度后看到这个解决方法. 记录如下: select sre.*, co.description from subscribedratingelemen ...

  2. React Native学习笔记-1:JSC profiler is not supported.(转载)

    运行react-native中Example下的UIEXPLORER Project 遇到虾面报错: 2016-03-21 14:12:18.941 [trace][tid:com.facebook. ...

  3. Hibernate映射文件简单配置

    <?xml version="1.0" ?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibe ...

  4. 解读BOM与COM

    概念: 1.BOM(Browser Object Model): 浏览器对象模型,从名字上就能知道它和浏览器关系密切. 浏览器的非常多行为是通过JavaScript控制的.比如打开新窗体.打开关闭标签 ...

  5. Codeforces Round #261 (Div. 2) D 树状数组应用

    看着题意:[1,i]中等于a[i]的个数要大于[,jn]中等于a[j]的个数 且i<j,求有多少对这种(i,j)  ,i<j可是 i前面的合法个数 要大于j后面的 看起来非常像逆序数的样子 ...

  6. Windows下python环境变量配置

    默认情况下,在windows下安装python之后,系统并不会自动添加相应的环境变量.此时不能在命令行直接使用python命令. 1. 首先需要在系统中注册python环境变量:假设python的安装 ...

  7. android128 zhihuibeijing 科大讯飞 语音识别

    - 科大讯飞 开放平台 http://open.voicecloud.cn/ package com.itheima.voicedemo; import android.app.Activity; i ...

  8. 配置SQL Server 2008管理器

    SQl Server 配置管理器(简称为配置管理器)包含了SQL Server 2008服务.SQL Server 2008网络配置和SQL Native Client配置3个工具,供数据库管理人员做 ...

  9. c++ 模运算

    在数学里,"模运算"也叫"求余运算",用mod来表示模运算. 对于 a mod b 可以表示为 a = q(商)*b(模数) + r(余数),其中q表示商,b表 ...

  10. Github 上的 iOS 开源项目

    在 Github 上 Star 太多了,有时候很难找到自己想要的开源库,所以在此记录下来.便于自己开发使用,也顺便分享给大家. 动画 awesome-ios-animation收集了iOS平台下比较主 ...