2016年11月30日 星期三

Day 1: IT邦幫忙鐵人賽,開始

前言

「在一個繁星點點、無風無雲的夜晚,一群人在夜空下高歌。當他們唱到最高潮:『我要和天一樣高…』時,一顆流星恰好劃過天際。這群人誤打誤撞的願望頓時實現,他們四肢不斷延伸、再延伸,最後貫穿雲層,邁向星空,展開未知的旅程……」

(示意圖)

我知道這個故事極度低能,但請原諒還有兩個遊戲Project同時在進行的我,腦袋實在不太夠用。

(另外進行中的兩個Project......有圖為證)

玩法

這次要做的遊戲跟大家小時候在Nokia3310上玩的「星際大戰」有87%相似。不同的是,主角不是穿梭在外太空的飛行船,而是想要「和天一樣高」的人們。

在他們不斷長高,邁向浩瀚蒼穹時,將遇到許多敵人(例如:蜜蜂、落石、鳥鳥、飛機等等),玩家必須觸控螢幕的左/右半邊來閃避敵人。途中,有機會接到繫在降落傘上掉落的裝備。不同裝備可發射不同的子彈或有不同的功能。撞到敵人將損失一格生命,用完三格生命後遊戲結束,分數依照長成的高度計算。

(用繪圖軟體畫的遊戲假想圖)

大綱

在進入正題前,先列一下這三十篇文章的大綱,但因為我沒有事先規劃,做到哪想到哪,所以不一定完全遵照大綱。
  • Unity操作介面
  • 分割Sprite
  • 鍵盤操控角色
  • 接裝備、發射裝備
  • 敵人出生、敵人發射子彈
  • 子彈、敵人、主角之間的碰撞
  • 開始、結束、暫停畫面和其他UI
  • 遊戲背景
  • 音效
  • 紀錄分數、排行榜
  • 加入廣告

做完遊戲後,我應該會把整個Project放到Github上,敬請期待。

===本篇正式開始===

Unity Editor操作介面


廢話說完,終於進入正題了。先來介紹Unity的操作介面。

開一個2D的Unity Project,在上排的Windows選單選Layouts → Default,便能看到如下的介面。


大致介紹一下每個欄位的功能:


Scene

用Unity製作遊戲,通常會把一個遊戲分為許多場景(Scene),每個場景都可存入副檔名為.unity的檔案。遊戲選單、遊戲的每個關卡等等都可獨立成為一個場景,並以程式碼相互切換。Scene視窗主要用於場景佈置和關卡設計,在這個視窗內可以自動移動、縮放或旋轉組成一個場景的遊戲物件(Game Object)。左上角的按鍵:


或W、E、R鍵能分別用來控制遊戲物件的座標(Transform)、旋轉角度(Rotation)以及縮放比例(Scale)。

座標:

旋轉角度:

縮放比例:


Hierarchy

位於左側的Hierarchy欄顯示所有存在場景上的遊戲物件。點擊右鍵或上方的Create鈕可以建立新的遊戲物件。在遊戲物件上按右鍵→delete則可刪除該遊戲物件。另外,在Hierarchy欄還可任意把一個遊戲物件拖至另一個遊戲物件上,讓兩個遊戲物件產生父子(parent child)關係。移動、旋轉或縮放一個父遊戲物件會連帶影響子遊戲物件的座標。
點選Hierarchy欄中的Game Object,再把滑鼠游標移到Scene視窗上按f鍵(f for focus),可使Scene視窗聚焦於該遊戲物件。以此可輕鬆選取在Scene視窗較難選取的遊戲物件。
預設的場景會自動產生一個名為Main Camera的遊戲物件,這就是把場景「錄」到遊戲畫面用的攝影機(下面Game欄會詳述)。



Game

Game視窗顧名思意是顯示遊戲畫面用的。按上方的按鈕
可使Unity進入遊戲預覽模式(Play Mode)。Play Mode可實際測試場景的運作,甚至可在Inspector(以下詳述)或Scene欄中即時調整遊戲物件的數值或座標,然而調整後的數值離開Play Mode後便會復原。
要將Scene中的物件顯示於Game視窗,必須在場景上放置擁有Camera Component(以後將詳述Component)遊戲物件。在Hierarchy欄中可以輕易新增Camera。


Project

下方的Project欄其實就是一個檔案瀏覽器,用來管理所有製作遊戲需要的檔案(即Assets),如音樂、圖片、3D模型、遊戲腳本程式(Script)、預設遊戲物件(Prefab)等等。
通常會在Assets資料夾建立子資料夾來整理眾多的檔案,如下圖所示。



Inspector

Inspector欄可以看見所有關於一個遊戲物件的資料──它的名稱(Name)、標籤(Tag)、圖層(Layer)、座標、擁有的元件(Component)等等。(關於Tag、Component以後會詳細介紹。)在Inspector欄中可輕易更動一個遊戲物件的數值,就算進入Play Mode也一樣(但離開Play Mode後數值將重置)。



Console

Console欄會顯示遊戲中的錯誤訊息或警告訊息。此外,也可在Script中加入print()或Debug.Log()以在Console欄顯示除錯訊息。(使用print()函數的類別(class)需繼承(inherit)自MonoBehavior類別。以後寫Script時會再詳加說明)



繪圖進度

除了寫程式外,做遊戲還得畫畫、做音樂。但我畫畫和音樂程度頂多和小學生差不多,所以這30天不會寫任何關於遊戲美術和遊戲音樂的文章,只會在每篇結尾處分享自己的繪圖進度。


今天完成所有可愛(?)的角色,以及他們撿到裝備(開心)和受到傷害(傷心)的表情。

本篇完。鐵人賽的旅程還要持續下去……

沒有留言 :

張貼留言