close

東南科技大學 

資訊科技與通訊學系 

九十九年度實務專題報告 

 

題目: 

3D射擊遊戲製作 

 

 年制部別:  四年制大學部          

     級:  年甲班            

     名:荊士庭  黃崇倫  郭文凱  高偉倫

     49617001   49617008

49617015     49617043

指導老師:  陳煥明 老師         

 

中華民國九十九年十二月 


   3D射擊遊戲製作                         東南科技大學資訊科技與通訊學系 99

 


 

學校名稱:東南科技大學 

    別:資訊科技與通訊學系 

題目名稱:3D射擊遊戲製作 

指導老師:陳煥明 老師 

學生學號:49617001 49617008

49617015 49617043

學生姓名:荊士庭  黃崇倫 

郭文凱  高偉倫            

完成年月:中華民國九十九年十二月 

指導老師簽名: 

 

 

 

 

 

 

 

摘要 

 

    目前科技與工業的迅速發展,若能用最少的成本來獲得最高的效益以及最少的時間來做出最好的設計,是任何一個企業所希望的,因此使用虛擬實境來做模擬和驗證是個不錯的辦法。現在的網路線上遊戲有越來越多的玩家加入,不過第一人稱的射擊遊戲也還保有一定的市場,例如Valve公司所推出的Counter-Strike(俗稱CS),在市面上還是很熱門的第一人稱射擊遊戲遊戲。

 

    此專題為3D射擊遊戲製作虛擬實境的開發及應用,首先是定義虛擬實境,並簡介Virtools4.0的虛擬實境之建構、編修、開發,以達到虛擬實境場景的應用。從遊戲的規劃、討論到程式的實作,藉由實作一款遊戲,學習用軟體製作遊戲的方法。除了能完成一款很基本的遊戲以外,本專題的遊戲還會因Virtools4.0這套軟體中的操作設定不同來增減難易度以及增加更多不同的遊戲性。

 

    要做出一個3D射擊遊戲不論是對於有學過或是沒學過程式設計的人來說都是有一定程度的困難,在經過蒐集資料的過程中無意間得知有Virtools4.0這套軟體能夠製作出一款基本的3D射擊遊戲。

 

    關於Virtools的發展由來:隨著網路普及以及電腦遊戲的風行,虛擬實境(VR)的開發與應用也越來越豐富,除了製作電玩遊戲和參觀導覽以外,e-learning、電子商務、網路行銷、訓練模擬等應用發展,同樣是倍受矚目。虛擬實境Virtools,內含多種行為模組,幫助設計人員迅速的開發3D/VR的應用。

 

    Virtools虛擬實境製作軟體的人性化操作介面,能夠幫助設計人員快速上手及縮短開發時間以外,內建的行為模組,只需要以拖曳的方式來套用到物件上,甚至還可利用現有的行為模組來產生一個新的模組,且新的模組可在另外儲存成獨立的檔案,供其他專案或使用者使用。除了行為模組以外,在3D Layout的區域內,可顯示目前正在編輯的場景,能夠及時修改及編輯所有物件的狀況,包括3D物件、線段、攝影機、燈光等等,都可以在這個部份進行位置的移動、縮放、旋轉等效果,並即時顯示出修改成果。

 

    本文內容為3D射擊遊戲製作的過程與應用,第二章式軟體的安裝,第三章是整個程式的設計架構,並在此章節中說明一個遊戲從無到有的演變,第四章則是提出結論。

 

目錄 

摘要----------------------------------------------------------------------------------------------1

 

目錄----------------------------------------------------------------------------------------------2

 

第一章 序論------------------------------------------------------------------------------------3  

 

第二章 程式軟體安裝------------------------------------------------------------------------4

 

第三章 程式操作------------------------------------------------------------------------------8

 

3.1 飛行方向設定-----------------------------------------------------------------------------8

 

3.2 位移與移動限制--------------------------------------------------------------------------8

 

3.3 障礙物的產生與精簡化-----------------------------------------------------------------13

 

3.4 視覺特效與碰撞--------------------------------------------------------------------------18

 

3.5 碰撞特效------------------------------------------------------------------------------------27

 

3.6 遊戲界面設定------------------------------------------------------------------------------37

 

3.7 子彈發射與隕石生命--------------------------------------------------------------------44

 

3.8 遊戲結束與按鈕製作--------------------------------------------------------------------58

 

3.9 遊戲的重新啟動--------------------------------------------------------------------------63

 

3.10 網頁整合----------------------------------------------------------------------------------67

 

第四章 結論------------------------------------------------------------------------------------70

 

遊戲操作與流程圖-----------------------------------------------------------------------------71

 

參考文獻-----------------------------------------------------------------------------------------72

 

第一章 序論 

 

研究動機 

 

    目前科技與工業的迅速發展,若能用最少的成本來獲得最高的效益以及最少的時間

來做出最好的設計,是任何一個企業所希望的,因此使用虛擬實境來做模擬和驗證是個不錯的辦法。

 

    隨著虛擬實境其概念興起及技術的成熟發展,因此可藉由3D電腦繪圖、音效及其它感知的介面來配合電腦和相關軟、硬體所產生之虛擬環境,可讓使用者置身其中並與此擬真環境有互動的關係。

 

    而此技術最初被設計之目的在於提供飛行模擬訓練,其原因為模擬機提供一個安全又經濟的模擬環境來取代高成本的實地訓練環境,例如飛行模擬。因此本文使用Virtools4.0作為虛擬實際場景的開發編輯軟體來設計整個3D射擊遊戲。由於虛擬實境可減少不必要的時間和金錢上的浪費,以建立一個3D場景來說,以往的工程師必須在紙上繪圖設計,此方法既費時又無法即時做修改,而修改次數越來越多時又有可能將設計圖搞壞而又得重新繪製,這是很費時間的。

 

    再者,當設計圖完成後如想看見實體,必定得等待一定的時間才會產生出實體並做驗證,這不打緊,若是最後才發現是因設計不良導致得重新來過時,中間過程的時間及金錢不是全都白費了。因此使用虛擬實境模擬的技術是必然的,而我們會使用Virtools4.0之構想,便是從以上所述原因之中所得的答案。

 

第二章 程式軟體安裝

這一章主要是Virtools4.0的安裝步驟及過程,詳細說明如下:

 

1. 首先放入 Virtools 的安裝光碟,接著跳出的安裝畫面,選擇「Virtools」即進行安裝 

 wdpic00001.jpg

 2. 點選後,出現 Virtools 的安裝歡迎畫面,告知我們安裝程式及將安裝 Virtools 於電腦中,接著按「Next」

 wdpic00002.jpg

3. 接下來看到的是一份軟體授權聲明,它規範了 Virtools 授權給使用者的詳細內容,按下「Yes」

 wdpic00003.jpg

4. 畫面接著出現的是 Virtools 的安裝資訊,包含了軟體與硬體的基本安裝需求,若不清楚自己設備是否可安裝,請仔細閱讀,按下「Next」

 wdpic00004.jpg

5. 在 User Name 欄位內填入自己的姓名,Company Name 填入自己公司的名稱,Serial Number 填入正版的序號。填完後按下「Next」

 wdpic00005.jpg

6. 接著出現的畫面可以選擇自己想安裝的路徑,按下「Next」

 wdpic00006.jpg

 7. 接著出現的畫面是問我們要安裝哪些元件,我們建議安裝所有的元件,尤其是Documentation MiniSite 元件,接著按下「Next」

 wdpic00007.jpg

8. 接著出現的畫面,還有要求我們輸入 Virtools 在程式集裡的安裝名稱,建議使用預設的就好,再來按下「Next」,此時會開始安裝 Virtools 軟體,直到畫面出現如下圖的視窗,代表程式安裝成功,按下「Finish」即可完成安裝程式

 wdpic00008.jpg

第三章 程式操作 

3.1 飛行方向設定 

01.Plan Axial ScriptSet Euler Orientation

 wdpic00009.jpg

Y軸轉向180 Z軸方向飛行 

 wdpic00010.jpg

為了使飛機能在位移或轉動後 都可回復平穩 故將Set Euler Orientation設為迴圈 

 wdpic00011.jpg

 3.2 位移與移動限制

3.2.1 飛機基本位移 

02.Plane Move

Switch On Key模組能夠在使用者下達指令時,不斷發送訊息,也就是當安下指令按鍵時,該模組會往相應的出口持續發送出訊息。

 wdpic00012.jpg

 4格欄未內依序輸入(up)(down)(left)(right)

wdpic00013.jpg

Translate模組將用來控制飛機上升由於飛機是要往Y軸正向移動來到達上升的效果,所以在Translate VectorY軸欄輸入1讓飛機每次以1個單位移動。

wdpic00014.jpg

控制飛機往下移動的軸向為Y軸負向,因此第2Translate模組模組參數視窗,在Translate VectorY軸欄輸入-1。而左右移動得軸向分別為X軸負向與正向,因此在Translate模組模組參數視窗,在Translate VectorX軸欄未設為1-1

(down) wdpic00015.jpg

(left)     wdpic00016.jpg

(right)   wdpic00017.jpg

 3.2.2 粒子系統 

03.Ehectorl Particle ScriptObject Particle System

wdpic00018.jpg

Initial Color and Alpha

  wdpic00019.jpg

RGB為色彩基色 分別為紅綠藍 

A 為透明度 數值越大透明度越低 

 Texture

  wdpic00020.jpg

下拉式選單改為 smoke

 3.2.3 場景物件製作 

05.Texture Scroller

兩個只要場景物件,分別為Island()Cloud()匯入編輯視窗。 

 wdpic00021.jpg

將場景加上紋理捲動的效果,要捲動的物件一共有兩個雲層和一個小島,將Texture ScrollerStart依序連結後,再將三個模組設為迴圈。 

 wdpic00022.jpg

開啟Texture Scroller模組的參數視窗,距離越遠的物理紋理捲動會較慢,反之則越來越快。首先設置Island物件,將Target設為「Island_Mesh」,Scroll Vector的欄位設為0-0.0005Cloud物件則是將Target設為「Cloud _Mesh」,Scroll Vector的欄位設為0-0.0005。而Cloud000物件因未具離最近,捲動速度較快,所以將Target設為「Cloud _Mesh000Scroll Vector的欄位設為0-0.0008 

Island       wdpic00023.jpg

Cloud       wdpic00024.jpg

Island000 wdpic00025.jpg

3.2.4 環境設定 

06.Environment

Leave層新增一個Script用來設定環境的視覺效果,命名為「06 .Environment 

 wdpic00026.jpg

Set Background Image模組是用來設定背景圖片

wdpic00027.jpg

Set Background Image模組參數視窗,將Background Texturex欄位設為「Sky」,本灰暗的背景改變為淺藍色的漸層天空。

wdpic00028.jpg

Set Fog連結至Background Texturex模組之後

wdpic00029.jpg

Set Fog參數視窗,Fog Mode是霧氣產生模式,預設為Linear(線性),而Fog StartFog End是控制霧氣的開始與結束,依序設為50200,霧氣會以距離50的地方開始,並以線性方式到距離200的地方結束。而Fog Color是設定顏色,在欄位內輸入20022022050

wdpic00030.jpg

 3.2.5 視野控制 

07.Main Camera

第三人所指的是能夠從遊戲畫面看到自己所控制的角色,反之如果遊戲畫面就像現實中親眼看到的景象,則是第一人稱遊戲。我們將建立一台攝影機用來追蹤飛機的移動。

將新建立的New Camera命名為Main Camera,並在Main Camera上建立一個Script命名為「07. Main Camera」。

wdpic00031.jpg

Set PositionStart連結

wdpic00032.jpg

開起Set Position參數視窗,在PositionY軸欄位輸入「12」,而Z軸欄位輸入「50」。而Referential的欄位內設為「Plane」。

wdpic00033.jpg

除了設第攝影機的位置以外還要讓他看著飛機,因此將Look AtSet Position連結。

wdpic00034.jpg

開起Look At參數視窗,將Referential設為「Plane」即可讓攝影機看著飛機而Following Speed欄位設為100%

wdpic00035.jpg

讓攝影機追隨著飛機移動,將Set Parent02. Plane Move ScriptStart連結,Set Parent用來設定物件的母體。當母體移動時,子物件也會跟著移動,但子物件移動時,母體則不會受到影響,因此利用這個模組讓攝影機跟隨

3.3 障礙物的產生與精簡化 

3.3.1 隕石亂數定位 

08.Aerolite Move

Building Blocks/Logics/Calculator/Random

 wdpic00036.jpg

 XY軸與畫面水平 Z軸是與飛機遠近的距離 

Min分別輸入 -100 -50 150   Max分別輸入 100 70 100

新增Building Blocks/3D Transformations/Basic/Set Position 並連結 Random

再將Random的參數出口設成 Set Position的參數入口 

 wdpic00037.jpg

3.3.2 建立移動目標 

08.Aerolite Move

新增Move To連至Set Position後方 並設置迴圈 

 wdpic00038.jpg

  08.Aerolite Move

Set Position Move To 中間 

新增Building Blocks/Narratives/Object Management/Object Create

連結Set Position的出口 再連至Get Component 最後連至Set Conponent

        Random的參數設給Set Position Get Component

Get ComponentXY參數設給Set ComponentXY參數 

 wdpic00039.jpg

開啟Set Component設定參數 

 wdpic00040.jpg

新增Building Blocks/Logics/Calculator/Op Set Position

Set Component參數設給Op

Op參數設給Set Position

 wdpic00041.jpg

開啟OP 設定參數為0.5

使Set Component綜合的座標乘以0.5達到目標物定位區縮小的效果

wdpic00042.jpg

Set Component的參數設為-100 可防止因縮小座標 而使隕石在未到飛機後方就停下的情況發生

wdpic00043.jpg

 08.Aerolite Move

3.3.3 隕石亂數位移速與轉動 

新增Building Blocks/Logics/Calculator/Random Move To後方

加入Move To 的迴圈

wdpic00044.jpg

新增兩個Random Random Move To

設定Random的參數:

Min: -1  Max: 1

wdpic00045.jpg

Min: 0 Max: 10

wdpic00046.jpg

 

wdpic00047.jpg

新增完模組 並設定參數如下

 

 wdpic00048.jpg

3.3.4 複製隕石

Level層上建立一個新Script用來加入隕石自東產生的功能,命名為09.Aerolite Copy

 wdpic00049.jpg

Object CopyStart連結。在Dependency Options欄位內選擇Custom Dependencies,勾選Behaveioral Obiect層的Scripts3D Entity層的Meshes

 wdpic00050.jpg    wdpic00051.jpg

接下來加入Delayer模組來延遲隕石製造的速度,將Delayer拉至Object Copy再把兩個模組設成迴圈。開啟Delayer模組參數視窗,壤隕石複製之後延遲0.5秒再複製下一個隕石,因此在Time to Wait欄位內將數值設為500Ms

 wdpic00052.jpg

3.3.5 刪除物件 

隕石在定位置時,建立了一個移動目標物,並且使用Move To模組讓隕石從出現地方移動至目標物身上。雖然當複製體移動到終點就會停止運作,但這些隕石雨其他目標物是不會再使用了,因此接下來將隕石複製體到達終點時,刪除該複製體與移動目標。 

 wdpic00053.jpg

 要從Move群組中,Object Create模組的參出口來取得移動目標,進而設給Object Delete模組。因Object CreateObject參數輸出口Basic Object類型,因此將該參數輸出口設為Basic Object 

 wdpic00054.jpg

 而另一個要刪除的物件是隕石的複製體因此新增一個This參數用來設給Object DeleteObject參數入口,讓Script在運作到這個模組時,抓取一同複製出來的隕石,而不是隕石本體。 

 wdpic00055.jpg

 再將兩個Object Delete參數視窗中的Dependency Options欄位設為Full Dependencies 

 wdpic00056.jpg

3.4 視覺特效與碰撞 

3.4.1 視覺特效 

由於是要將每個隕石複製體都能夠逐漸變透明,在Level Manager標籤上新增一個Script命名為10.Aerolite Transparent

 wdpic00057.jpg

Schematic標籤中,將OP模組與Start連結。該模組是用來抓取隕石複製體的Z軸座標,進而偵測複製體是否移動飛機後方。 

wdpic00058.jpg

開啟OP模組參數視窗,將Input欄位設為「3D Entity」與「None」,Output設為Float,而Operation則設為Get Z

wdpic00059.jpg

接下來透過Script的擁有者來取的隕石複製體,新增一個This參數,並將該參數設給Op第一個Input參數入口。要對Op取的Z軸座標進行判斷,將Test模組和OP連結,把OP參數出口設給Test參數入口,飛機的Z軸位置一直控制在0,因此讓隕石的Z軸小於等於-5時,才需要加入透明效果。開啟Test模組參數視窗,將Test欄位設為「Less or equal」,而B欄位設定為-5

wdpic00060.jpg

為了讓複製隕石能夠不斷抓取位置,將TestFalse出挳給Op模組的入口。當隕石飛到飛機後方,Test模組由True出口執行時,該隕石要加入漸變式的透明效果。將Linear ProgressionTest模組的True出口連結。接著把Make Transparent模組與Linear ProgressionLoop Out連結,再把Make Transparent模組出口連結道Linear ProgressionLoop In

wdpic00061.jpg

開啟Linear Progression模組參數視窗,讓這個模組在100Ms之內,以遞減的方式從10.2,將Time欄位設為100MsA欄位為1,而B欄位設為0.2

 wdpic00062.jpg

Make TransparentAlpha參數入口是控制物件透明度,而Linear ProgressionAB參數分別設為10.2,是讓物件的透明度從1(不透明)0.2(透明度高)。將Linear ProgressionValue參數出口設給Make TransparentAlpha參數入口。

 wdpic00063.jpg

 

3.4.2 飛機加速特效

Key Event模組和03.Ehectorl Particle ScriptStart連結,再複製一個Object Particle開啟Key Event模組參數視窗,將Key Waited欄位輸入S

 wdpic00064.jpg

3.4.3 隕石生命計算

08.Aerolite Move

Aerolite Move ScriptRandom

  wdpic00065.jpg    wdpic00066.jpg 

隕石隨機計算出最大值與最小值

3.4.4 視野追隨

02.Plane Move

加入Set Parent 模組,並與Start 連結

wdpic00067.jpg

Set Parent 模組新增一個Target

   Target 設為「Plane

   Pareent 欄位設為 Plane Frame

   wdpic00068.jpg wdpic00069.jpg

為了要將攝影機的母體設為這個虛擬物件

  開一個 3D Frame Setup 標籤

    1.將虛擬物件名稱改為Plane Frame

    2. Position XYZ欄內都輸入0

    3.設定完成後,按下 Set IC

 wdpic00070.jpg

新增四個 Translate 模組,並新增 Target  

 wdpic00071.jpg

點開 Translate ,並將 Target 的欄位內選擇 Plane Frame

另外三個 Translate 按照同樣方法設定 

再新加一個 Set Parent ,並與前一個 Set Parent 相連 

wdpic00072.jpg  

 將第二個 Set Parent Target 設為「Main Camera Parent 設為「Plane Frame 

 wdpic00073.jpg

 Switch On Key 旁加入四個 Op ,並聯結 Out 0 ~ Out 3 出口 

 wdpic00074.jpg

 將四個 Op 欄位都做同樣設定,欄位選擇「Plane Frame 

 wdpic00075.jpg

 接下來利用 Test 模組判斷 Op 取得位置,因此拖拉出 Test 模組並依序與 Op 連結 

 wdpic00076.jpg

1. Op 參數出口分別設給後方 Test A 參數入口 

2. Test Ture 出口分別連給後方的 Translate 模組

wdpic00077.jpg

第一和第二Test 是設定控制向上和向下飛行的範圍

第一個 Test 參數視窗裡, Test 欄位設定「Less or equal」,而B欄位設為「30

wdpic00078.jpg

第二個 Test 參數視窗裡, Test 欄位設定「Greater or equal」,而B欄位設為「-30

wdpic00079.jpg

第三和第四Test 是設定控制向左和向右飛行的範圍

第三個 Test 參數視窗裡, Test 欄位設定「Greater or equal」,而B欄位設為「-40

 wdpic00080.jpg

第四個 Test 參數視窗裡, Test 欄位設定「Less or equal」,而B欄位設為「40

wdpic00081.jpg

3.4.5 隕石的動態模糊

這是用來達成視覺上的加速效果,並且要拖拉 Key Event Script 裡,並與 Start 連結

 wdpic00082.jpg

開啟 Key Event 模組的參數視窗,在 Key Waited 的欄位數入「S

wdpic00083.jpg

接著加入 Motion Blur 模組,這是用來顯示動態模糊的效果,並將該模組的 On Off 入口,分別連給 Key Event Pressed Released 出口

wdpic00084.jpg

3.4.6 加入碰撞功能 

建立一個 Script 並命名為「11.Collision」,表示用來製作碰撞功能 

wdpic00085.jpg  

加入 Object Slider 模組,並與 Start 連結 

 wdpic00086.jpg

接下來開啟 Object Slider 模組的參數視窗,Radius 是阻止物件穿透的半徑範圍,反覆測試後,設定數值為8是最佳的數值。Group 欄位內設為「A_Group」,讓只有在這群組裡的物件才產生碰撞效果 

wdpic00087.jpg

3.4.7 飛機位置控制 

為了解決 Plane Frame (飛機母體) 不會因為受到推擠而讓 Z 軸產生位移的問題,只需要在每一次碰撞,讓該虛擬物件的 Z 回復到0。新增一個 Op 並連在 Object Slider 模組的 Contact 出口 

 wdpic00088.jpg

開啟 Op 模組,因為要抓取母體位置,所以 p1 欄位內設為「Plane Frame 

 wdpic00089.jpg

再來將 Op 的參數設給 Get Component 的參數入口,如此 Get Component 即可取得座標中的 XYZ 三個數值 

 wdpic00090.jpg

接著我們要利用 Get Component 所取得隕石的 X Y 軸的數值,來進行座標的合成,增加一個 Set Component 並與 Get Component 模組相連 

 wdpic00091.jpg

Get Component 的三個參數出口分別是座標分解後的 XYZ 數值,將該模組的 XY 參數出口依序設給 Set Component XY 參數入口 

 wdpic00092.jpg

Set Component Z 軸參數剛好為0,所以不用再額外設定。經過該模組的合成後,參數出口即是 Plane Frame 在碰撞後要被定位的座標。接下來新增    Set Position 並與 Set Component 連結。由於要讓組合的座標設給 Plane Frame ,所以將 Set Component 的參數出口設給 Set Position Position 參數入口 

 wdpic00093.jpg

3.5 碰撞特效 

3.5.1 飛機振動效果 

增加 Counter 模組,我們利用該模組來指定震動的次數。 

 wdpic00094.jpg

開啟此模組參數視窗,在 Counter 欄位內輸入「5」,使該模組執行五次迴圈內的程式,其它欄位保持原預設值

wdpic00095.jpg

接著要在每一次迴圈中,產生一個亂數位移量,所以加入 Random 模組,並連在 Counter Loop Out

wdpic00096.jpg

Random 模組可用來產生亂數位移量,開啟 Random 模組的參數出口點兩下,並將參數類型改為「Vector

wdpic00097.jpg

開啟 Random 模組的參數視窗, Plane Frame 的移動只控制在 XY 兩軸,因此亂數也僅針對這兩軸做設定即可。在 Min XYZ 欄位內輸入(-0.5-0.50),而 Max 則設為(0.50.50

wdpic00098.jpg

為了確保每次位移後,能回復到原本位置,所以我們要利用 Op 模組換算出反位移量。增 Op 並連在 Random 後方

wdpic00099.jpg

開啟 Op 模組的進階設定視窗,反位移量是指將取得的座標乘以-1,即可得到相反的座標值來回復位置。所以將 Input 分別設為「Vector」與「Float」, Output 設為「Vector」,而 Operation 則是設「Multiplication

wdpic00100.jpg

Random 模組的參數出口設給 Op 的第一個 Input 入口。接著開啟 Op 模組的參數視窗,在 p2 欄位內輸入「-1

wdpic00101.jpg wdpic00102.jpg

接下來新增兩個 Translate 模組並依序由 Op 模組連結起來後,將最後一個 Translate 的模組出口連回到 Counter Loop In

wdpic00103.jpg

Random Op 模組的參數出口,分別設給後面兩個 Translate 模組的 Translate Vector 參數入口

wdpic00104.jpg

為了讓兩個 Translate 模組之間產生些許的時間差,使振動能夠有效果,因此增加 Delayer 模組放置在兩個 Translate 模組之間

wdpic00105.jpg

開啟Delayer 模組的參數視窗,該模組只是用來讓振動產生時間差,因此在 Time to Wait 欄位更改為「20Ms

wdpic00106.jpg

接下來讓 Plane Frame 的振動效果移到飛機身上,因此幫兩個 Translate 模組新增 Target

wdpic00107.jpg

新增完 Target 值之後,分別開啟兩個 Translate 模組的參數視窗,並將 Target 欄位設為「Plane

wdpic00108.jpg

3.5.2 飛機閃爍效果 

新增 Linear Progression 模組,並將其入口連到 Position 的群組出口

wdpic00109.jpg

開啟Linear Progression 模組參數視窗,讓該模組在100Ms0.1秒)之內,從0數到1,因此將 Time 欄位改為100

wdpic00110.jpg

Linear Progression 模組是要讓飛機執行顏色漸變的效果,但該模組輸出的內插值並不支援 Color 的參數類型,因此新增 Interpolator 模組並連在Linear Progression Loop Out

 wdpic00111.jpg

Interpolator 模組用來計算兩項燦數的內插值。先點參數出口兩下,將參數類型改為「Color」。再來點開 Interpolator 模組的參數視窗,A欄與B欄會變成設定顏色的參數。而我們要讓飛機碰到隕石的時候,以紅色作為閃爍的效果,因此A欄顏色改為「白色」,B欄則改為「紅色」 

  wdpic00112.jpg   wdpic00113.jpg

接著為了要使 Linear Progression 模組達到顏色漸變的效果,所以要將 Linear Progression Value 參數出口設給 Interpolator Value 入口 

 wdpic00114.jpg

 新增 Set Emissive 模組並連在 Interpolator 的模組出口,再將 Set Emissive 的模組出口連到 Linear Progression Loop In

 wdpic00115.jpg

 開啟 Set Emissive 模組參數視窗,將 Target 欄位設為「M_Plane」,而 Emissive Color 則是要取得 Interpolator 的參數入口,因此不用設定 

 wdpic00116.jpg

接著將 Interpolator 的參數出口設給 Set Emissive Emissive Color 參數入口 

 wdpic00117.jpg

在飛機與隕石碰撞時,該物件的自發光會從白色變到紅色,我們還必須讓它從紅色變回白色,以恢復原本狀態。因此我們複製 Linear Progression Interpolator Set Emissive 這三個模組並將它們連在 Linear Progression 的模組出口 

 wdpic00118.jpg

開啟第二個 Interpolator 模組,將A欄位改為「紅色」,B欄位改為「白色」 

 wdpic00119.jpg

雖然能達到漸變的效果,但還是會有些許的浮點數值差距,這因素會造成飛機不能完全回復白色,因此我們要在第二個 Linear Progression模組執行完成後,再加入一個 Set Emissive 模組,並指定飛機材質的自發光為白色。新增的Set Emissive 模組並連在第二個 Linear Progression 模組的出口 

 wdpic00120.jpg

點開剛才新加入的 Set Emissive 模組的參數視窗,將 Target 欄位內設為「M_Plane」,而 Emissive Color 欄位設為「白色」 

 wdpic00121.jpg

為了要讓顏色達到閃爍效果,新增 Counter 模組,並將 Plane Emissive 群組放置在 Counter 迴圈裡,再把 Position 群組出口連到 Counter 模組的入口 

 wdpic00122.jpg

開啟 Counter 模組參數視窗,我們要讓閃爍的次數設為5,所以將 Count 欄位設為「5 

wdpic00123.jpg

 3.5.3 訊息特效的定位 

Level Manger標籤上新增一個Script,命名為12.Boom

 wdpic00124.jpg

為了讓Boom物件每次顯示都在飛機的上方3的單位,在Schematic標籤,將Set PositionStart連結。 

 wdpic00125.jpg

開啟Set Position參數視窗,在PositionY軸欄位輸入3。接著讓Boom物件以飛機為參考來定位,所以Referential則設為Plane 

 wdpic00126.jpg

為了讓執行到這項特效時,Boom物件才顯示出來,所以至Level Manger標籤,將Boom上的Visible(可看見的)欄位關閉。在Schematic標籤新增一個Show物件和Set Position連結,讓Boom物件在定位後才顯示出來。 

 wdpic00127.jpg

 3.5.4 訊息放大效果 

Boom物件顯示出來之後漸漸放大,將CounterShow連結。 

 wdpic00128.jpg

開啟Counter模組參數視窗,讓Boom放大5次,因此在Count欄位輸入5 

 wdpic00129.jpg

新增Op模組連在CounterLoop Out,連結Scale模組,該模組是用來縮放物件,再將Scale模組出口連回CounterLoop InScale模組的Scaling Vector參數類型為Vector,因此開啟Op模組的進階設定視窗,將InputOutput都設為Vector,而Operation設為Addition 

 wdpic00130.jpg

接下來讓Op的第一個參數值方塊作為縮放的變數,而物件要以原始大小來進行縮放,因此該變數比例設為111。將參數名稱設為scale,而XYZ欄位設為1 

 wdpic00131.jpg

第二個參數視每次要累加的倍數值,開啟Op參數視窗,在p2XYZ欄位輸入0.05 

 wdpic00132.jpg

除此之外,累加後的數值還要設給Scale模組已進行縮放的動作,所以將Op的參數出口再設給ScaleScaling Vector參數入口。 

 wdpic00133.jpg

3.5.5 訊息特效顯示設定 

訊息特效藥在飛機撞到隕石的時候,才會顯示出來。因此載Level Manager標籤中的Boom上,將Activate At Scene Start欄位關閉。將Random Switch並連在Position群組與Object Copy群組連結,利用Object Copy模組讓碰撞一次就出現一個訊息特效。開啟Random Switch參數視窗,Coef1欄位輸入1Coef2欄位輸入5

 wdpic00134.jpg

Boom物件在出現之後,在以漸漸透明的方式消失,進而刪除該物件。在Schematic標籤的12.Boom Script,新增Linear Progression模組,模組入口連結Counter模組出口。在新增Make Transparent連結Linear ProgressionLoop OutLoop In

wdpic00135.jpg

開啟Linear Progression參數數窗,要讓Boom物件在500Ms之內慢慢透明,因此TimeMs欄位輸入500。而A欄位輸入1B欄位輸入0,表示由不透明到透明。

wdpic00136.jpg

Linear ProgressionValue參數入口設給Make TransparentAlpha參數入口。

wdpic00137.jpg

由於要讓Boom物件完全透明後,進行刪除動作,新增Object Delete並連在Linear ProgressionOut出口,再新增一個This參數,將This參數設給Object Delete模組的參數數入口。

 wdpic00138.jpg

3.6 遊戲界面設定

3.6.1 製作迷你地圖 

新增一個 2D 虛擬物件,在出現的 2D Frame Setup 標籤中,將該物件命名為「Mini Map(迷你地圖的意思),為了直接在編輯視窗調整該物件的位置,將 Size Width Height 欄位都輸入「130」,而為了讓 Mini Map 在遊戲介面的上方是為了方便移動時的操作,所以將 Position Z Order 欄位輸入「-1」,讓 Mini Map 在遊戲介面的下方

wdpic00139.jpg

  Mini Map 新增一個材質,並出現在 Material Setup 標籤,將該材質重新命名為「M_Mini Map」。由於迷你地圖是要利用模組畫面存成紋理,所以必須新增一個空白的紋理,接著出現在 Texture Setup 標籤下,將新增的材質重新命名為「Pic_Mini Map

 wdpic00140.jpg

wdpic00141.jpg

新增一個攝影機命名為「Mini Map Camera」並將它設定 IC

 wdpic00142.jpg

Mini Map Camera 上建立一個 Script,並重新命名為「13. Mini Map」。接著切換到 Schematic 標籤的 13. Mini Map Script ,並且拖拉 Render Scene In RT View Script 裡,並與 Start 連結

wdpic00143.jpg

Render Scene In RT View 模組可將攝影機所拍攝的畫面描繪至紋理上,現在開啟該模組的參數模組,將 Target View Render Target 欄位設為「Pic_Mini Map」,而 Camera 欄位設為「Mini Map Camera」即可讓攝影機取得畫面描繪至紋理上

wdpic00144.jpg

為了讓該模組不斷執行,能夠讓所有指定的紋理持續變化,進而達成迷你地圖的功能,因此將 Render Scene In RT View 該模組設為迴圈

wdpic00145.jpg

3.6.2 製作計量表物件

將新增的 2D Frame 重新命名為「Plane HP」之後,在 Position Z Order 欄位內輸入「-1」,而 Size Width 欄位輸入「475」, Height 欄位輸入「25

wdpic00146.jpg

接下來新增一個材質,並且在出現的 Material Setup 標籤,將該材質重新命名為「M_Plane HP」。接著要將 Diffuse 旁的顏色調整為「黃色」

 wdpic00147.jpg

3.6.3 飛機的生命值計算功能

遊戲每一次啟動,必須先定義出飛機初始的生命數值。接著拖拉 Identity 並與 Start 連結

 wdpic00148.jpg

點開 Identity 模組的參數入口,將參數類型改為「Integer

 wdpic00149.jpg

開啟 Identity 模組的參數視窗,並將 pln0 欄位內輸入「100」,表示飛機初始的生命數值為100

wdpic00150.jpg

接下來我們在 Script 新增一個參數值方塊用來記錄飛機生命值。在 Script 空白畫面處按下滑鼠右鍵,選擇 Add Local Parameter

wdpic00151.jpg

在出現的視窗中將參數名稱與類型分別設為「plane hp」與「Integer」。設定完成之後按下OK關閉視窗。

wdpic00152.jpg

接下來請顯示出 plane hp 變數的名稱與數值,並將 Identity 的參數出口設給該變數,如此一來,即可再遊戲每一次啟動時,將飛機的生命數值定義為100

wdpic00153.jpg

拖拉一個 Op 模組到 Script 裡,並開啟該模組的進階視窗,要利用減法運算達到扣生命數值的功能,所以 Input Output 欄位內皆設爲「Integer」,而 Operation 則設為「Subtraction

wdpic00154.jpg

開啟 Op 模組的參數視窗,在 p2 欄位內輸入1

wdpic00155.jpg

由於該模組是依照百分比來改變尺寸,但 plane hp 變數的類型為整數,因此再加入一個 Op 模組,並連在第一個 Op 之後,而 Gauge 的模組入口連在第二個 Op 的模組出口 

 wdpic00156.jpg

開啟第二個 Op 的進階設定視窗,利用該模組算出 plane hp 變數的百分比,因此 Input 欄位分別設爲「Integer」與「Float」, Output 設為 Float」,而 Operation 則設爲「Division(除法的意思)

 wdpic00157.jpg

接著將第一個 Op 的參數出口設給後方 Op 模組的第一個 Input 參數入口 

 wdpic00158.jpg

 開啟第二個 Op 模組的參數視窗,將 p2 欄位設爲「100」,由於該模組是用來算出生命值的百分比,所以將運算結果後的生命值再除以100即可運算出百分比 

 wdpic00159.jpg

 接著開 Gauge 模組的參數視窗, Orientation 則是伸縮的方向。為了要讓 plane hp 依照第二個 Op 運算出來的百分比比例來改變尺寸,因此將 Target 設為「Plane HP」,而 Orientation 欄位使用預設數值 

 wdpic00160.jpg

再來將第二個 Op 的參數出口設給 Gauge Bar Progression 參數入口 

  wdpic00161.jpg

 接下來將 Object Slider 模組的 Contact 出口連給第一個 Op 的模組入口,讓飛機碰撞到隕石的同時,就計算生命值並且將結果由劑量表顯示出來。由於 Gauge 模組一啟動之後會持續執行,為了節省電腦效能,將該模組的 Exit On 出口連到自己的 Off 入口 

wdpic00162.jpg

3.6.4 劑量表顏色漸層效果 

拖拉 Building Blicks/Logics/Interpolator 11.Collision Script並聯至OP的模組出口 

 wdpic00163.jpg

開啟Interpolator模組的參數出口,因為它是用來取得顏色漸變的內插入,因此在開啟的視窗中,將參數類型更改為Color

 wdpic00164.jpg

開啟Interpolator模組參數視窗,當Value0時,該模組會輸出A的值,Value100時,則輸出B的值。而Plane HP物件事由100%的長度,經由碰撞使尺寸慢慢遞減為0%,因此若要讓該物件由黃色漸變到紅色,則在B欄位設為黃色,而A欄位設為紅色。 

 wdpic00165.jpg

接下來新增Set DiffuseScript裡,並將它連在Interpolator模組出口。開啟Set Diffuse參數視窗,將Target欄位設為「M_Plame HP」。 

 wdpic00166.jpg

Interpolator模組的參數出口設給Set Diffuse模組的Diffuse Color參數入口。 

 wdpic00167.jpg

3.6.5 製作血量表背景 

為了讓Plane HP在縮短同時,擁有一個黑色為底的背景。在Level Manager標籤底下複製Plane HP物件,在Copy options欄位選擇「Full Dependencies」。 

 wdpic00168.jpg

Level Manager標籤的Plane HP.Copy物件上開啟2DFrame Setup,要讓它成為Plane HP的背景,因此在PosutuonZorder欄位內輸入-2

 wdpic00169.jpg

切換該物件的材質素材設定標籤,因為要讓背景成黑色得狀態,所以將Diffuse欄位更改為黑色。 

 wdpic00170.jpg

3.7 子彈發射與隕石生命 

3.7.1 子彈發射基本設定 

建立一個 Script ,並命名為「14.Bullet Particle」,建立一個 Key Event 模組,此模組用來控制子彈發射,並將它與 Script 連結 

 wdpic00171.jpg

 開啟 Key Event 模組視窗,並將設定為「Space 

 wdpic00172.jpg

所以只要按下空白鍵就是子彈發射。新增一個 Point Particle System 模組,該模組可控制按下空白鍵即發射,放開則停止發射 

 wdpic00173.jpg

為了不被風力影響射擊,將 Global Wind 勾掉,將不會再受此影響 

 wdpic00174.jpg

開啟 Point Particle System 模組的參數視窗, Emission Delay 為控制發射間隔時間,我們設為「0」。 Yaw Variance 是控制粒子由 XZ 軸發射的開放角度, Pitch Variance 則是控制 YZ 軸,而子彈發射時會有些微偏移量,因此將2者的 Degree 設「0.5」。 Speed 欄位為控制子彈發射速度,我們設「0.5 

 wdpic00175.jpg

Lifespan Ms 改為「500」,使粒子在500 Ms (0.5)之內消失。 Maximum Number 是設定每次放射的最大數量,我們設定「5」。 Emission 是控制每個放射物發射粒子的數量,我們設「1」。 Initial Size Ending Size 為控制粒子的大小,我們設「5

wdpic00176.jpg

 因位子彈的顏色接近白色,所以開啟 Point Particle System 模組的進階設定視窗,將 Destination Blend 欄位設「Inverse Source Alpha

wdpic00177.jpg

 為了使子彈發射會隨著飛機移動,因此拖拉一個 Set Parent 14.Bullet Script 裡,並將它與 Start 連結

 wdpic00178.jpg

開啟 Set Parent 的參數視窗並將它設定為「Plane Frame」,即可讓子彈發射跟隨著飛機一起動

3.7.2 粒子與物件的碰撞

我們進入 Particle Object Deflector 裡設定Respone (反應力)Friction (摩擦力),我們設定的數據為「0.05

wdpic00179.jpg

 3.7.3 粒子訊息發送

我們先到14.Bullet Particle Script 並開啟 Point Particle System 模組的進階設定視窗,然後在 Message To Deflectors 欄位設為「touch」,表示粒子與物件碰撞後會發訊息給該物件

wdpic00180.jpg

接著到08.Aerolite Move Script 拖拉一個 Switch On Message Script 裡,將它與 Start 連結,接著開啟 Switch On Message 模組的參數視窗並將 Message 0 設為「touch

wdpic00181.jpg

3.7.4 隕石生命計算

增加一個 Random 模組並連在 Start Switch On Message 之間。點開 Random 參數出口的視窗並將參數類型改為「Integer

  wdpic00182.jpg    wdpic00183.jpg

Script 空白處點右鍵,新增一個參數方塊,以記錄隕石生命值。出現的視窗,我們將名稱設為「aerolite hp」,而參數類型設為「Integer」。按下確認鍵後, Script 會出現一個數值方塊為「aerolite hp 變數」,再來將Random 的參數出口設給 aerolite hp 變數

  wdpic00184.jpg wdpic00185.jpg

Switch On Message 接收到粒子碰撞的訊息後,隕石生命值要減1。新增一個 Op 模組到 Script 裡,並連在 Switch On Message 模組的 Received 0 出口。開啟 Op 進階設定視窗,該模組用來扣除隕石生命值,所以在 Input Output 皆設為「Integer」,而 Operation 則設為「Subtraction」。由於 Op 模組是要將 aerolite hp 變數減1後再將結果回傳給aerolite hp 變數,所以還要複製該變數,分別給 Op 模組的第一參數入口與出口

wdpic00186.jpg

wdpic00187.jpg

wdpic00188.jpg

開啟 Op 模組參數視窗,並將 p2 改為1,就可每次執行時將 aerolite hp 變數減1

wdpic00189.jpg

 新增一個 Test 模組來判斷該變數小於或等於0,並連在 Op 模組出口

 wdpic00190.jpg

Test 模組的 A B 參數視窗,兩者參數類型皆改為「Integer

 wdpic00191.jpg wdpic00192.jpg

為了判斷 Op 的運算結果是否小於等於0,因此將 Op 的參數出口設給 Test A 參數入口

wdpic00193.jpg

開啟 Test 模組參數視窗,將 Test 欄改為「Less or equal」而 B 欄設為「0

wdpic00194.jpg

新增一個 Explode 模組,該模組能分解物件的網面,並由中心向外擴散達到爆破的效果。此模組連在 Test 模組的 Ture 出口

wdpic00195.jpg

開啟 Explode 模組的參數視窗, Duration 欄位可設定爆破時間,我們將這欄位設為「500

wdpic00196.jpg

接著將 Explode Loop Out 連到 Loop In ,即可在500 Ms 內執行爆破

wdpic00197.jpg

3.7.5 隕石爆破的後製 

新增一個 Remove From Group 模組並連在 Test 模組的 Ture 出口

wdpic00198.jpg

 開啟 Remove From Group 模組參數視窗並將 Group 欄位設為「A_Group

 wdpic00199.jpg

增加一個 ObjectParticleSystem 並連在 Test 模組的 Ture 出口

 wdpic00200.jpg

開啟 ObjectParticleSystem 的參數視窗,為了讓粒子沒有延遲放射的時間,將 Emission Delay Ms 欄改為「0」。而控制粒子速度的 Speed 欄設為「0.01

 wdpic00201.jpg

wdpic00202.jpg

Lifespan (粒子生命週期)S欄位改為「2」。 Emission (每個放射物可發射粒子的數量)欄位設為「30」。而控制粒子開始與結束大小的 Initial Size Ending Size 欄位分別設為「5」和「30 

 wdpic00203.jpg

 接下來將 Initial Color Alpha 的顏色設為「紅色」,並將 A (Alpha)欄位改為「50」,讓粒子的透明度提高。而 Texture 欄位設為「Explode 

 wdpic00204.jpg

3.7.6 分數取得的準備工作 

Name 欄設為「sco」, Typex 欄位選為「Integer」,再按下OK,設定完成之後,以後遊戲執行都是由0開始累加分數 

wdpic00205.jpg

3.7.7 分數的取得 

新增一個 Get Cell 模組,連在 Aerolite HP群組的第二出口,並開啟此參數視窗,將它 Target 欄位設定為「score 

  wdpic00206.jpg wdpic00207.jpg

因為要用機率來控制分數的取得,新增一個 Random Switch 模組並連在 Get Cell Found 出口 

 wdpic00208.jpg

開啟Random Switch 的參數視窗並將 Coef 1 改為「10 

 wdpic00209.jpg

新增一個 Random 模組並連在 Random Switch Out 1 出口 

 wdpic00210.jpg

開啟 Random 模組的參數出口視窗,將參數類型改為「Integer」,使其能產生整數類型數值 

 wdpic00211.jpg

改完參數類型後開啟 Random 模組的參數視窗,將 Min Max 各設為「1」、「5 

 wdpic00212.jpg

新增一個 Op 模組並連在 Random 模組後,因當 Random 模組產生分數時,要利用 Op 模組將陣列中的數值與 Random 產生的數值進行相加的動作 

 wdpic00213.jpg

開啟 Op 模組的進階視窗,將 Input Output 欄位皆設為「Integer」,而 Operation 則設為「Addition 

 wdpic00214.jpg

接著將 Get Cell 的參數與 Random 的參數出口分別連給 OP 的兩個參數入口 

 wdpic00215.jpg

因為 Op 模組的參數出口是分數累加的結果,所以我們要在寫入 score 陣列表。新增一個 Set Cell 模組並連在 Op 模組的出口 

 wdpic00216.jpg

開啟 Set Cell 模組的參數視窗並將 Target 欄位設為「score」,而其它保持為0

 wdpic00217.jpg

OP 模組的參數出口設給 Set Cell 模組的 Value 參數入口,讓累加後的分數再寫入陣列表 

 wdpic00218.jpg

接著選取 RandomOpSet Cell 這三個模組並複製,複製出來的模組連在 Random Switch Out 2 出口 

 wdpic00219.jpg

開啟 Random 模組的參數視窗並將 Min Max 分別改為「5」和「15 

 wdpic00220.jpg

 接下來還要將 Get Cell 模組的參數出口設給下方 Op 模組的第一 Input 參數入口 

 wdpic00221.jpg

3.7.8 分數顯示設定 

新增一個 Script 並命名為「15.Score」,再新增一個 Get Cell 模組並與 Start 連結 

 wdpic00222.jpg

開啟 Get Cell 模組參數視窗將 Target 欄位設為「score 

wdpic00223.jpg

接著 增加一個 Op 模組,使分數與字串做結合,進而顯示在遊戲畫面, Op 模組要連在 Get Cell Found 出口

wdpic00224.jpg

開啟 Op 模組進階設定視窗,該模組要用來做字串的相加,而 Get Cell 取得的分數為整數類型,因此 Input Output 欄位皆設為「String」,而 Operation 欄位則設為「Addition

wdpic00225.jpg

其著開啟 Op 模組的參數視窗,在 p1 內輸入「Score

wdpic00226.jpg

 接著將 Get Cell Value 參數出口設給 Op 的第二個 Input 參數入口。為了能一直取得陣列表的分數,要將 Op 的模組出口連到 Get Cell 的模組入口。再來複製 Op 的參數出口並貼上捷徑,顯示該捷徑的名稱與數值

 wdpic00227.jpg

新增一個 Create System Font 模組並與 Start 相連結,後面再增一個 2D Text 模組連在 Create System Font 後面。將 Create System Font Font Created 參數出口即輸出被建立的字型,將此參數出口設給 2D Text 參數入口

wdpic00228.jpg

開啟 2D Text 模組的參數視窗將 Target 欄位設為「Score

wdpic00229.jpg

設定完後,將 Op 參數出口的捷徑直接設給 2D Text Text 參數入口,就可讓 Score 物件顯示目前得分

 wdpic00230.jpg

接下來改變字型外觀,讓顯示出來的字不僅只是白色,所以新增一個 Set Font Properties Script 並將它連在 Create System Font 2D Text 模組之間。開啟進階視窗,在 Font Properties 這選項裡將 Shadow 勾選,該 Set Font Properties 模組會多出可設定陰影參數。開啟 Set Font Properties 模組的參數視窗並設定控制字型顏色 Color 欄位設定。最後將 Create System Font Font Created 參數出口設給 Set Font Properties Font 參數入口

 wdpic00231.jpg

wdpic00232.jpg

 wdpic00233.jpg

3.8 遊戲結束與按鈕製作

3.8.1 停止運作中的物件

新增一個新的 Script 將它命名為「16.GameOver」。在到11.Collision Script,複製 plane hp 並到 16. GameOver 貼上捷徑。新增一個 Test 模組 並與 Start 連結,接著開啟 Test 模組 AB 視窗將參數類型改為「Integer」。開啟 Test 模組參數視窗,由於要判斷 phane hp 變數是否小於等於0 ,因此將 Test 欄位設為「Less or equal」。再來將 Test False 出口連回到 Test 模組的入口,使該模組未達條件時持續判斷 phane hp 變數

 wdpic00234.jpg

wdpic00235.jpg

 wdpic00236.jpg

新增一個 Deactivate Script 並連在 Test Ture 出口,接著為此模組新增七個參數入口

 wdpic00237.jpg

開啟 Deactivate Script 模組的參數視窗,依序將參數設為「01.Plane Axial」「02. Plane Move」「03.Ejector1 Particle」「04. Ejector2 Particle」「05.Texture Scroller」「09.Aerolite Copy」「11.Collision」「14.Bullet Particle

 wdpic00238.jpg

新增 Group Iterator 模組並連在 Deactivate Script 模組出口,開啟 Group Iterator 模組的參數視窗,將 Group 欄位設為「A_ Group

 wdpic00239.jpg

新增一個 Deactivate Object 模組並連在 Group Iterator Loop Out Loop In 之間。再將 Group Iterator Element 參數出口設給 Deactivate Object Object 參數入口,如此就能停止隕石複製體的運作

 wdpic00240.jpg

3.8.2 遊戲失敗畫面

設定遊戲畫面的大小以及設計 GAME OVER 字的效果,其中有交字顏色設計接近白色,使字看起來有鏤空的效果等

wdpic00241.jpg

wdpic00242.jpg

wdpic00243.jpg

加入一個 Show 模組並連在 Test Ture 出口,然後開啟 Show 模組的參數視窗,將 Target 設為「Game Over

wdpic00244.jpg

接著在新增兩個模組,一個為 Linear Progression ,另一個為 Make Transparent ,然後將 Linear Progression 連在 Show 模組的出口,而 Make Transparent 則連在 Linear Progression Loop Out Loop In 之間。接著開啟 Linear Progression 的參數視窗,為了讓 Game Over 500Ms 之內從透明到顯示出來,要將 Time 欄位內的 Ms 改為 500」,然後將 A B分別設為00.9。開啟 Make Transparent 模組的參數視窗,將 Target 改為「Game Over」。最後為了讓 Make Transparent Alpha 參數能夠從0執行到0.9,將 Linear Progression Value 參數出口設給 Make Transparent Alpha 參數入口 

 wdpic00245.jpg

 wdpic00246.jpg

 wdpic00247.jpg

 3.8.3 製作遊戲按鈕 

拖拉Game_Module/Textures/Pic_Replay.tga3D Layout視窗中 

 wdpic00248.jpg

新增2D Frame 命名為Replay

Replay新增材質 重新命名 M_ Replay

調整Replay物件的位置 

 wdpic00249.jpg

將鎖定取消 始物件在遊戲失敗時才出現

wdpic00250.jpg

切換到16.GameOver Script 拖拉 Building Blocks/Logics/Loops/Delayer

 wdpic00251.jpg

Time to Wait欄位改為1S

 wdpic00252.jpg

複製Show

 wdpic00253.jpg

修改TatgetReplay

 wdpic00254.jpg

按住Ctrl 框選Lineat Progression Make Transparent 利用Shift Show相連

wdpic00255.jpg

開啟下方模組 Targe 改為 Replay

 wdpic00256.jpg

3.9 遊戲的重新啟動 

3.9.1 回復初始狀態 

Level Manager 新建Sceipt 命名為 19.Game Star

wdpic00257.jpg

切換到Schematic 19.Game Star 拖拉Building Blocks/Logics/Groups/Group Iterator

 wdpic00258.jpg

Group 欄位設為 A_Group

 wdpic00259.jpg

拖拉 Building Blocks/Narratives/Object Management/Object Delete 連結 Group Iterator 設迴圈 設為 0 並將Group Iterator 的出口設給 Object Delete

 wdpic00260.jpg

開啟 Object Delete 將欄位設為 Full Dependencies

 wdpic00261.jpg

 為了測試隕石是否被刪除 19.Game Star Activate At Start 關閉

wdpic00262.jpg

切換到18.Repiay Script 拖拉Building Blocks/Controllers/Mouse/Mouse WaiterOutputs 欄位勾選 Legt Button Down

Mouse Waiter on off 連到兩個 Mouse Cursor System

 wdpic00263.jpg

 當滑鼠與Replay 交會時要啟動19.Game Star 並停止18.Repiay Script 17. Repiay Material

18.Repiay Script Activate Script 19.Game Star連結 

 wdpic00264.jpg

 加入Deactivate Script 連結Activate Script 並將欄位敢為18.Repiay Script 17. Repiay Material

 wdpic00265.jpg

 

為了避免回復吃屎職時發生錯誤 要將回復初始值得九個物件重新是訂IC

19.Game Star 拖拉Building Blicks/Narratives/States/Restoer/IC 連結至 Group IteratorOut出口 

點選又鍵 選擇 Add Target Parameter 先增Target參數 

Restoer IC 複製出八個 並依序連接 

 wdpic00266.jpg

 3.9.2 啟動遊戲功能 

拖拉Builsing Blicks/Narratives/Script Management/Activate Script 19.Game Star

點選又鍵 Construct/Add Parameter  Input

 wdpic00267.jpg

新增入口數 並修改為 Script

 wdpic00268.jpg

 開啟參數 分別如下圖

 wdpic00269.jpg

3.10 網頁整合

3.10.1 網頁整合

先在Level Manager 標籤的Level 層建立先的Script 並命名為”20.Web Page Change”

wdpic00270.jpg

拖拉 Building Blocks/Logic/Array/Get CellScript Start連結

開啟Get Cell 參數視窗 分數記錄在score 陣列為第0行第0

Target 設為scoer

wdpic00271.jpg

 wdpic00272.jpg

拖拉 Building Blocks/Logics/Test/Test Script

並設定Test 模組的AB參數入口上 點擊開啟視窗

wdpic00273.jpg

將參數改為Integer

wdpic00274.jpg

 Get Cell 模組的參數出口設給 Text 模組的A參數入口

 wdpic00275.jpg

開啟Text模組視窗 Text欄位設為”Greater or equal”

B欄設為”200”

wdpic00276.jpg

 Test模組的False 出口連到Get Cell的模組入口

 wdpic00277.jpg

分數到達200 程式會一直取得分數進行判斷

拖拉 Building Bolcks/Wed/Navigation/Go To Web Page Script Text True

 wdpic00278.jpg

Go To Web PageURL值輸入plane.htm

 wdpic00279.jpg

3.10.2 輸出到網頁

選擇File 表下的 Creat Web Page

wdpic00280.jpg

選擇路徑 視窗大小 按下OK

wdpic00281.jpg

 

第四章 結論 

 

    由於Virtools4.0為一套具有豐富互動行為模組的即時3D虛擬環境實境編輯軟體,並可依照不同用途來製作出許多的3D產品,如線上網遊、PC-GAME、多媒體程式、模擬、產品展示、建築設計等等。Virtools4.0的互動行為模組是利用拖放方式將模組賦予在任一角色或物件上面,逐漸編輯、組合成一完整的互動式虛擬環境,經過編輯後的模組群可再組合成一個新的單一模組以方便重複利用及編輯,另外還可以不同的需求來使用Visual C++撰寫動態函式庫來建立新的互動模組,這個部分是我們之後要發展下一步的重點。

 

    Virtools的檔案格式:cmo:整合的作品檔案,包含完整的程式描述檔。

                       nms:包含所有「行為模組」資料的敘述檔。

                       nmo:包含所有元件與其相關程式敘述資料的檔案。

 

    Virtools可接受檔案格式:3DS Max檔案格式(使用3DS Maxplug-in匯出)

                           3DSD3D格式(用工具列的Resource\import file                                                                                                       匯出)

 

    在撰寫與製作此份專題報告的過程中,我們體會到了一個小組之間互相分工及分享經驗的重要性。從一開始什麼都沒有的狀況下,慢慢的去蒐集有用的資料,可用的工具、軟體和程式,再經由各組員的討論及意見慢慢的將這次專題所要達成的目標一步步的完成,並在這次實作中體會到要製作出一套具有完整內容的遊戲是有一定程度困難的。

 

    當初只會嫌別人的東西有哪些地方是缺點,雖然只是個小品遊戲,卻花了我們不少的時間。回頭再過來看看,反而絕得當初的想法太過於單純及簡單,並在之後更能體會製作人員的辛苦。現在大家都流行從網站去下載免費的遊戲,使的有些較小型的遊戲製作公司面臨到成本問題,在這邊我們還是希望大家多支持正版的遊戲、程式、軟體或工具。

 

 

 

 

 

 

 

 

 

遊戲操作流程圖

 wdpic00282.jpg

 

操作說明:

Up

Down

Left

Right

加速

S

射擊

Space

 

參考文獻

 

(1)   洪維恩、許志維、蔡雅純, 3D遊戲夢想家:Virtools 4.0入門實作範例, 第二版, 台北市, 藍海文化, (2008)

 

(2)   羅卓章、曾義仁,「NeMo 3D/VR虛擬實境發展環境之建立及其在場景開發之應用」,專題報告,逢甲大學,台中(2002)

 

(3)   龍俊成、葉琮哲、吳昌隆、許克寬,三維空間第一人稱射擊遊戲實作-使用DirectX,專題報告,逢甲大學資訊工程系,台中(2005)

 

(4)   方致翰、陳弘凱、黃金祥、陳韋秀、王郁文,射擊遊戲實作,專題報告,南華大學資訊工程系,嘉義。


 

心得

這是我們第一次做專題,很多地方根本都不了解。我們是從三下開始做,一直做到四上打分數,三下的時候,我們經歷了很多事情,像是名字定的太虛幻,做不出來,或者說根本不曉得做什麼好,後來我們原本想做一個私服網路遊戲,結果又發現工程太浩大,最後結果就是做一個小遊戲。原本想說暑假的時候要出來討論,結果最後又因為大家打工的打工,有事情的有事情,所以我們整個專題的事情幾乎拖到四上才開始進行,所以總覺得四上好忙也很累,弄到最後在12月底報告前還是做出來了,雖然不知道我們的成績是如何,但我們至少努力過體驗過了,也了解到了團隊合作的重要,以及分工合作的重要性。

arrow
arrow
    全站熱搜

    49617008 發表在 痞客邦 留言(0) 人氣()