【实战】Unity3d实战之Unity3d网络游戏实战篇(1):坦克构建

Unity3d实战之Unity3d网络游戏实战篇(1):坦克构建

  • 阅读文章前请细读以下几点:
  • 学习书籍《Unity3d网络游戏实战》 罗培羽著 机械工业出版。
  • 本文是作者在学习过程中遇到的认为值得记录的点,因此引用的代码等资源基本出资罗培羽老师的书籍 以下为个人的学习简记,与诸君共论。
  • 由于U3D的官方案例Tank Tutorial中对坦克的基本操作已经有了详尽的描述(其实是我懒..),因此本文着重于面板系统、服务端基本网络框架和客户端基本网络框架的搭建。
  • 如有疑问或者描述错误的地方,欢迎各位提出或修正,讨论交流是获取和巩固知识的重要途径之一!

一、坦克的基本控制
 坦克类游戏中,可以根据需要对坦克进行结构划分。书例中将坦克划分为炮管、炮塔、车身、轮子、履带。
 旋转炮管、炮塔的方法与fps类游戏的操控方法类似;
 坦克的操控可以使用基本的移动逻辑去实现,但为了更好地模拟现实中的坦克的移动方式,书中选择了WheelCollider,WheelCollider是Unity3d内置的碰撞器,能够很好地模拟现实中汽车的轮子的碰撞过程、汽车的悬挂系统、引擎系统等汽车关键的物理特性。
Unity3d-Wheel Collider 官方文档传送门;
 轮子的旋转可以根据WheelCollider的旋转速度定义;
 履带可以根据轮子的旋转速度,通过改变贴图纹理的offset值实现履带滚动效果。

二、射击逻辑
 涉及实例化炮弹Prefab、炮弹飞翔轨迹(LineRender实现,可参考官方案例。。今年U3D的案例更新真的很爆肝…)、炮弹爆炸效果、Tank焚烧效果、以及相关音效。
 书中描述到的还有一个准心:设计思想为玩家通过鼠标确定Tank炮台的最终指向,但Tank本身并不会瞬移到鼠标指向的方向,而是会缓慢移动到目标方向。但由于书中是通过Physics.Raycast来检测Tank每一帧下瞄准的物体以及使用NGUI来绘制准心,因此会出现发射炮弹后,准心跟着炮弹走的现象。

三、AI坦克
 分层有限状态机是游戏实现人工智能的传统方法。神经网络也能实现坦克AI化(YouTube上有相关的视频:结合Tank Tutorial以及神经网络训练Tank AI)。
 简单来说,分层有限状态机就是给Tank定义几种状态(巡逻、进攻、逃跑等,可用枚举类实现),当达到一定条件时更改Tank的状态,Tank根据当前的状态执行不同的逻辑。
  例;
  AI默认状态为巡逻(在一个定义的范围内随机移动,看起来像在散步hhh);
  当发现敌人时,将AI的状态设置为Attack;
   实时检测以自身为中心半径范围内是否出现带有Tank标签的Tank物体;或
   给AI添加Sphere Collider当发生碰撞时检测是否为敌人;或
   使用Physics.Raycast检测正前方,这样的Tank更像瞎子…等等)
  由于每一帧都在检测AI的状态,因此一旦发生改变,AI的行为就会发生相应的改变。

注意:这种方式的AI需要自定义AI巡逻的空间,而且通常需要进行路线计算。Unity3d内置的NavMesh为我们解决了这样的问题。NavMesh可以实现自动寻路、绕开障碍物、自动寻路过程中跳过障碍物等等这些都是可以配置和实现的。
Unity3d-Navigation 官方文档传送门

前面啰嗦那么多(还偷懒了很多_,-),精彩部分即将开始!

你可能感兴趣的:(实战集,Unity3d)