2012年6月14日 星期四

[Unity Script] 基本物件操作(1) - 移動﹑旋轉

在本章,我們會介紹如何旋轉,移動一些物體,在此之前,我們首先要創建一個物體。

1. 先開啟Unity,然後在上方list中選GameObject > Create Other > Cube
Cube是一個正方體,你也可選擇創建Sphere(球體)等物件,隨你喜歡

2. 接著選取Assets>create>javascript,創建一個javaScript的腳本

3. Project介面中,你會看到剛才創建了一個未命名的script,先重新命名,如改成"Move3D"

4. double click這個script,然後它會自動開啟UnityScript的編輯器。

在新的Script中,你會看到以下程式碼:
#pragma strict
function Start () {

}
function update(){

}

你目前還不用理解第一行: #pragma strict 到底替你做了什麼,你只需要大概知道,前置處理器替你作了一些事情,而這些事情對程式運行有幫助。

新創建的Script預設只有兩個functionstart()update(),在start(){}中的腳本會在物件完成載入後立刻被呼叫,換言之,它通常用於初始化設定,例如物件的起始坐標位置。
例如,我們可以寫:
function Start () {
  transform.position.x = 0;
  transform.position.y = 0;
  transform.position.z = 0;
}
寫完儲存後,把script拖到你剛才創建的物件,播放程序,以上程式便會把物件的初始坐標設為(0,0,0)
此範例中,transform是你指定的物件的一個ComponentTransform類別是unity任何object的基本元素,它指向物件的坐 標,位置,大小等資訊。而它的Position成員,實際上是一個三維向量(Vector3)類別。你除了可以在script中初始化物件的坐標,也可選 擇直接在以下介面中輸入物件的Transform初始值。
























然而,若我們要旋轉或移動物件,該如何作呢?

施轉(Rotate)

通常我們不會一次過旋轉物件,而是慢慢地旋轉,所以我們要在update() function中撰寫script
同樣的,我們利用transform指向目前的物件,然後呼叫Rotate方法。
function update(){
// 每一秒大概旋轉3
transform.Rotate(0, 3*Time.deltaTime, 0);
}

Time.deltaTime 傳回對上一次執行update()直至現在所經過的時間。這個數值非常重要,因為它可以確保在不同效能的電腦上,物件旋轉的頻率不會有太大差異。(如果你 曾經寫過ActionScript,你應該馬上想起onEnterFrame,每播放一影格,便會執行onEnterFrame指定的函數,但這種做法的 最大缺點是,在不同電腦上可能會有截然不同的動畫效果。比較之下,在UnityTime.deltaTime解決了這個問題。)

移動

一般而言,移動物件有兩種方法,最傳統的方法是加減物件的坐標值,例如要一物件每秒向右移動10個單位,做法便是:
function update(){
transform.position.x += 10*Time.deltaTime;
}
這種做法在建立2D遊戲上是非常方便的,但是用來建立3D遊戲卻非常麻煩,在Unity中,你被鼓勵用向量(Vector)類別來移動物件。在向量類別中,你可以直觀地移動3D物件,而且還可以簡單地合併,旋轉向量。

// 首先建立一個三維向量物件
private var vector:Vector3 = Vector3(1,1,1);
function update(){
// 每秒移動50單位向量
transform.position += 50*vector*Time.deltaTime;
}

以上的程式,就相當於

function update(){
transform.position.z += 50*Time.deltaTime;
transform.position.y += 50*Time.deltaTime;
transform.position.x += 50*Time.deltaTime;
}

顯然而見,在Unity中,學會向量操作是非常重要的。

參考文件:


Life_programmer

沒有留言:

張貼留言