Unity指令碼知識教程(一)
指令碼知識概覽
Unity內部的指令碼,是通過附加自定義指令碼物件到遊戲物體組成的。在指令碼物件內部不同志的函式被特定的事件呼叫。最常用的列在下面:
Update:這個函式在渲染一幀之前被呼叫,這裡是大部分遊戲行為程式碼被執行的地方,除了物理程式碼。
FixedUpdate:這個函式在每個物理時間步被呼叫一次,這是處理基於物理遊戲的地方。
在任何函式之外的程式碼:
在任何函式之外的程式碼在物體被載入的時候執行,這個可以用來初始化指令碼狀態。
注意:文件的這個部份假設你是用Javascript,參考用C#編寫獲取如何使用C#和Boo編寫指令碼的資訊。
你也能定義事件控制代碼,它們的名稱都以On開始,(例如OnCollisionEnter),為了檢視完整的預定義事件的列表,參考MonoBehaviour 文件。
常用操作
大多數遊戲物體的操作是通過遊戲物體的Transform或Rigidbody來做的,在行為指令碼內部它們可以分別通過transform和rigidbody訪問,因此如果你想繞著Y軸每幀旋轉5度,你可以如下寫:
function Update(){
transform.Rotate(0,5,0);
}
如果你想向前移動一個物體,你應該如下寫:
function Update(){
transform.Translate(0,0,2);
}
跟蹤時間
Time類包含了一個非常重要的類變數,稱為deltaTime,這個變數包含從上一次呼叫Update或FixedUpdate(根據你是在Update函式還是在FixedUpdate函式中)到現在的時間量。所以對於上面的例子,修改它使這個物體以一個恆定的速度旋轉而不依賴於幀率:
function Update(){
transform.Rotate(0,5*Time.deltaTime,0);
}
移動物體
function Update(){
transform. Translate (0, ,0,2*Time.deltaTime);
}
如果你加或是減一個每幀改變的值,你應該將它與Time.deltaTime相乘。當你乘以Time.deltaTime時,你實際的表達:我想以10米/秒移動這個物體不是10米/幀。這不僅僅是因為你的遊戲將獨立於幀而執行,同時也是因為運動的單位容易理解。( 米/秒)另一個例子,如果你想隨著時間增加光照的範圍。下面的表示式,以2單位/秒改變半徑。
function Update (){
light.range += 2.0 * Time.deltaTime;
}
當通過力處理剛體的時候,你通常不必用Time.deltaTime,因為引擎已經為你考慮到了這一點。
訪問其他元件
元件被附加到遊戲物體,附加Renderer到遊戲物體使它在場景中渲染,附加一個Camera使它變為相機物體,所有的指令碼都是元件,因為它們能被附加到遊戲物體。
最常用的元件可以作為簡單成員變數訪問:
Component 可如下訪問
Transform transform
Rigidbody rigidbody
Renderer renderer
Camera camera (only on camera objects)
Light light (only on light objects)
Animation animation
Collider collider
…等等。
對於完整的預定義成員變數的列表。檢視Component,Behaviour和MonnoBehaviour類文件。如果遊戲物體沒有你想取的相同型別的元件,上面的變數將被設定為null。任何附加到一個遊戲物體的元件或指令碼都可以通過GetComponent訪問。
transform.Translate(0,3,0); //等同於GetComponent(Transform).Translate(0, 1, 0);
注意transfom和Transform之間大小寫的區別,前者是變數(小寫),後者是類或指令碼名稱(大寫)。大小寫不同使你能夠從類和指令碼名中區分變數。應用我們所學,你可以使用GetComponent找到任何附加在同一遊戲物體上的指令碼和元件,請注意要使用下面的例子能夠工作,你需要有一個名為OtherScript的指令碼,其中包含一個DoSomething函式。OtherScript指令碼必須與下面的指令碼附加到相同的物體上。
function Update(){
otherScript = GetComponent(OtherScript); //這個在同一遊戲物體桑找到名為OtherScript的指令碼
otherScript.DoSomething(); //並呼叫它上加的DoSomething
}
更多Unity學習資料請前往paws3d平臺尋找。連結https://www.paws3d.com/learn/,最近又有專業人士直播講解開放世界遊戲關卡設計,詳情可加群935714213