今天跟大家唠唠我这几天搞的“两个巡逻兵”的小玩意儿,别想歪了,不是真巡逻兵,就是一个小小的游戏demo,灵感来自以前看过的一个老电影,名字就叫《两个巡逻兵》。
我就是想试试Unity里面能不能简单实现一个AI巡逻的功能。先是新建了一个Unity项目,然后随便画了两个立方体当做巡逻兵,地面就是一个简单的平面,啥贴图都没加,糙得很。
就是写巡逻的脚本了。我是这么想的,得定义几个巡逻点,巡逻兵就按顺序走到这些点。我用一个List来存储这些巡逻点,然后在Inspector面板里手动添加。然后,在脚本里写一个函数,让巡逻兵朝着下一个巡逻点移动。移动用的是* = *(*, patrolPoints[currentPointIndex].position, moveSpeed *);
,这个函数挺好用的,可以直接控制速度,而且到达目标点会自动停止。
然后,就是判断巡逻兵是不是到达了巡逻点。我是用来计算距离的,如果距离小于某个阈值(比如0.1f),就认为到达了,然后更新currentPointIndex
,指向下一个巡逻点。注意这里要处理一下currentPointIndex
越界的情况,如果到了一个巡逻点,就回到第一个点,形成循环。
把脚本挂到两个立方体上,设置好巡逻点和移动速度,运行一下,还真像那么回事儿,两个立方体开始按着设定的路线来回走了。
不过问题也来了。这两个立方体走得太死板了,就像机器人一样,一点生气都没有。我就想着,能不能让它们随机停顿一下,或者随机改变一下速度,让它们看起来更自然一些。
我加了一个随机停顿的功能。在每次到达巡逻点之后,让巡逻兵随机停顿一段时间,停顿时间用函数生成一个随机值。停顿的时候,把移动速度设置为0,停顿时间结束后,再恢复到原来的速度。
我还尝试着让它们随机改变一下速度,也是用函数生成一个随机速度,然后在一段时间内使用这个随机速度,然后再恢复到原来的速度。不过这个效果不太有时候速度变得太快了,看起来很不自然,就没用了。
我还给它们加了一个简单的“视野”,用函数检测巡逻兵周围是否有其他物体,如果有,就在控制台输出一下。这个功能还没完善,以后可以用来实现更复杂的AI行为,比如发现敌人、追击等等。
这回“两个巡逻兵”的实践,让我对Unity的AI功能有了初步的了解,也让我体会到了游戏开发的乐趣。虽然只是一个很简单的demo,但是也花了不少时间,解决了不少问题。以后还会继续学习,争取做出更酷炫的游戏!
还没有评论,来说两句吧...