士郎 用unity制作简单的太空游戏(1)-简单飞船控制

8
回复
705
查看
打印 上一主题 下一主题
[ 复制链接 ]
排名
1
昨日变化

8064

主题

8622

帖子

3万

积分

Rank: 16

UID
1231
好友
186
蛮牛币
12284
威望
30
注册时间
2013-7-29
在线时间
4131 小时
最后登录
2019-8-26

活力之星原创精华达人突出贡献奖财富之证游戏蛮牛QQ群会员蛮牛妹VIP

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x
最近沉迷《Dreadnought》,回想起作为十余年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,下一篇讲下常见的飞船武器,大舰就要配巨炮,亿万炮塔,亿万荣光!

感谢作者

知乎@杨定鹏

5熟悉之中
859/1000
排名
5292
昨日变化

0

主题

108

帖子

859

积分

Rank: 5Rank: 5

UID
173004
好友
0
蛮牛币
1309
威望
0
注册时间
2016-11-17
在线时间
481 小时
最后登录
2019-8-26
沙发
2019-7-15 11:41:48 只看该作者
很详细,给个赞!!
7日久生情
2139/5000
排名
4092
昨日变化

0

主题

1412

帖子

2139

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
254705
好友
1
蛮牛币
1939
威望
0
注册时间
2017-11-16
在线时间
365 小时
最后登录
2019-8-25
板凳
2019-7-15 14:52:35 只看该作者
6666666666666666666666666666666
7日久生情
2139/5000
排名
4092
昨日变化

0

主题

1412

帖子

2139

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
254705
好友
1
蛮牛币
1939
威望
0
注册时间
2017-11-16
在线时间
365 小时
最后登录
2019-8-25
地板
2019-7-16 08:05:57 只看该作者
666666666666666666666666666666666
6蛮牛粉丝
1005/1500
排名
3009
昨日变化

5

主题

143

帖子

1005

积分

Rank: 6Rank: 6Rank: 6

UID
129262
好友
1
蛮牛币
1181
威望
0
注册时间
2015-11-18
在线时间
363 小时
最后登录
2019-8-22
5#
2019-7-16 10:35:17 只看该作者
66666666666666666666666666666666

0

主题

6

帖子

7

积分

Rank: 1

UID
327281
好友
0
蛮牛币
0
威望
0
注册时间
2019-7-16
在线时间
1 小时
最后登录
2019-7-17
6#
2019-7-17 09:37:18 只看该作者
太厉害了我要赚积分
3偶尔光临
196/300
排名
15909
昨日变化

0

主题

76

帖子

196

积分

Rank: 3Rank: 3Rank: 3

UID
13824
好友
0
蛮牛币
0
威望
0
注册时间
2014-2-7
在线时间
74 小时
最后登录
2019-7-25
7#
2019-7-25 18:42:14 只看该作者
很详细,给个赞!!
3偶尔光临
220/300
排名
11086
昨日变化

1

主题

50

帖子

220

积分

Rank: 3Rank: 3Rank: 3

UID
198371
好友
0
蛮牛币
297
威望
0
注册时间
2017-1-3
在线时间
109 小时
最后登录
2019-8-23
8#
2019-8-2 11:08:50 只看该作者
666666666

0

主题

1

帖子

2

积分

Rank: 1

UID
328570
好友
0
蛮牛币
3
威望
0
注册时间
2019-8-2
在线时间
1 小时
最后登录
2019-8-5
9#
2019-8-2 15:49:22 只看该作者
666666666666666
您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则