版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
---文檔均為word文檔,下載后可直接編輯使用亦可打印---摘要隨著時代向前推進,互聯(lián)網的信息技術也發(fā)生了日益精進,人們的日常生活中娛樂所占用的時間相比以前也漸漸提高。其中游戲業(yè)以驚人的速度發(fā)展,各個年齡階層的人們都對游戲有不同程度的需求。而這當中VR游戲又是游戲業(yè)中的尖端技術,這類游戲不僅能讓玩家體驗到仿真的交互,而且還可以做到模擬現實、身臨其境的效果,因而受到大量的游戲玩家的喜愛。Unity3D是目前市場上最熱門的一款游戲開發(fā)引擎之一,它易于上手,開發(fā)便捷,正是學生初步接觸游戲開發(fā)時的不二之選。本項目是一款基于VR設備的籃球體育類游戲,在使用Unity3D游戲引擎進行開發(fā)的基礎上,也結合了SteamVR接口的運用。區(qū)別于電腦上、手機上的籃球游戲,使用VR設備進行游玩的籃球游戲除了在體驗游戲過程中達到減壓的目的,同時身體的隨著游戲活動也能給人們帶來一定鍛煉效果?,F在社會上的人們,無論是學生還是成年人,在空閑時選擇的游戲通常都是在電腦前,手機前進行操作,久而久之也會由于缺乏運動而帶來一些不好的影響,而VR體育類游戲能很好地把游戲和鍛煉結合在一起。本文內容主要描述了該游戲的開發(fā)經驗,即該游戲的設計與實現以及游戲功能測試等總體的VR游戲開發(fā)流程。為后續(xù)想要開發(fā)同類游戲的開發(fā)者提供一些借鑒與參考。關鍵詞:Unity3DSteamVR虛擬現實計算機仿真
AbstractAsthetimesmoveforward,theinformationtechnologyoftheInternethasalsobecomeincreasinglysophisticated,andthetimetakenforentertainmentinpeople'sdailyliveshasgraduallyincreasedcomparedtobefore.Thegameindustryisdevelopingatanalarmingrate,andpeopleofallageshavevaryingdegreesofdemandforgames.Amongthem,VRgamesarealsocutting-edgetechnologiesinthegameindustry.Thesegamesnotonlyallowplayerstoexperiencesimulatedinteraction,butalsocansimulatetherealityandimmersiveeffects,sotheyarelovedbyalargenumberofgamers..Unity3Disoneofthemostpopulargamedevelopmentenginesonthemarket.Itiseasytogetstartedandconvenienttodevelop.Itisexactlythefirstchoiceforstudentswhentheyareinitiallyexposedtogamedevelopment.ThisprojectisabasketballsportsgamebasedonVRequipment.BasedonthedevelopmentusingtheUnity3Dgameengine,italsocombinestheuseoftheSteamVRinterface.Differentfrombasketballgamesoncomputersandmobilephones,inadditiontothepurposeofdecompressioninthegameofusingVRdevicestoplaybasketballgames,thephysicalactivityofthegamecanalsobringcertainexerciseeffectstopeople.Peopleinthesociety,whetherstudentsoradults,usuallychoosegamesinfrontofcomputersandmobilephoneswhentheyarefree.Overtime,theywillalsobringsomebadeffectsduetolackofexercise.VRsportsGamescanbeagoodcombinationofgamesandexercise.Thecontentofthisarticlemainlydescribesthedevelopmentexperienceofthegame,thatis,thedesignandimplementationofthegameandtheoverallVRgamedevelopmentprocesssuchasgamefunctiontesting.Providesomereferenceandreferenceforsubsequentdeveloperswhowanttodevelopsimilargames.Keywords:Unity3DSteamVRVirtualRealityComputerSimulation
目錄緒論選題的目的和意義隨著計算機科學技術的飛速發(fā)展,VR游戲也來到了大眾的面前大眾。玩家們對于游戲的要求日益增長,比起以前來更加追求真實的感官體驗。而VR游戲在這方面達到的效果比其他平臺上的效果更為顯著。它的仿真度高,體驗感強,能讓用戶感覺更加融入游戲與享受游戲,在VR游戲開發(fā)逐漸成為熱潮的今天,用Unity3D做一款VR游戲可謂是趕上了時代的潮流。Unity3D作為當下最熱門的游戲開發(fā)引擎之一,它的實用性也是一流。Unity3D上手難度低,開發(fā)速度快,開發(fā)成本低,逐漸吸引越來越多的人使用它進行游戲開發(fā)。加上游戲開發(fā)工作者市場尚未飽和,在游戲領域里Unity3D游戲開發(fā)的人才依然受到各大公司青睞。高薪的工作以及樂觀的前景,也使得越來越多人加入了Unity3D游戲開發(fā)的熱潮當中。目前市場上的虛擬現實游戲內容較為單一,其中大部分都為第一人稱射擊,雖說VR技術走在時代前沿,但要說與傳統(tǒng)游戲的競爭其實還力有未逮。而且一般的虛擬現實設備價格都較為昂貴,而且就實際效果而言還不夠完善,設備不夠便捷,同水平游戲開發(fā)難度比普通電腦端、手機端大。因此VR游戲在現階段仍然沒有較好的普及到所有地區(qū),通常而言只有少數發(fā)達區(qū)域會有VR游戲體驗館,而即使是那些地方受眾也不算多。因此我也希望本文能夠給后續(xù)希望致力于豐富VR游戲內容的游戲開發(fā)者們一些參考REF_Ref3572\r\h[4]。國內外研究現狀就游戲本身的發(fā)展而言,從最早的文字MUD游戲到2D游戲,再到3D游戲,游戲畫面和技術都在不斷進步,游戲的擬真度和代入感也隨之越來越強。而到了VR游戲這一步,比起以往可以更深刻直觀的體驗游戲的世界。虛擬現實的概念早在二十世紀六十年代已經存在,但是那時候的虛擬現實技術并非用在游戲上面,到了現代的硬件設備足以支持以后,才由shenx提出了第一個可實用化模型,并且由后來的\t"/item/VR%E6%B8%B8%E6%88%8F/_blank"Oculus開發(fā)人員、shenx、以及著名的\t"/item/VR%E6%B8%B8%E6%88%8F/_blank"吃豆人開發(fā)者巖谷徹等人完成,最后終于在2016年迎來了vr游戲爆發(fā)式發(fā)展。到了今天,已經出現了不下幾十款游戲發(fā)布了支持OculusRift的版本,其中包括但不限于恐怖、射擊和模擬生存類游戲,例如以太空遨游為題材的游戲《BlueMarble》,就能讓玩家能夠在喜歡的音樂下,自由自在地漂浮于地球和月亮之間,感受那廣闊而神秘的宇宙;而恐怖冒險游戲《TheUnderworld》則需要玩家一邊探索陰森的地牢,一邊躲避怪物的追擊。而隨時會出現的怪物會嚇得玩家驚慌失措,虛擬現實給玩家?guī)淼母惺芨亲尶植乐笖导ぴ?。雖然OculusRift如今推出的仍是開發(fā)版,但現有的游戲資源也已經不在少數,足夠讓玩家超前體驗到虛擬現實游戲的魅力REF_Ref3827\r\h[9]。除了OculusRift之外,三星的GearVR、谷歌的廉價虛擬現實設備Cardboard、索尼的PS4虛擬現實眼鏡項目“墨菲斯計劃”以及我們中國虛擬現實游戲頭盔3glasses等等各種虛擬現實設備均相繼登場,也預示著越來越多行業(yè)巨頭開始涉足到這個領域。不過,僅從目前的情況來看,虛擬現實技術的表現仍然沒有達到完美的水平,實際應用過程中出現的各種問題仍然是不可避免的存在。論文組織結構?本篇文章從游戲的策劃制作,后期的修改,以及論文的編寫,查找了各種VR游戲開發(fā)資料,到最后完成時已經過了半年有余。這篇文章當中具體介紹游戲的制作開發(fā)步驟,從游戲的系統(tǒng)功能設計到代碼的編寫都有論述。論文分為六章,各章節(jié)安排如下:?第一部分:緒論,主要闡述了該游戲制作的目的和意義、國內外VR游戲發(fā)展的狀況以及本篇文章的大概介紹;?第二部分:介紹了游戲引擎Unity3D,以及游戲中運用到的其他工具;?第三部分:詳細介紹游戲的各個模塊的制作過程,清晰明確游戲內部關系,采用由下到上的順序層層拆析步驟;第四部分:運行游戲進行測試,打包封裝;??第五部分:總結與感想。
開發(fā)工具介紹Unity3D游戲引擎Unity3D軟件介紹Unity3D是一款由UnityTechnologies開發(fā)的一個讓玩家輕松創(chuàng)建諸如\t"/item/Unity3D/_blank"三維視頻游戲、建筑可視化、實時\t"/item/Unity3D/_blank"三維動畫等各種類型互動內容的多平臺的綜合型游戲開發(fā)引擎,可謂是一個全面整合的專業(yè)\t"/item/Unity3D/_blank"游戲引擎。Unity類似于Director,Blendergameengine,Virtools或TorqueGameBuilder等利用交互的圖型化\t"/item/Unity3D/_blank"開發(fā)環(huán)境為首要方式的軟件。它的編輯器可運行在Windows、Linux(目前僅支持Ubuntu和Centos發(fā)行版)、MacOSX下,也可發(fā)布游戲至\t"/item/Unity3D/_blank"Windows、\t"/item/Unity3D/_blank"Mac、\t"/item/Unity3D/_blank"Wii、\t"/item/Unity3D/_blank"iPhone、\t"/item/Unity3D/_blank"WebGL(需要\t"/item/Unity3D/_blank"HTML5)、Windowsphone8和Android等各個平臺。也可以利用Unitywebplayer\t"/item/Unity3D/_blank"插件來發(fā)布網頁游戲,同時支持Mac和Windows的網頁瀏覽。它的\t"/item/Unity3D/_blank"網頁播放器也被Mac所支持。通常而言平臺之間的差別會影響到產品的開發(fā)速度和進度,因此很多開發(fā)者都要在這上面花費大量的時間、資源,而Unity3D則能夠在近10種主流平臺之間完美移植。同時Unity3D提供的操作界面也能夠同時完美地在Windows和MacOS下部署。這款軟件自帶的五個工程視圖框架能夠很好地幫助游戲開發(fā)者們分類游戲中的對象及隨時觀察制作游戲的進程。其中Scene視圖主要存放游戲中模型資源,Project視圖主要存放游戲中的資源文件,Hierarchy視圖主要放置游戲場景中具體的游戲對象,Inspector視圖主要用來描述游戲資源的信息,Game視圖是用來觀察已經完成的游戲的運行成果。Unity3D還為我們提供了多種腳本語言編譯的常用環(huán)境,用戶可以根據需求將默認的編譯環(huán)境做出調整。Unity3D支持C#、javascript、boo三種腳本語言REF_Ref349\r\h[1]。SteamVR開發(fā)套件Unity3D支持使用SteamVR插件。SteamVR開發(fā)套件包含一個頭戴式顯示器、左手右手各一個的手持控制器、一個用于空間內追蹤顯示器和手持控制器的定位系統(tǒng)。戴上頭戴式顯示器在房間內走動,定位系統(tǒng)即可把位置和方向捕捉到從而反饋給電腦,其精度準確到微米單位。而左右手各一個的手持控制器上有高分辨率觸摸板,以及各種扳機,用于觸發(fā)游戲內的各種功能,實現玩家和游戲世界的互動。而定位系統(tǒng)由兩個定位器(即雙定位器)組成,將雙定位器分別放置于房間的對角位置上,即可精準進行定位。HTCViveHTCVive是HTC與Valve聯(lián)合開發(fā)的一款虛擬現實頭戴式顯示器產品,可和SteamVR聯(lián)合開發(fā)虛擬現實游戲。該頭戴式顯示器有著單眼有效分辨率1200*1080,雙眼合并分辨率2160*1200的超高分辨率。這個分辨率使畫面的顆粒感降到極低,玩家基本感覺不到紗門效應。畫面刷新率為90Hz,延遲約為22ms,實際體驗幾乎沒有延遲。當然這當中也包括兩個手持控制器。HTCViveVR設備被用于各個方面,例如建筑、醫(yī)療、教學等各個領域都有在虛擬現實中進行過應用的開發(fā)REF_Ref2083\r\h[2]。SteamVR插件利用SteamVR插件進行游戲開發(fā)還需要將SteamVR開發(fā)插件中所包含的CameraRig,SteamVR和StatusPrefab導入場景,以便Unity3D可以識別VR設備。CameraRig表示個人整個活動的范圍。子物體有一個攝像頭,一個耳機和一個頭盔,包括左右手柄。在Unity3D中直接導入此預設并調整變換組件的比例,使其成為場景中人員的你所需要的適當百分比。該系統(tǒng)繼承了LaserPoint的LaserPointer,通過添加LaserCubeCollider類即可使手柄發(fā)出的筆直激光與VR一起操作REF_Ref3984\r\h[13]。GUI(圖形用戶界面)本文主要使用NGUI和UGUI進行UI界面的開發(fā),GUI是圖形用戶界面的英文簡寫。Unity的GUI系統(tǒng)被稱作UnityGUI,UnityGUI能使你非常快捷簡便的添加功能齊備且種類繁多的界面元素,使你只需要一次性寫出很少量的代碼就能同時完成創(chuàng)建一個GUI界面元素實例,并定位實例在屏幕的位置和描述界面元素被激活時所要執(zhí)行的腳本三種工作。通過在GUI控件的創(chuàng)建操作中同時包括實例化,定位和功能定義。UGUI是Unity內置的,NGUI則是一款為Unity游戲引擎開發(fā)的工具功能擴展的UI插件,它也能夠為開發(fā)者提供方便快捷的UI設計方法,降低UI設計成本,加快設計游戲的速度,從而達到加快游戲開發(fā)速度。3DsMax軟件3Dsmax是discreet公司開發(fā)的一款基于PC操作系統(tǒng)的三維動畫渲染和三維對象制作軟件,是各大游戲開發(fā)商最常用建模工具之一。其前身是基于DOS操作系統(tǒng)的3DStudio軟件。軟件最開始被運用于電腦游戲中制作動畫,而后更進一步用在于參與影視片中的特效制作。本游戲中的模型除了少數簡單的形狀使用Unity自帶的模型建立,其余均使用3DsMax來建模。但是可能由于版本以及一些未知錯誤,在模型導入過程中丟失了不少素材,但是成功導入的素材也足夠進行游戲開發(fā),因此并沒有深入了解導致3DsMax和Unity3D中素材不兼容的錯誤發(fā)生于哪里。AdobePhotoshopAdobePhotoshop,簡稱“PS”,是一款圖像處理軟件。Photoshop主要處理數字圖像,進行圖片編輯工作。運用Photoshop上的各種功能,對圖像、圖形、視頻、文字等方面都可以進行操作。Photoshop支持Windows操作系統(tǒng)、Android和MacOS,在圖像處理軟件市場中也算是被使用最多的軟件之一。本游戲中的選關界面以及圖片,均為網絡上尋找素材,然后使用Photoshop進行處理,最后導出為PNG格式圖片,方便導入到Unity3D中成為游戲素材。VisualStudio2019VisualStudio2019,于2018年6月開始開發(fā),于2019年4月2日正式版首發(fā)。該軟件由微軟公司進行開發(fā)。運用它所寫得目標代碼適用于微軟所支持的所有平臺。它是當下最為流行的Windows平臺應用程序的集成開發(fā)環(huán)境。比起VisualStudio2017,VisualStudio2019新增了一鍵清除代碼功能,以及加入了全新的AI支持。此外,還同時引入了實時共享功能。VisualStudio201也優(yōu)化了Debug功能,比起以前的版本來得都要更加高效和快捷。
游戲設計場景設計本游戲場景主要為游戲開始界面和游戲進行界面。游戲開始界面使用網絡中尋找的圖片素材,運用Photoshop進行處理后結合成開始界面和選關界面的素材。游戲進行界面主要是一個籃球場,以及籃球場內的東西,比如地板,籃筐,籃球架,墻壁,籃球場外圍鐵絲網。該部分主要使用3DSMax進行建模。場景的制作由于使用3DSMax所建造的模型較多,在此只舉例說明籃球架的制作。首先上網找到籃球架的樣子,并查找它的規(guī)格尺寸數據,然后在建模時根據實際情況進行微調數據比例。這里從籃球架的底部開始。如圖3-1所示。圖3-1籃球架的底部樣條線先用樣條線畫出大概形狀,然后再調整點的位置,并給轉角的點圓角一下,讓它過渡顯得自然一些,然后給樣條線擠出100cm,最后再調整一下整體的比例另一個底部也是同樣的做法,先畫樣條線,再擠出,然后調整比例。最后成品如圖3-2所示。圖3-2籃球架底部完成圖支架的制作由3個長方體構成,先給它們擺好位置,如圖3-3所示。圖3-3籃球架支架初始圖然后對上面兩個長方體轉為可編輯多邊形,同過過調整它們的頂點,效果如圖3-4所示。圖3-4編輯后形狀然后下面的長方體通過布爾拾取斜著的長方體,讓兩個長方體有一個平滑的切面,效果如圖3-5所示:圖3-5籃球架支架下半部分然后進行籃板的制作?;@板的制作根據網絡上的數據以及比例做一個長方體,然后給它上面兩個的轉角邊進行切角,讓它變得圓滑一點。同樣復制一個長方體后把這個長方體給它循環(huán)兩條邊,再刪掉多余的面,給邊界封口后,調整它的大小,使其成飛一個包裹住籃板下面兩個角的L行的防撞體。同樣給這兩個東西的轉角邊進行一個切角。效果如圖3-6所示。圖3-6籃球架籃板其他支架同樣是用樣條線畫出大概形狀,然后擠出,調整點的位置和整體的比例。效果如圖3-7所示。圖3-7籃球架次要支架然后用樣條線畫出下面的形狀,然后打開渲染,把厚度調成3cm得到效果如圖3-8所示。圖3-8籃球支架最終形狀最后還需要做一個籃筐。用兩個長方體和一個圓環(huán)制作,把長方體轉為可編輯多邊形后調整它的點,然后給轉角邊做切角。然后再做一個圓環(huán),即可完成籃筐。效果如圖3-9所示。圖3-9籃框模型將上述建好的模型進行組合,最終的到一個完整的籃球架,效果如圖3-10所示。圖3-10完整籃球架開始界面進入游戲后的第一個界面。由Photoshop處理完素材后制作而成。如圖3-11所示。此界面在開始游戲按鈕處添加了按鈕Button,并把進入到選關頁面的代碼放入了Button當中。代碼內容如下。using
System.Collections;
using
System.Collections.Generic;
using
UnityEngine;
using
UnityEngine.Events;
using
UnityEngine.SceneManagement;
using
UnityEngine.UI;
public
class
startbutton
:
MonoBehaviour
{
public
GameObject
startbtn;
//
Start
is
called
before
the
first
frame
update
void
Start()
{
startbtn.GetComponent<Button>().onClick.AddListener(onClick);
}
void
onClick()
{
Debug.Log("button");
SceneManager.LoadScene(1);
}
void
Update()
{
}
}
圖3-11游戲開始界面此部分代碼運用GetComponent<>()找到開始游戲按鈕內的Button,并且在玩家使用激光觸發(fā)該按鈕后執(zhí)行切換場景到選關場景,該部分由SceneManager.LoadScene()實現。選關界面首先把美術素材進行拼貼,做好選關板塊后給每個關卡圖片都加上Button按鈕,并編寫切換Scene代碼達到切換關卡的效果。選關界面如圖3-12所示。圖3-12游戲選關界面選關部分的代碼與開始界面的代碼較為類似,即使用GetComponent<>()找到6個關卡按鈕,然后根據所選擇的關卡進行Scene切換,代碼如下:using
System.Collections;
using
System.Collections.Generic;
using
UnityEngine;
using
UnityEngine.SceneManagement;
using
UnityEngine.UI;
public
class
buttonguan1
:
MonoBehaviour
{
public
GameObject
xuanguantbtnone;
public
GameObject
xuanguantbtntwo;
public
GameObject
xuanguantbtnthr;
public
GameObject
xuanguantbtnfou;
public
GameObject
xuanguantbtnfiv;
public
GameObject
xuanguantbtnsix;
//
Start
is
called
before
the
first
frame
update
void
Start()
{
xuanguantbtnone.GetComponent<Button>().onClick.AddListener(onClick1);
xuanguantbtntwo.GetComponent<Button>().onClick.AddListener(onClick2);
xuanguantbtnthr.GetComponent<Button>().onClick.AddListener(onClick3);
xuanguantbtnfou.GetComponent<Button>().onClick.AddListener(onClick4);
xuanguantbtnfiv.GetComponent<Button>().onClick.AddListener(onClick5);
xuanguantbtnsix.GetComponent<Button>().onClick.AddListener(onClick6);
}
void
onClick1()
{
Debug.Log("button1");
SceneManager.LoadScene(2);
}
void
onClick2()
{
Debug.Log("button2");
SceneManager.LoadScene(3);
}
void
onClick3()
{
Debug.Log("button3");
SceneManager.LoadScene(4);
}
void
onClick4()
{
Debug.Log("button4");
SceneManager.LoadScene(5);
}
void
onClick5()
{
Debug.Log("button5");
SceneManager.LoadScene(6);
}
void
onClick6()
{
Debug.Log("button6");
SceneManager.LoadScene(7);
}
//
Update
is
called
once
per
frame
void
Update()
{
}
}
籃球設置在Unity找到建模做好的籃球,給它加上剛體Rigidbody,賦予了它重量以及它的摩擦系數,使它在上升和下降過程中更加接近真實的籃球軌跡。然后給它設置球形碰撞體SphereCollider,此碰撞體默認貼合導入Unity中的籃球模型,但是我們對它的碰撞體進行略微的放大調整,使玩家更加容易抓到球,而且更大的碰撞體對于球對地面或墻壁產生碰撞時視覺效果也會更好。此外,此游戲中的籃球還必須添加彈性才能更加貼近真實的籃球。在SphereCollider球形碰撞體參數內找到Material材質這一欄,添加一個新的材質。然后對新的材質進行參數調整,找到彈性bounciness這一欄,調整參數并進行測試,最終調整到接近現實生活中的籃球即可?;@球碰撞體比籃球模型略大,如圖3-13所示。圖3-13籃球模型及其碰撞體不同關卡的設計倘若游戲單純的進行虛擬現實空間內的投籃運動,那么玩家在進行一定時間的游玩后很快就會厭倦,因此僅僅是還原具有真實感的投籃對于一個游戲來說是不夠的。為了給游戲增加趣味性的同時增加難度,我決定從兩個方面來進行游戲內容的增加。增加球的種類 誠然,作為虛擬現實游戲,真實感是很重要的一部分。但是從一個游戲的角度來想,如果內容跟現實生活中的活動完全一致的話,那么還是過于乏味。因此在設計籃球的同時,我也再設計了幾個其他種類的球。其中只拿冰球來做例子。冰球的外觀如圖3-14所示。冰球在現實生活中并不能作為籃球運動所用的球,但是在游戲世界中我們可以設計出它來??梢韵胂蟊蚺c籃球的區(qū)別,溫度、顏色外觀、重量等各種屬性。其中在Unity3D中最容易實現的就是改變重量和摩擦力。因此我們對冰球的屬性進行設置,使得它重量比籃球大,摩擦力比籃球小。同時,冰球的彈性也應該要比籃球更小,落地時不應該能彈得很高。因此在給冰球添加的新材質Material中,對彈性bounciness的數值需要調得更低,但也不能調得太低,因為倘若一個籃球游戲內一個球落地完全不會彈跳,打板后垂直下落,撞了籃筐也沒有運動軌跡的變化,那還是過于無趣??傊?,就是要把冰球設計成一個彈性比籃球小而摩擦力比藍球大的球類。這樣,在玩家進行冰球的投籃時會發(fā)現冰球的飛行阻力要比籃球大,而打板后回彈的幅度要比籃球小,這樣就需要調整手感后再重新投球,增加了游戲的趣味性。圖3-14冰球的外形設計當然,如果每一關都放置冰球的話這個改動跟沒改沒有任何區(qū)別,因此我們需要讓玩家的投籃手感從普通籃球的手感和冰球的手感之間來回切換,增加了游戲趣味性的同時提高游戲難度。冰球的彈力比籃球更小,通常而言這會使得進球的難度更加大,因此我們把冰球的關卡放在籃球的后面,即第一關放置籃球,第二關放置冰球,第三關又放置籃球。這樣就會使得相鄰兩關的投籃手感需要調整,不至于每關都是接近的手感從而失去了趣味。增加籃筐的變化現實生活中的籃筐當然是不會變化的,但是在游戲設計中我們卻可以對這一點做出改動。前文提到,作為一個游戲,不應該只對現實生活中的事物規(guī)則進行還原,即使虛擬現實游戲,也要有作為游戲特有的趣味才行。因此在本文所介紹的游戲中,我們對籃筐做出了運動軌跡的變化。為了能使籃筐上下運動,使用普通的籃球架顯然是不合適的,因為普通的籃球架進行上下伸縮會顯得尤其怪異,因此我們另外設計一個看起來就可以進行上下移動的籃球架??梢韵胂螅@種籃球架的籃板應該附在一根豎直的柱子上,而后籃板沿著柱子進行垂直運動即可達到效果。但是考慮到只會進行上下移動也還是略感單調,因此我們可以在進行上下移動的同時把左右移動也添加進來,進一步增加游戲難度。為了籃板能左右移動,那么前面所說的籃板沿著豎直的柱子做垂直運動的方案就不可行,因為只有一根垂直的柱子難以進行更大幅度的水平運動,因此綜合兩個條件考慮,可以是籃板附在一根水平的柱子上,如此一來籃板可以在柱子上自由地做水平運動。而豎直運動則靠柱子本身的運動完成。最終設計出的籃球架如圖3-15所示。圖3-15可左右上下移動的籃球架設計如前文所言,這個設計可以讓籃板沿著中間的柱子進行水平運動,而中間的柱子沿著兩邊的支柱進行上下移動即可完成籃板的垂直運動。外形設置好后,再來考慮代碼實現部分。首先進行垂直運動部分的代碼設計。由于籃板的垂直運動是由中間的水平柱子進行上下移動而實現的,因此垂直運動部分的代碼對象應該是水平柱子而不是籃板。先public一個浮點數值speed,設定柱子做垂直運動的速度。根據這個速度進行調整,大約經過多長時間,柱子可以從上端移動到我們想要的最低點,private一個浮點數值timer記錄這個時間。然后private一個布爾值bool為isdown,就是說,當布爾值isdown為真時,表示籃球架正在下降。前文有提到,timer記錄了柱子從上端移動到最低點時所需要的時間。因此,要知道柱子什么時候需要開始往上移動了,我們只需要timer減等于增量時間,當timer等于0時候,代表柱子已經到達我們想要的最下端了。這時候設置布爾值isdown為假,當布爾值isdown為假時,水平柱子則反向進行移動,即網上移動。這時候timer還在繼續(xù)減小。柱子從最下端移動到最上端所需要的時間應該是跟自己從最上端移動到最下端的所需時間是一樣的,即當timer變?yōu)閠imer的相反數時,我們又讓布爾值isdown改為真,讓柱子開始往下移動,這樣就可以實現了水平柱子的垂直往返移動。具體代碼如下。using
System.Collections;
using
System.Collections.Generic;
using
UnityEngine;
public
class
NewBehaviourScript
:
MonoBehaviour
{
public
GameObject
start;
public
float
speed;
private
float
timer
=
2.5f;
private
bool
isdown;
private
float
x;
//
Start
is
called
before
the
first
frame
update
void
Start()
{
isdown
=
true;
}
//
Update
is
called
once
per
frame
void
Update()
{
//if
(transform.position.y
>=
-3.5)
{
//
transform.Translate(0,
-1
*
Time.deltaTime,
0);
//}
//if
(transform.position.y
<=
-5)
//{
//
transform.Translate(0,
1
*
Time.deltaTime,
0);
//}
//Debug.Log(transform.position.y);
if
(isdown==true)
{
x
=
-1;
}
else
if
(isdown==false)
{
x
=
1;
}
if
(timer<0)
{
isdown
=
false;
}
if
(timer<=-2.5f)
{
timer
=
2.5f;
isdown
=
true;
}
transform.Translate(0,
x
*
Time.deltaTime,
0);
timer
-=
Time.deltaTime;
//if
(timer<0)
//{
//
timer
==
3;
//
transform.Translate(0,
1
*
Time.deltaTime,
0);
//}
}
}
設置好了水平柱子的垂直移動后,則繼續(xù)進行籃筐沿水平柱子所作的水平運動。到了這一步,具體的方法跟做垂直移動時的方法大同小異,只是垂直移動改變Y軸坐標,而水平運動則需要改變X軸坐標。因此,我們繼續(xù)設定好水平移動的速度,然后測試在合適的速度下,籃筐從最左端移動到最右端所需要的時間,然后又是根據這個時間進行布爾值的取反,使得籃筐的運動方向發(fā)生改變。值得一提的是,倘若設置的速度使得籃筐從左到右所需的時間跟水平柱子從上到下所需的時間完全一樣的話,那么這個運動軌跡則是毫無變化。容易想象到,籃筐從左上角開始移動,到達右下角時開始反向移動,然后又返回左上角開始往右下角移動,這樣的移動軌跡不是我們想要的,因此籃筐水平移動的合適的速度應該要使得籃筐從左端到達右端的時間跟柱子從上端到達下端的時間不相等。具體的籃筐水平移動代碼如下。using
System.Collections;
using
System.Collections.Generic;
using
UnityEngine;
public
class
NewBehaviourScript1
:
MonoBehaviour
{
public
GameObject
start;
public
float
speed=2.0f;
private
float
timer
=
1.0f;
private
bool
isdown;
private
float
x;
//
Start
is
called
before
the
first
frame
update
void
Start()
{
isdown
=
true;
}
//
Update
is
called
once
per
frame
void
Update()
{
//if
(transform.position.y
>=
-3.5)
{
//
transform.Translate(0,
-1
*
Time.deltaTime,
0);
//}
//if
(transform.position.y
<=
-5)
//{
//
transform.Translate(0,
1
*
Time.deltaTime,
0);
//}
//Debug.Log(transform.position.y);
if
(isdown
==
true)
{
x
=
-1;
}
else
if
(isdown
==
false)
{
x
=
1;
}
if
(timer
<
0)
{
isdown
=
false;
}
if
(timer
<=
-2f)
{
timer
=
2f;
isdown
=
true;
}
transform.Translate(x
*
Time.deltaTime*2,
0,0);
timer
-=
Time.deltaTime;
//if
(timer<0)
//{
//
timer
==
3;
//
transform.Translate(0,
1
*
Time.deltaTime,
0);
//}
}
}
最后,只需要讓游戲的難度循序漸進即可。比如第一第二關籃筐完全不會移動,而第三第四關籃筐會做垂直移動,到了第五第六關,籃筐會同時進行水平運動和垂直運動,且由于兩個運動的運動周期不同,使得籃筐的軌跡變化更加不規(guī)律,游戲難度有所上升。而相鄰的兩關所用的球類不同也進一步的增加了游戲的難度。添加背景音樂及游戲音效由于本游戲中的音樂變化需求較小,因此并不需要運用到代碼的控制。我們在各個游戲界面均添加一個新的游戲對象GameObject,在右側項目欄內找到AddComponent給這個游戲對象添加AudioSource,此控件為音樂控件,在網上找到合適的音樂并下載后,添加到AudioSource中的AudioClip欄中即可,并把此音樂的循環(huán)Loop打開,就不會出現玩家過關時間太長而音樂停止了。音樂的選擇應該要根據關卡的難易度進行調整,比如第一第二關為最簡單的關卡,則可以選擇比較輕快的音樂,第三第四關突然加入籃筐移動的元素,就可以選擇添加令人感到驚訝或者奇妙心情的音樂,到了第五第六關,游戲難度達到了最大,這時候選擇的音樂應該是要比前面的更為激昂。選擇音樂時也要考慮Unity3D的軟件性能,過于高清的音質往往跟軟件不兼容而導入失敗,因此我們可以適當選擇音質中等的音樂文件。游戲的打包與導出到了這一步游戲的設計制作已經基本完成了,最后只需要對游戲進行打包即可。在Unity3D的工具欄里找到File選項,選擇后找到BuildSettings并點擊,而后會出現BuildSettings窗口,窗口如圖3-16所示。圖3-16BuildSettings窗口在此窗口中ScenesInBuild欄點擊AddOpenScenes按順序加入所需要加載的場景,我這里添加了開始界面,選關界面以及后面的六個關卡。選擇好之后導出的游戲才可以進行場景的切換。而后Platform選擇需要發(fā)布的平臺,即導出模式,這流我們選擇PC端,然后點擊Build就開始打包了,等待打包結束即可。
游戲測試找到打包好后的文件,點擊exe運行,進入到游戲開始界面。開始界面正常運作,如圖4-1所示。圖4-1游戲運行開始界面由于此游戲為VR游戲,僅靠鼠標和鍵盤難以觸及懸浮在臉上的開始游戲按鈕,到了這時候就需要使用VR設備來進行游玩了。經過測試,游戲正常運作,使用VR設備可進行游玩,如圖4-2所示。圖4-2使用VR設備進行投籃
總結從游戲策劃到開始建模,再到資源整合代碼編寫,然后游戲測試游戲調整,最后到編寫畢業(yè)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026山東事業(yè)單位統(tǒng)考煙臺蓬萊區(qū)事業(yè)單位招聘24人參考考試題庫及答案解析
- 工地隔離用房管理制度(3篇)
- 無錫鍋爐房管理制度(3篇)
- 煤粉儲存安全管理制度(3篇)
- 疫情學校出入登記管理制度(3篇)
- 街舞是什么機構管理制度(3篇)
- 考試題庫(消防應急救援裝備)消防設施維護保養(yǎng)制度制定試題
- 醫(yī)療查對制度復習試題有答案
- 會議后續(xù)跟蹤與效果評估制度
- 湖南省衡陽市衡南縣 2025-2026學年九年級上學期期末考試道德與法治試題(含答案)
- hsk標準教程教學課件
- 醫(yī)保年度工作匯報
- 井下充填安全知識培訓課件
- 構網型電化學儲能系統(tǒng)接入配電網技術規(guī)定(征求意見稿)
- 2025反無人機系統(tǒng)行業(yè)市場空間、產業(yè)鏈及競爭格局分析報告
- 數字技術賦能紅色文化傳承:機理、困境與路徑
- 水電站安全管理體系構建
- 2025財務經理年終總結
- TCACM 1463-2023 糖尿病前期治未病干預指南
- 江蘇省淮安市2024-2025學年七年級上學期1月期末道德與法治
- 癌癥患者生活質量量表EORTC-QLQ-C30
評論
0/150
提交評論