最近沉迷《Dreadnought》(中文名:无畏战舰,B站CG链接),回想起作为十余年EVE老油条的太空生涯,又萌生了做个太空游戏的情怀,所以这一次就讲讲怎么做个简单的太空飞船的小游戏好了。
因为不会美术(懒,当然这并不是重点...),所以求助assetstore好了,Free大法好
这里不得不提下CGPitbull这家资源商,发布了很多不错的科幻载具,虽然不是很喜欢这种风格的涂装,不过已经是商店里少有的全系列高质量资源了,赞一个。
然后我们把下好的飞船资源丢到unity里,记得搞个天空盒哟:
怎样,是不是很帅,瞧这质感,口水……
然后来实现飞船的控制,首先看下图,物体在三维空间里的移动有上下左右前后三个轴向的位移和旋转:
现实里的飞船控制当然是非常复杂的,作为游戏来说完全仿真肯定是不行的,需要根据游戏玩法进行简化,根据作者玩过的游戏,有以下几种操控类型:
固定翼飞机式控制,鼠标控制Pitch和Yaw进行视角旋转和目标锁定,键盘控制Roll等,也是最为常见的3D飞行射击控制方式,参考类型有《无人深空》《精英危险》《浴火银河》等。此种模式的特点在于鼠标同时控制了视角和航向,便于感受飞行追逐射击的快感,在PC端由于鼠标的特性可以很容易上手,但在移动端控制的时候需要相应的辅助瞄准(也是移动端FPS类特有的问题),由于此类玩家通常热衷于飞行追逐,所以使用载具大都为战机等灵活机型。
因麦曼机动,操控时需要鼠标向上拉角度,然后翻滚
飞艇式控制,完全由键盘控制移动和旋转,多用于直升机,飞艇,大型飞船类,参考游戏有《Dreadnought》《Kerbal Space Program》等。有别于第一种模式,完全采用键位控制的飞船可以轻易实现在3个轴向上的旋转和移动,也是最为接近于真实飞船移动的方式,但真实的不一定是最好的,同时控制位移和旋转对操作要求大大提升,而且很难做出相应的机动,所以一般会对这种模式进行简化,如《Dreadnought》中,就将WS作为前后移动,AD作为Yaw旋转,Shift和Space作为上下移动,取消了Pitch和Roll控制,从而在保留的较多的操控感的同时简化了操作。反观《Kerbal Space Program》作为硬核航天模拟游戏采用完全真实模拟控制,在操作的时候极为困难,需要经过多次练习才能掌握(对接的坑啊……MJ大法好)
KSP中模拟飞船对接
指令式控制,完全通过点击相应的指令,飞船自主移动,这种模式就是将飞船操控的感觉完全去除,交给飞船自主姿态控制,极大的简化了玩家操作难度,适用于MMO类型的太空游戏。比如一切全靠右键点菜单的《EVE》,值得一提的是后期EVE加入了键位控制,但由于游戏模式本身的问题,操作还不如不操作。
网易你倒是赶紧开服让我进去截个图啊!!!
游戏作为一个箱笼,一个沉浸式的交互体验场景,玩家的操作输入和游戏的反馈输出至关重要,对于操控模式的选择,需要在一开始的时候就根据游戏的核心玩法来决定。此时此景,由于作者君沉迷《Dreadnought》,当然是选择抄他一波啦……
首先在unity里制作这样的一个场景,注意一点这里我把飞船模型放到了控制器下的Avatar子对象下,这样可以在控制器处理位移的时候对飞船进行一些其他的操作。
然后编写控制脚本:
这里先用最简单的方式实现基本的效果,通过Rotate和Translate实现了最简单的操作,UpDown是在Input中添加的轴向操作,参考Horizontal设置,键位改为shift和空格键就行。avatar部分是为了模拟Roll和Pitch旋转,提升表现力。效果如下:
可以看到基本的效果已经出来了。当然,此处只是粗略的模拟,还有很多坑等着填,比如飞船操控的阻尼感,现在开起来就像纸片,飞船位移的碰撞处理,引擎的效果,等等,接下来我们一一来填。
首先改用物理的方式来移动,作者一开始为了真实模拟飞船采用了Rigidbody.AddForce的方式来做,好处是可以比较真实的模拟飞船的力,然后就掉坑里了,各种受力点,物理材质,力矩调整,十分的麻烦,嘛……又不是做真实模拟,所以后来直接改Rigidbody.MovePosition好了,加速和减速分别用了两个值,因为减速度很可能高于加速度,核心代码如下:
然后将面板参数调整到合适的手感:
这样就得到了进一步改进的飞船控制,手感已经接近于《Dreadnought》的操控,顺带我还抠了个引擎火焰效果放上去,根据操作进行反馈,下面是最终效果:
简单的AI控制
由于只要提供三轴的控制,我们可以很容易的实现飞船的AI,这里我简单写了个判别逻辑计算输入的三轴,然后在fixedupdate中调用OnMove方法:
这里是跟随的效果,还凑合。
以上就是本篇飞船控制的内容,由于篇幅有限,不再对更复杂的飞船控制展开讲解,大家可以去玩玩KSP进行亲身体验XD,下一篇讲下常见的飞船武器,大舰就要配巨炮,亿万炮塔,亿万荣光!
工程地址:https://github.com/evesgf/SpaceGame
作者:杨定鹏
专栏地址:https://zhuanlan.zhihu.com/p/68929755