切換
舊版
前往
大廳
主題

太空侵略者2-遊戲操作簡單認識Unity面板(舊)

紅龍 | 2015-02-21 00:35:32 | 巴幣 6 | 人氣 757

1.開始準備你的專案和面板介紹
2.開始寫程式-操作

1.開始準備你的專案和面板介紹
首先,開啟你的Unity,在任意位置建立你的專案,接著開啟專案
不需要勾選任何東西

接下來的教學以2 by 3的配置為主
在Unity右上角選擇面板配置

Scene:這個面板中所顯示的是遊戲編輯中的場景攝影機
Game:這個面板可以理解成是"玩家所見"的畫面,他所截取的畫面來自場景的中"Main Camera"(每個新場景都會自動建立一個,也可以自己建立多個攝影機來做到其他功能)
你可以想像成你在玩遊戲時,都有一個攝影機在遊戲世界中幫你擷取畫面,而你看到的畫面就是來自這個攝影機
Hierarchy:這裡能看到你在該場景中所有的物件
Porject:這裡可以瀏覽你在這個專案中的所有資源
Inspector:這裡可以看到你當前所選的物件中含有哪些組件(也可以想成有哪些成分在裡面)

接下來,就開始製作的第一步了,接下來會一邊製作一邊介紹
在開啟專案後,你現在有一個空白場景,場景中應該有一個Main Camera
在Hierarchy或Scene中點選他,接著在Inspector面板中可以看到Main Camera中有哪些組件

這裡簡單介紹一下幾個會常用到的組件用途
Transform:所有的遊戲物件都會有這個組件,這個組件中有三組值,分別為
-Position:這個物件的座標
-Rotation:這個物件的旋轉資訊
-Scale:這個物件的縮放資訊

Camera:這個組件主要是關於攝影機的一切設定,項目較多,有興趣可以自己嘗試一下各個選項的功能是什麼
但簡單來說,這個組件就是玩家的眼睛,你可以試著把他前面的勾勾取消,Game畫面馬上就會像被蓋上國防布一樣
Audio Listener:如果說前面的Camera是眼睛,Audio Listener就是玩家的耳朵,如果場景中有音原但是沒有Audio Listener,玩家是聽不到任何東西的

在Transform中,將Position中的X Y Z 設定為0 8 0
Rotation設定為 90 0 0
接著在Hierarchy下面按下Create,選擇3D Object,然後選擇一個Cube
這個動作會在場景中創造一個方塊
同樣設定方塊的Position,設定為 0 0 0
這時候應該會看到Game畫面中有你剛剛創造的方塊
你也可以在Hierarchy中替他改名

這時候你的Game畫面應該很黑,在Hierarchy下面按下Create,選擇Light,然後選擇Directional light

這邊簡單介紹一下目前會用到的幾種光原
Point light:你可以想像他是一個燈泡
Spotlight:聚光燈
Directional light:平行光,可以想像成太陽光,
Area Light:區域光,所謂的區域光比較特別,他會讓這個區域中的所有面都像照到光一樣,但並不會創造光源,可以自行設定強度,不過沒有Pro是沒辦法使用的

現在你的Game畫面應該亮一點了
你會在Scene看到攝影機和Cube的位置
Game中只會看到一個方塊


2.開始寫程式
接下來,要開始做玩家的操作,
在Project的面板按下Create,接著選擇C# Script,這個動作會創造一個程式腳本,你可以替腳本取名字
對這個腳本點兩下會進入Unity預設的Mono編輯器,要注意一下,如果腳本的名字和
public class NewBehaviourScript : MonoBehaviour {
↑這個不一樣的話,是會出現錯誤的
一進入編輯中,應該會看到
void Start () {
}
void Update () {
}
(至於上面的大括弧先別管他)
Start和Update是腳本生命週期中的其中一部分
Start會在物建被載入後執行
Update則是在每個偵裡(60/1秒)會執行一次
Unity還有其他時機使用的內建方法,因為太多先不介紹,如果有需要可以先去找"Unity 生命週期"這個關鍵字

接下來,在將以下這段輸入到Update的{}中,看起來會是這個樣子

void Update () {
if (Input.GetKey (KeyCode.A)) {
gameObject.transform.position+= new Vector3(-5*Time.deltaTime,0,0);
}
}
接著按下Ctrl+S存檔,回到Unity畫面中,這時候Inspection中可以看到剛剛寫的部分已經儲存進去了,在Porject中點一下剛剛的腳本,並按住不放,直接拖到Hierarchy或Scene中的Cube身上
然後按下
接著,場景會開始執行,這時候按下A,你會發現你的方塊開始動了


gameObject.transform.position
這段可以先看前面的gameObject.transform.position
也可以寫成transform.position,功能是一樣的
Unity中的物件必定會有gameObject和transform,而剛剛在設定Cube和攝影機的位置時,我們就是設定了position的數值
而gameObject.transform.position可以理解成指定了"這個物件的.變換.座標"
要注意的是gameObject和transform都必須小寫,因為大寫的GameObject以及Transform代表的是一個型別而不是一個物件(這個在稍後或許會講到)

+=
+=是程式中的運算元,只要搜尋一下"C# 運算"就能找到很多相關資料
大致上可以理解成兩者相加
例如
1+=1  結果:2
5+=18 結果:23
寫在這裡的意思,則是gameObject.transform.position加上後面的數值

new Vector3(-5*Time.deltaTime,0,0);
在Unity中,所有的物件都一個座標,而每個座標包含三個值X Y Z
例如說前面設定了攝影機的Y為8,此時攝影機的座標值就可以寫成Vector3(0,8,0)
因為剛剛設定了你的方塊座標為(0,0,0) 因此+=(-5)的結果就是 你的方塊的座標會變成(-5,0,0)
然後接著會變成(-10,0,0) (-15,0,0) 這樣下去,看起來就像是移動了一樣
那麼,為什麼要有一個*Time.deltaTime呢?
前面有說到,Update是以每秒60次的數度執行,*Time.deltaTime則是讓-5乘以1/60,讓他的速度可以落在每秒-5,而不是每秒-5*60

至於New呢,因為Vector3是一個群組,在C#中你沒辦法單獨對position中的X Y Z做修改,因此你只能創造一整個Vector3,並填入值,然後在+=

if( ){ }
if是一個在程式中會非常經常用到的判斷式,簡單的說,當()裡面的條件成立的時候,就執行{}內的內容
因此,在你不按下A的時候,方塊是不會自己移動的

Input.GetKey (KeyCode.A)
如果有碰過Flish應該對偵聽有印象,這一段即代表"當A被按著"的時候
也就是上面所說的()的條件
整段可以理解成
"如果 (A被按下了){這個遊戲物件.變換.座標+= new 三維向量(-5*Time.deltaTime)} "

另外提一下,打到Get的時候會看到各式各樣的偵聽(主要是建盤和滑鼠)
其中像是GetKey後面就還有GetKeyDown和GetKeyUp
其實他的區別就是,一個只會在按下的那次成立,另外一個只會在放開的時候成立
而左邊和右邊的Ctrl和Alt也是有區別的

發射
晚點補上...

創作回應

更多創作