用unity制作简单的太空游戏(1):简单飞船控制
最近沉迷《Dreadnought》(中文名:無畏戰(zhàn)艦,B站CG鏈接),回想起作為十余年EVE老油條的太空生涯,又萌生了做個(gè)太空游戲的情懷,所以這一次就講講怎么做個(gè)簡單的太空飛船的小游戲好了。
因?yàn)椴粫?huì)美術(shù)(懶,當(dāng)然這并不是重點(diǎn)...),所以求助assetstore好了,Free大法好
?
這里不得不提下CGPitbull這家資源商,發(fā)布了很多不錯(cuò)的科幻載具,雖然不是很喜歡這種風(fēng)格的涂裝,不過已經(jīng)是商店里少有的全系列高質(zhì)量資源了,贊一個(gè)。
然后我們把下好的飛船資源丟到unity里,記得搞個(gè)天空盒喲:
?
怎樣,是不是很帥,瞧這質(zhì)感,口水……
然后來實(shí)現(xiàn)飛船的控制,首先看下圖,物體在三維空間里的移動(dòng)有上下左右前后三個(gè)軸向的位移和旋轉(zhuǎn):
?
現(xiàn)實(shí)里的飛船控制當(dāng)然是非常復(fù)雜的,作為游戲來說完全仿真肯定是不行的,需要根據(jù)游戲玩法進(jìn)行簡化,根據(jù)作者玩過的游戲,有以下幾種操控類型:
固定翼飛機(jī)式控制,鼠標(biāo)控制Pitch和Yaw進(jìn)行視角旋轉(zhuǎn)和目標(biāo)鎖定,鍵盤控制Roll等,也是最為常見的3D飛行射擊控制方式,參考類型有《無人深空》《精英危險(xiǎn)》《浴火銀河》等。此種模式的特點(diǎn)在于鼠標(biāo)同時(shí)控制了視角和航向,便于感受飛行追逐射擊的快感,在PC端由于鼠標(biāo)的特性可以很容易上手,但在移動(dòng)端控制的時(shí)候需要相應(yīng)的輔助瞄準(zhǔn)(也是移動(dòng)端FPS類特有的問題),由于此類玩家通常熱衷于飛行追逐,所以使用載具大都為戰(zhàn)機(jī)等靈活機(jī)型。
?
飛艇式控制,完全由鍵盤控制移動(dòng)和旋轉(zhuǎn),多用于直升機(jī),飛艇,大型飛船類,參考游戲有《Dreadnought》《Kerbal Space Program》等。有別于第一種模式,完全采用鍵位控制的飛船可以輕易實(shí)現(xiàn)在3個(gè)軸向上的旋轉(zhuǎn)和移動(dòng),也是最為接近于真實(shí)飛船移動(dòng)的方式,但真實(shí)的不一定是最好的,同時(shí)控制位移和旋轉(zhuǎn)對(duì)操作要求大大提升,而且很難做出相應(yīng)的機(jī)動(dòng),所以一般會(huì)對(duì)這種模式進(jìn)行簡化,如《Dreadnought》中,就將WS作為前后移動(dòng),AD作為Yaw旋轉(zhuǎn),Shift和Space作為上下移動(dòng),取消了Pitch和Roll控制,從而在保留的較多的操控感的同時(shí)簡化了操作。反觀《Kerbal Space Program》作為硬核航天模擬游戲采用完全真實(shí)模擬控制,在操作的時(shí)候極為困難,需要經(jīng)過多次練習(xí)才能掌握(對(duì)接的坑啊……MJ大法好)
?
指令式控制,完全通過點(diǎn)擊相應(yīng)的指令,飛船自主移動(dòng),這種模式就是將飛船操控的感覺完全去除,交給飛船自主姿態(tài)控制,極大的簡化了玩家操作難度,適用于MMO類型的太空游戲。比如一切全靠右鍵點(diǎn)菜單的《EVE》,值得一提的是后期EVE加入了鍵位控制,但由于游戲模式本身的問題,操作還不如不操作。
?
游戲作為一個(gè)箱籠,一個(gè)沉浸式的交互體驗(yàn)場景,玩家的操作輸入和游戲的反饋輸出至關(guān)重要,對(duì)于操控模式的選擇,需要在一開始的時(shí)候就根據(jù)游戲的核心玩法來決定。此時(shí)此景,由于作者君沉迷《Dreadnought》,當(dāng)然是選擇抄他一波啦……
首先在unity里制作這樣的一個(gè)場景,注意一點(diǎn)這里我把飛船模型放到了控制器下的Avatar子對(duì)象下,這樣可以在控制器處理位移的時(shí)候?qū)︼w船進(jìn)行一些其他的操作。
?
然后編寫控制腳本:
?
這里先用最簡單的方式實(shí)現(xiàn)基本的效果,通過Rotate和Translate實(shí)現(xiàn)了最簡單的操作,UpDown是在Input中添加的軸向操作,參考Horizontal設(shè)置,鍵位改為shift和空格鍵就行。avatar部分是為了模擬Roll和Pitch旋轉(zhuǎn),提升表現(xiàn)力。效果如下:
?
可以看到基本的效果已經(jīng)出來了。當(dāng)然,此處只是粗略的模擬,還有很多坑等著填,比如飛船操控的阻尼感,現(xiàn)在開起來就像紙片,飛船位移的碰撞處理,引擎的效果,等等,接下來我們一一來填。
首先改用物理的方式來移動(dòng),作者一開始為了真實(shí)模擬飛船采用了Rigidbody.AddForce的方式來做,好處是可以比較真實(shí)的模擬飛船的力,然后就掉坑里了,各種受力點(diǎn),物理材質(zhì),力矩調(diào)整,十分的麻煩,嘛……又不是做真實(shí)模擬,所以后來直接改Rigidbody.MovePosition好了,加速和減速分別用了兩個(gè)值,因?yàn)闇p速度很可能高于加速度,核心代碼如下:
?
然后將面板參數(shù)調(diào)整到合適的手感:
?
這樣就得到了進(jìn)一步改進(jìn)的飛船控制,手機(jī)靚號(hào)買賣手感已經(jīng)接近于《Dreadnought》的操控,順帶我還摳了個(gè)引擎火焰效果放上去,根據(jù)操作進(jìn)行反饋,下面是最終效果:
簡單的AI控制
由于只要提供三軸的控制,我們可以很容易的實(shí)現(xiàn)飛船的AI,這里我簡單寫了個(gè)判別邏輯計(jì)算輸入的三軸,然后在fixedupdate中調(diào)用OnMove方法:
?
這里是跟隨的效果,還湊合。
?
以上就是本篇飛船控制的內(nèi)容,由于篇幅有限,不再對(duì)更復(fù)雜的飛船控制展開講解,大家可以去玩玩KSP進(jìn)行親身體驗(yàn)XD,下一篇講下常見的飛船武器,大艦就要配巨炮,億萬炮塔,億萬榮光!
總結(jié)
以上是生活随笔為你收集整理的用unity制作简单的太空游戏(1):简单飞船控制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用 Unity 探究 2D 游戏的打击感
- 下一篇: Unity Gamma校正转为线性空间