2012年8月24日 星期五

Unity小遊戲教學(一)



這一系列是M2H在unitystore上供免費下載的專案。總共有五種,每個都涵蓋遊戲程式所需要的基本需求,我想,根據這些專案可更了解簡易的遊戲設計,並以此為基礎設計出更多有精美、互動性更高的產品。希望經由拆解式的說明,減少進入門檻,讓更多人能夠熟稔遊戲的製作,不論是美術設計人員,或是有新加入遊戲設計領域的熱血青年都能獨立的開發。





遊戲使用說明。
畫面上的標靶會源源不絕的而且越來越快的產生
只要用滑鼠移動瞄準標靶、按下左鍵之後就可以射擊,

環境說明
在unity Hierarchy中,所有的項目都稱為GameObject。在這個專案中,固定的Gameobject包括燈光、攝影鏡頭、架子、鐵罐這些僅是場景的一部分,對細節影響不大。而標靶產生器(targetSpawner)則是固定產生標靶讓,玩家的行為互動行為定義則是寫在script中,需要依附在某個GameObject中,只是在這個專案中,該GameObject剛好是攝影機。

程式檔概述
這個遊戲的程式部分主要有三
playerinput
負責滑鼠左鍵按下之後,分數的增加、標靶從佇列移除等工作。

gameManager
整個遊戲的大總管。
在這邊定義了GUI,可以射擊的標靶佇列物件增減的涵式,以及標靶的移動行為。

objectSpawner
比較像是標靶產生塔。除了定義了標靶在空間中的移動的資訊外,主要用於生成新的標靶及相關條件的設定。

程式檔內容說明
接下來要詳細的介紹每個程式碼的涵式與流程
PlayerInput
    1.先定義了canHitSound的變數,可以在射擊觸發時撥放該聲音檔。而在    整個遊戲引擎的操作畫面的Inspector中,由於是public變數,所以可以    手動的將變數導向不同的聲音資源。

    2.射擊判斷: 按下滑鼠左鍵之後,還需要查看滑鼠位置與哪個重疊標靶,射    中了需要將該標靶從佇列中移除並觸發爆破聲。
    Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
   
    Physics.Raycast (ray, out hit, 100))
    可以取得被擊中物的標籤,若是標靶、鐵罐的話才往下進行相關判斷。

GameManager
    一開始預設靜態GameManager SP這個變數讓其他類別中也可以引用這    個類別內的函數、變數等。
    而objectList為標靶佇列的變數。

    在每一次的更新中(Update)會去移動標靶的位置,讓它看起來是左飄或是    右飄,若超過邊界的話,將會自動移除。

    AddTarget()供標靶生成器呼叫,若有新的標靶產生則呼叫這個涵式將其加    入佇列中。

    RemoveObject
    還記得嗎,若標靶被擊中,則會記錄他的位置,接下來在這個涵式就是根據    這個位置去找標靶佇列中是否有相同的物品。若有則回傳 True,。

ObjectSpawner
    有另外的類別MovingObject定義了標靶在移動時的方向以及位移量。
    而ObjectSpawner類別中,
    1.objectPrefab這個變量以承接作好的標靶預制物,可以利用Instantiate    來無限生成。
    2.設定好的時間間距符合,就會開始觸發標靶生成的涵式。
    3.新生成的物件會加入系統的標靶佇列    GameManager.SP.AddTarget( movObj );

好了,寫完了,希望這段說明對各位能有協助,能夠更清楚該專案的邏輯。若能看到大家以此為基礎發展更多美好的遊戲應用、或者,僅僅是對自己更有信心那這篇文章就有更多存在的價值。隨文附上web執行檔,專案檔,內附所有程式碼以及元件。

原始檔案下載

作業:
1.打中鏢靶後標靶消失前會有個爆炸火花。
2.各種類型的標靶。


作者: Ray龍骨王創辦人
Web:LongGood.com.tw
Blog:RayChen.org



沒有留言:

張貼留言