[Unity3D]赛车游戏开发 - 计算机对手AI设计方案

 自己先激动下我的计算机对手终于有点智商了,自己会跑了。然后接下来写教程-.-

[Unity3D]赛车游戏开发 - 计算机对手AI设计方案 - 六道小U - =六道异次元之Ω空间=
 

首先申明,这个车的运动并不是简单的轨迹运动,他的AI是直接加在玩家控制引擎上的,我要做到的就是单一通用脚本,并且电脑没有作弊(想起星际电脑的AI就晕,电脑一开始就有给了自己很多钱,只不过在装他没钱而已)。

[Unity3D]赛车游戏开发 - 计算机对手AI设计方案 - 六道小U - =六道异次元之Ω空间=
 

这是我写的汽车的通用脚本的public属性段,AI那项不钩就是玩家控制的,勾选了就是电脑控制。(顺便炫下我的汽车引擎,那可是按真实汽车引擎转速和齿轮箱比例转换后作用到轮子上的。)嘿嘿,老外公开的代码都没有这些吧,我的齿轮箱是可以设置的,便于以后做改装车游戏用。

回归原题,写AI:

 

1.先给地图加上路径点(WayPoints)

电脑不是你,就算不是电脑,她也不一定知道你想让他往哪里开,开的赛道怎么样,这就需要一些路径提示。想起来以前玩三角洲的那个小地图,绿色的路径线指着目标方向,到了一个目标后继续朝下一个目标指去。OK,就这么做。

[Unity3D]赛车游戏开发 - 计算机对手AI设计方案 - 六道小U - =六道异次元之Ω空间=
 

首先得想到的是路径是要有顺序的,所以每个路径点都必须要有个index属性来标识他在整个路径里的先后关系。(交代清楚下,有些人可能看到w这个字以为我是哪里下的路径组件,可以跟你说,目前没有好用的路径组件,再说了路径点只是个坐标而已(可以创建Empty Object做,因为他就只有坐标信息),没必要这个也copy人家吧,这个w图标是官方的FPS教程里拿出来用的,自己懒得画)。这里W图标和绿线是通过Gizmos,就是开发环境标记,不懂得可以参看我另外一篇日志,这里仅仅是为了开发时候自己看得舒服点而已,编译完运行是不会有的。其实路径点只需要记录2个信息:坐标和索引(index),所以路径的脚本(类)里也必须有这两样。然后要有一个函数把地图上所有路径点整合起来,重点就是完成下面这个功能

var objects : Object[] = FindObjectsOfType(WayPoints);

之后再把当前脚本所在的路径点索引前后两个连接起来,这里用到一个Physics.Linecast()判断,链接时候测试下两个路径点连线中间有碰到其他物体,没有就画绿线,有就画红线(这个可是做AI寻径很重要的函数,判断AI能不能走过去或者判断电脑能不能看到某样东西的时候非常好用)。然后路径点就设置好了。

 

有关于Gizmos部分,参看我另外一篇日志,这里不浪费文字了。

 

2.计算机AI获取下一个目标路径点

这部很简单,在汽车引擎脚本里专门加个AI函数来处理,拿个变量记录下路径索引,到达一个后自动指向下一个就好了(到达最后一个index再回到0)。注意的是这里最好是个范围值,就是判断下车离这个点distance小于某个数值就算踩到这个点了,因为汽车可能拐弯没来得及从点旁边开过去了。

 

3.把控制权交给AI

我们直接在键盘控制那里设个判断,如果AI=true,那就不用等待用户的键盘输入了,直接交给AI函数处理,既然已经知道下一个点应该往哪里走了,获取下下个点坐标,转换为车的本地坐标系,然后判断他的x轴位置,如果大于0就说明点偏汽车右手边,那就需要向右转弯,反之亦然。我写到这里时候也卡了一下下,本来以为几何里有什么运算可以知道点和向量的位置关系,后来发现没办法知道,那最简单就是把点转换为汽车本地坐标系(因为本地坐标系最好判断,车的forward方向就是z轴,right方向就是x轴,up方向就是y轴)。这里的拐弯当然也要设个范围值,不然的话车一拐就过头了,你就会发现AI拼命在摇头了。然后就是让车控制你的键盘输入前进咯。

因为是AI替代了键盘控制而已,至于车怎么开,齿轮箱怎么变换档,刹车怎么处理这个都是汽车引擎封装好的,AI不需要知道,也没有必要知道,他们只要知道加速要按向前键,拐弯要按左右键就可以了。

 

提醒下物体在世界坐标系的坐标转换为本个物体的本地坐标系函数:

var nextPointofLocal = transform.InverseTransformPoint(nextPointPosition);

 

4.更聪明的AI

受别人提醒,见到别人的车要懂得躲避的,甚至以后要让电脑懂得漂移。

躲避方法很简单,一样可以用判断车到路径点中间有没有其他障碍物(其他车辆或者物体),有的话往左或往右转弯就可以了。或者还有其他想法,各位看官自己发挥了。

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity3D赛车游戏可以通过使用Unity引擎的功能和脚本来创建。你可以使用Unity的物理引擎来模拟赛车的运动和碰撞,使用Unity的渲染功能来创建逼真的赛车场景和特效。 在游戏中,你可以创建赛车模型,并将其添加到场景中。你可以使用脚本来控制赛车的移动和操纵,例如使用键盘或触摸控制赛车的方向和速度。 你还可以创建赛车道路和赛道障碍物,使用Unity的碰撞检测功能来检测赛车与障碍物的碰撞,并实现相应的物理效果。 此外,你可以使用Unity的粒子系统来创建火花、烟雾和爆炸效果,以增加游戏的视觉效果。 综上所述,通过使用Unity引擎的功能和脚本,你可以创建一个逼真的赛车游戏,包括赛车模型、赛道、碰撞检测、物理效果和特效。希望这些信息能对你有所帮助。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [使用Unity3D 自主实战开发赛车游戏实例,关键点记录 (一)之赛车游戏总体介绍](https://blog.csdn.net/narutojzm1/article/details/51308894)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Unity3D赛车游戏+脚本基础](https://blog.csdn.net/m0_58367586/article/details/127901530)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值