我們先打開FirstUnityScript這個檔,看看裡面的構造
using UnityEngine;
這行的意思是,使用UnityEngine這個命名空間的方法,這裡是命名空間的說明
public class FirstUnityScript : MonoBehaviour
每個新建立的script檔都是一個類別,並且他會繼承MonoBehaviour這個類別,這樣才能使用Unity本身專有的語法,也才能讓Unity把這個script當成Component來用,附加在GameObject上面,你可以把滑鼠移到MonoBehaviour 上面,就會顯示它是屬性哪個命名空間的類別
// Use this for initialization
void Start ()
這個方法上面有一個註解說明了,把它使用來做初始化的動作,在第一篇時有提到了,初始化就是把一些預設值設定好,比如說你希望一支怪物出生時,他的HP是滿血的,那你就可以在這裡設定,他只有在一開始時會被執行一次
// Update is called once per frame
void Update ()
上面的註解說明它在每一幀都被呼叫一次,這是什麼意思,在第一篇時提到過遊戲循環,而這個方法就是在Unity的遊戲循環裡都會被執行一次,而遊戲循環的次數通常跟遊戲渲染的次數是一樣的,如果遊戲FPS是60,那就代表這個方法在一秒內會被執行60次,像移動你就可能要放在Update ()裡,以不斷更新你的人物的最新位置,或是像獲得按鍵輸入也是,在這邊順便提一下FPS的意思,它的全名是(Frames Per Second)每秒顯示幀數),在第一篇的第六步:渲染圖像,它剛好是遊戲循環的最後一步,所以一幀就是一個循環,如果這個循環一秒能跑60次,那就有60幀,那有時我們的硬體很強,但畫面還是顯示60FPS,那就是遊戲廠商在設計時,把其它多餘的時間拿來做其它的事,以充分利用硬體的效能
Start ()跟Update ()這兩個方法在Unity裡是有執行的先後順序的,Start()就比Update()還早執行,因為通常你會先做初始化之後才開始做AI更新的動作,另外除了這兩個是建立後自己產生的方法以外,Unity還有提供許多不同用途的方法,當然它們執行的先後順序也是有差別,見下圖
你看還有這麼多的方法,對於初始化還有Awake(),他的順序比Start()還優先,那有了Start()這個方法來做初始化了,為什麼還要有Awake()呢?那是因為每個掛在場景裡物件上面的script,Unity會一個一個的輪流執行它們裡面的方法,但執行的方式是先跑完所有script的Awake()之後,再跑完所有的Start(),然後再跑每個script的Update(),它並不是把每個script內的方法一次跑完才換下一個script,所以如果你有個script裡的初始化必須早於其他的script,那你就可以把它寫在Awake()裡,現在我們來看一下Awake()這個方法的說明,一樣點擊選單上的Window裡的Scripting Reference來打開參考手冊查詢
上面也清楚的說明了,它的用途跟範例
再來我們查詢MonoBehaviour這個名字,你會看到一長串的名單,這些都是繼承了MonoBehaviour這個類別可以使用的方法
這些方法都要好好的閱讀過,這樣才知道如何利用Unity來建立你的遊戲
以上是對於Unity的script一個初步的介紹,再來會介紹如何使用script做一些應用
遊戲程式設計與Unity3D引擎初步認識(五)