欧美成人午夜免费全部完,亚洲午夜福利精品久久,а√最新版在线天堂,另类亚洲综合区图片小说区,亚洲欧美日韩精品色xxx

解析如何使用Unity3D開發(fā)一款VR彈球游戲

2018-02-08 13:28:38 3590瀏覽

開發(fā)VR游戲首先要選擇一個(gè)合適的平臺(tái)。目前可供選擇的平臺(tái)不多,Google的Cardboard和OculusRift等頭戴式顯示設(shè)備都是可供選擇的對(duì)象。但Cardboard的價(jià)格低廉,市場占有率更高,用它來作為移動(dòng)端進(jìn)行開發(fā)更為劃算一些。當(dāng)然,選擇其一并不代表我們舍棄了其它開發(fā)平臺(tái)的優(yōu)點(diǎn),同時(shí)Unity3D游戲引擎擁有跨平臺(tái)的特性,對(duì)項(xiàng)目經(jīng)過簡單的修改便可將VR項(xiàng)目移植到PC或者其他平臺(tái)中。



使用Unity3D開發(fā)VR游戲十分便捷:

首先在于如場景、模型等豐富的素材資源,開發(fā)者們無需再為美工建模這些相對(duì)耗時(shí)間的工作而困擾。

其次在于便捷的引擎支持,OculusRift、GoogleCardboard和HTCVive等產(chǎn)品均提供了對(duì)于Unity3D引擎的支持,只需將官方提供的插件包導(dǎo)入到目標(biāo)項(xiàng)目中,便可使用相應(yīng)的VR產(chǎn)品了。

隨著Unity5.3版本的發(fā)布,Unity增強(qiáng)了對(duì)VR開發(fā)的兼容性,在項(xiàng)目設(shè)置中我們可以直接選擇使用Oculus或是OpenVR進(jìn)行開發(fā)。

下面就以一款簡單的VR彈球游戲?yàn)槔?,談?wù)勈褂肬nity3D游戲引擎開發(fā)VR游戲的流程。

先說說VR彈球游戲的規(guī)則。和傳統(tǒng)的彈球游戲一樣,在VR彈球游戲中有兩個(gè)玩家,一個(gè)是用戶,另一個(gè)則是AI。玩家分別控制己方的一塊彈球板,當(dāng)彈球碰到彈球板的時(shí)候,球則會(huì)反彈回去。如果一方?jīng)]有成功反彈彈球的話則該方失敗。

那么對(duì)于這款VR彈球游戲,具體應(yīng)該怎樣開發(fā)呢?

在確定了開發(fā)平臺(tái)之后,我們需要在Unity中導(dǎo)入相關(guān)的SDK。如選用OculusRift則導(dǎo)入OculusRift的SDK,選用GoogleCardboard則導(dǎo)入Cardboard的SDK。這些SDK的使用方法大同小異,每個(gè)SDK中均包含著一個(gè)角色控制器,而對(duì)角色控制器的使用也近乎相同。我們將相應(yīng)的SDK導(dǎo)入U(xiǎn)nity,隨后將SDK中的角色控制器拖放到游戲場景中,進(jìn)行測試。在使用OculusRift等設(shè)備進(jìn)行調(diào)試的時(shí)候,往往需要將OculusRift配置好,連接電腦才能調(diào)試。而Cardboard的調(diào)試,可以使用Alt鍵+拖動(dòng)鼠標(biāo)來模擬用戶頭部的晃動(dòng)。

在正式開發(fā)游戲之前,采用一個(gè)良好的目錄結(jié)構(gòu)是項(xiàng)目管理的有效方式。這個(gè)項(xiàng)目中,在根目錄下有如下的目錄:Model(存放OBJ或是FBX格式的模型)、Texture(存放模型的貼圖,PNG等格式的圖片)、Material(存放通過貼圖制作的Unity中的PBR貼圖)、Prefab(存放Unity預(yù)設(shè)物體)、Scene(存放游戲的場景文件)。在這種目錄結(jié)構(gòu)下,我們還可以對(duì)Model、Texture、Prefab和Material等目錄進(jìn)行細(xì)分,在一些大的項(xiàng)目中擁有大量的模型的時(shí)候,通過建立Environment、Building和Player等目錄以細(xì)化Model目錄結(jié)構(gòu),以方便對(duì)于模型的尋找,加快開發(fā)速度。在對(duì)目錄中的文件命名的時(shí)候,模型文件以M_模型名稱進(jìn)行命名,Material以Mat_貼圖名稱進(jìn)行命名也不失為一種良好的習(xí)慣。

開發(fā)游戲的第一步便是搭建場景。在該VR游戲中,我們選用的風(fēng)格是對(duì)程序員友好的像素3D風(fēng)格。像素3D建模較為簡單,所有的模型都是我們團(tuán)隊(duì)中的程序員制作的。在像素建模的軟件選用方面,我們使用了MagicaVoxel這款免費(fèi)的軟件。MagicaVoxel的界面和操作十分簡單,即使沒有基礎(chǔ),跟著網(wǎng)上的教程半個(gè)小時(shí)左右就能入門,并做出自己心儀的3D模型。在建模階段完成之后,將模型和材質(zhì)等資源按照約定的目錄結(jié)構(gòu)導(dǎo)入U(xiǎn)nity3D中。

在搭建場景時(shí),先將FBX或是OBJ格式的模型拖動(dòng)到Scene(場景)面板中,如果在建模的時(shí)候使用的單位和Unity默認(rèn)單位(米)不同的話,便需要進(jìn)行相應(yīng)的縮放。通常如果是場景類的模型如Terrain(地形),我們選擇將模型的Position屬性設(shè)為(0,0,0),這樣將會(huì)對(duì)后面的腳本編寫和場景的搭建工作剩下時(shí)間。在簡單地對(duì)模型進(jìn)行拖動(dòng)之后,得到了如下效果的游戲場景。

此時(shí)搭建好的場景是靜態(tài)的,無法進(jìn)行互動(dòng),我們需要進(jìn)行相應(yīng)腳本的編寫,以實(shí)現(xiàn)游戲的可操控性。如下圖所示,我們需要編寫腳本的地方有3個(gè),一個(gè)是藍(lán)色的擊球平臺(tái),一個(gè)是粉色的擊球平臺(tái),一個(gè)是藍(lán)色的球。

在這里,我們選擇使用簡單的AI來控制粉色的擊球平臺(tái),玩家控制藍(lán)色的擊球平臺(tái)。從這些物體我們可以引申出以下三個(gè)問題:

如何移動(dòng)玩家控制一方的擊球平臺(tái);

如何控制電腦一方的擊球平臺(tái);

如何對(duì)彈球進(jìn)行反彈。

首先是如何移動(dòng)玩家的擊球平臺(tái)。要解決這個(gè)問題,就需要確定一個(gè)輸入方式。在VR游戲中有傳統(tǒng)游戲中的使用手柄、鍵鼠輸入,同時(shí)還有HTCVive和OculusRift的動(dòng)作捕捉。但我們決定使用的輸入方式是GazeInput(凝視輸入)。凝視輸入的原理是通過在角色控制器的攝像頭射出一條射線,該射線代表玩家的視線,射線碰撞到的位置便是玩家目前凝視的位置。

在實(shí)現(xiàn)方面,需要在場景中新建一個(gè)Quad物體,與場景中的地面垂直,其寬度為玩家擊球平臺(tái)可以移動(dòng)的范圍,其高度可以設(shè)置為1000甚至更大。最后將該Quad的MeshRenderer關(guān)閉,并調(diào)整其位置到玩家的擊球平臺(tái)的位置。然后,我們需要對(duì)VR中的SDK中的角色控制器進(jìn)行相應(yīng)的修改,由于該彈球游戲中采用的是固定視角,因此我們需要?jiǎng)h除SDK中的角色控制器的RigidBody等組件,僅需要能跟隨玩家頭部運(yùn)動(dòng)的Camera即可。找到角色控制器中的Camera,在其上添加如下腳本RayCaster.cs:

floathitPos;

voidFixedUpdate()

{

Rayray=newRay(transform.position,transform.forward);

RaycastHithit;

if(Physics.Raycast(transform.position,transform.forward,outhit))

{

if(hit.collider.gameObject.tag=="Quad")

{

hitPos=hit.point.x;

}

}

}

publicfloatgetHisPos()

{

returnhitPos;

}

在上述腳本中,定義了一個(gè)射線和射線投影碰撞。當(dāng)射線投影碰撞的對(duì)象是Quad的平面的時(shí)候獲取碰撞點(diǎn)的x坐標(biāo)(因只需移動(dòng)彈球平臺(tái)的X坐標(biāo),所以只獲取碰撞點(diǎn)的X坐標(biāo)),并保存到hitPos變量中,以便其他腳本調(diào)用。

接著在Hierarchy(階層面板中)找到玩家控制的彈球平臺(tái),在其上編寫腳本playerMovement.cs。

GameObjectmainCamera;

RayCasterrc;

floatthisX;

voidStart()

{

mainCamera=GameObject.FindGameObjectWithTag("MainCamera");

rc=mainCamera.GetComponent();

thisX=this.transform.position.x;

}

voidFixedUpdate()

{

this.transform.position=newVector3(rc.getHisPos()+thisX,this.transform.position.y,this.transform.position.z);

}

在上述腳本中,實(shí)現(xiàn)了通過獲取MainCamera的RayCaster組件的碰撞點(diǎn)坐標(biāo)來相應(yīng)的移動(dòng)彈球平臺(tái)。

至此,通過視線來控制玩家擊球平臺(tái)的功能已經(jīng)完成。對(duì)于電腦控制的擊球平臺(tái),可以通過設(shè)定其平臺(tái)的移動(dòng)速度來決定難度,通過預(yù)測彈球到達(dá)電腦方的位置來決定電腦移動(dòng)平臺(tái)的目標(biāo)點(diǎn)。在如何反彈彈球的問題上,我們使用Unity3D自帶的物理引擎,在彈球物體上增加RigidBody組件,將RigidBody的UseGravity選項(xiàng)取消選擇,同時(shí)將Drag和AngularDrag設(shè)為0和Constraint中的FreezePosition的Y選項(xiàng)勾選上。這樣,在游戲開始的時(shí)候,通過給彈球一個(gè)力來發(fā)球,當(dāng)彈球碰到場景和擊球平臺(tái)的Collider的時(shí)候便會(huì)進(jìn)行相應(yīng)的反彈。至此,上面提出的三個(gè)問題解決完畢。

但以上三個(gè)問題都是顯性的問題,解決完這三個(gè)問題后便可以對(duì)游戲進(jìn)行簡單的操作,并不能完成真正意義上的游戲。因?yàn)樵谟螒蛟O(shè)計(jì)中,還有一些對(duì)象是隱性的,沒有實(shí)際的物體形態(tài)。這些對(duì)象有GameManager(游戲管理器)、StateMachine(狀態(tài)機(jī))和UserInterface(用戶界面即UI)等。

在游戲管理方面,GameManager下面有如下子Manager:AudioManager(負(fù)責(zé)游戲中音效的管理)、GameStatusManager(負(fù)責(zé)游戲的階段狀態(tài)管理)、ScoreManager(負(fù)責(zé)游戲計(jì)分的管理)和UIManager(負(fù)責(zé)游戲UI的管理)等。以GameStatusManager為例,在不同的游戲階段中,可以進(jìn)行的動(dòng)作將會(huì)不同。如在游戲開始之前的準(zhǔn)備階段和游戲結(jié)束階段,彈球平臺(tái)和彈球不可以移動(dòng)。在游戲開始之前的準(zhǔn)備階段,需要對(duì)彈球和擊球平臺(tái)進(jìn)行復(fù)位操作。

通過GameManager進(jìn)行游戲管理來編寫游戲,可以使程序更具有面向?qū)ο蟮奶匦?,?duì)于程序的修改、調(diào)試更為直觀和方便,從而減少BUG出現(xiàn)的幾率。

關(guān)于VR游戲中的UI,大部分Unity開發(fā)者在Unity4.6之后會(huì)傾向于選擇官方的UGUI。在UGUI中,UI的TEXT、Button和Image等組件均是Canvas的子物體時(shí)才能正常工作。Canvas的默認(rèn)渲染模式是以屏幕空間為基準(zhǔn)的,然而在VR模式下,左右眼的視角均在一塊屏幕中渲染,由此會(huì)造成UI在整塊屏幕上只渲染一次而非分別在左右眼的視角分別渲染。因此,我們需要將Canvas的RenderMode(渲染模式)調(diào)整為WorldSpace。這樣,整塊UI畫布便成為了游戲3D世界中的物體,由此可縮放,拖動(dòng)以放置到游戲中相應(yīng)的位置。

至此,整個(gè)游戲制作完畢。但在發(fā)布游戲之前,還需要一些不可或缺的工作,如添加ImageEffect視覺效果,對(duì)游戲進(jìn)行配樂和進(jìn)行游戲的測試等,以此來提升游戲的品質(zhì)。

最后想要了解更多關(guān)于VR/AR發(fā)展前景趨勢,請(qǐng)關(guān)注扣丁學(xué)堂VR培訓(xùn)官網(wǎng)、微信等平臺(tái),扣丁學(xué)堂IT職業(yè)在線學(xué)習(xí)教育平臺(tái)為您提供VR視頻教程學(xué)習(xí)系統(tǒng),通過千鋒扣丁學(xué)堂金牌講師在線錄制的VR/AR在線視頻教程,讓你快速掌握VR/AR從入門到精通開發(fā)實(shí)戰(zhàn)技能。





【關(guān)注微信號(hào)獲取更多的學(xué)習(xí)資料】



查看更多關(guān)于“VR/AR培訓(xùn)資訊的相關(guān)文章>>


標(biāo)簽: VR培訓(xùn) VR視頻教程 VR虛擬現(xiàn)實(shí) VR在線視頻

熱門專區(qū)

暫無熱門資訊

課程推薦

微信
微博
15311698296

全國免費(fèi)咨詢熱線

郵箱:codingke@1000phone.com

官方群:148715490

北京千鋒互聯(lián)科技有限公司版權(quán)所有   北京市海淀區(qū)寶盛北里西區(qū)28號(hào)中關(guān)村智誠科創(chuàng)大廈4層
京ICP備2021002079號(hào)-2   Copyright ? 2017 - 2022
返回頂部 返回頂部