2016年1月27日 星期三

Unity開發筆記 - MonoBehaviour - OnMouse

OnMouse

當遊戲物件(GameObject)掛載了 Script 元件,額外再掛載上 Collider 元件時即可使用 Script 的 OnMouse 相關事件。
需要特別注意的是事件觸發範圍為 Collider 元件所涵蓋的範圍,即綠線圍出的區域。

OnMouseEnter
當滑鼠游標移入觸發區域時,可觸發此事件。

OnMouseOver
當滑鼠游標已移入觸發區域並且尚未移出觸發區域前,會持續觸發此事件

OnMouseExit
當滑鼠游標移出觸發區域時,可觸發此事件。

OnMouseDown
當滑鼠按鍵按下時,可觸發此事件。

OnMouseDrag
當滑鼠按鍵已按下並且尚未放開前,會持續觸發此事件。

OnMouseUp

當滑鼠按鍵放開時,可觸發此事件。

OnMouseUpAsButton
當滑鼠按鍵按下與放開是同一個物件,可觸發此事件。

API Documentation 參考資料

2016年1月26日 星期二

Unity開發筆記 - MonoBehaviour - OnDestroy

OnDestroy

「OnDestroy」是當掛載該 Script 物件被銷毀時觸發的事件。
此事件並非預設自動加入在程式碼中,若要使用需要自行加入。

該事件會在場景轉換時或程式結束前觸發。
使用者亦可自行呼叫 GameObject.Destroy() 銷毀物件,銷毀時會觸發 OnDestroy 事件。

API Documentation 參考資料


2016年1月25日 星期一

Unity開發筆記 - Object - Destroy

Destroy

Destroy」是全域可呼叫的靜態方法,當呼叫此方法並以某遊戲物件(GameObject)作為參數,可使該遊戲物件直接銷毀。

// 程式碼範例
GameObject SomeObject = new GameObject();
Destroy(SomeObject);

API Documentation 參考資料

Unity開發筆記 - Object - DontDestroyOnLoad

DontDestroyOnLoad

DontDestroyOnLoad」是全域可呼叫的靜態方法,當呼叫此方法並以某遊戲物件(GameObject)作為參數,可使該遊戲物件不在場景轉換時被回收銷毀。

// 程式碼範例
GameObject SomeObject = new GameObject();
DontDestroyOnLoad(SomeObject);

API Documentation 參考資料


2016年1月6日 星期三

Unity開發筆記 - MonoBehaviour - Awake & Start

Awake

「Awake」是在 Script 物件載入時觸發的事件。
此事件會在「Start」之前被觸發。

Start

「Start」是在 Script 物件載入後在第一個影格會執行的事件。
當開發者建立新的 Script 時,此事件已預設加入在程式碼中,一般常作為 Script 參數的初始化之用途。

API Documentation 參考資料

2016年1月5日 星期二

Unity開發筆記 - MonoBehaviour 元件

繼承鏈

MonoBehaviour > Behaviour > Component > Object

筆記

「MonoBehaviour」類別繼承自「Behaviour」類別,而「Behaviour」類別繼承自「Component」類別,所以 Script 本身也是屬於「元件(可被掛載的)」。

「MonoBehaviour」類別是 Unity 建立 Script 後,在 Script 中預設繼承的類別。該類別包含 Awake、Start、Update、OnEnable、OnGUI、OnDestory ... 等事件供開發者加以運用。最常見的 Start 和 Update 是 Script 預設於程式碼中的事件,若不需使用可加以註解或直接刪除;而其它在「MonoBehaviour」類別中可運用的事件,若需使用必須自行加入於程式碼中。

API Documentation 參考資料

2016年1月3日 星期日

Unity開發筆記 - GameObject & Transform 的操作

Script 中的物件參考

在 Script 中,「gameObject」關鍵字代表了掛載這個 Script 元件的 GameObject;而「transform」關鍵字則代表該 GameObject 所掛載的 Transform 元件,亦可透過「gameObject.transform」來取得 GameObject 掛載的 transform 元件。

GameObject
├Transform
Script (MonoBehaviour)
├.....
├.....
├.....


物件的名稱及標籤

// 取得名稱
string Name = gameObject.name;

// 取得標籤
string Tag = gameObject.tag;

物件的座標

// 取得世界座標
Vector3 Pos = gameObject.transform.position;

// 設置世界座標 為 (x, y, z)
gameObject.transform.position = new Vector3(x, y, z);

// 設置世界座標 為 (0, 0, 0)
gameObject.transform.position = Vector3.zero;

// 取得本地座標
Vector3 Pos = gameObject.transform.localPosition;

// 設置本地座標 為 (x, y, z)
gameObject.transform.localPosition = new Vector3(x, y, z);

// 設置本地座標 為 (0, 0, 0)
gameObject.transform.localPosition = Vector3.zero;

物件的旋轉角度

// 取得世界旋轉角度
Vector3 Rot = gameObject.transform.rotation.eulerAngles;

// 設置世界旋轉角度 為 (x, y, z) Ex-1
gameObject.transform.rotation.eulerAngles = new Vector3(x, y, z);
// 設置世界旋轉角度 為 (x, y, z) Ex-2
gameObject.transform.rotation = Quaternion.Euler (new Vector3(x, y, z));

// 設置世界旋轉角度 為 (0, 0, 0) Ex-1
gameObject.transform.rotation.eulerAngles = Vector3.zero;
// 設置世界旋轉角度 為 (0, 0, 0) Ex-2
gameObject.transform.rotation = Quaternion.Euler (new Vector3(0, 0, 0));

// 取得本地旋轉角度
Vector3 Rot = gameObject.transform.localRotation.eulerAngles;

// 設置本地旋轉角度 為 (x, y, z) Ex-1
gameObject.transform.localRotation.eulerAngles = new Vector3(x, y, z);
transform.localRotation.eulerAngles= new Vector3(x, y, z);
// 設置本地旋轉角度 為 (x, y, z) Ex-2
gameObject.transform.localRotation = Quaternion.Euler (new Vector3(x, y, z));

transform.localRotation = Quaternion.Euler (new Vector3(x, y, z));

// 設置本地旋轉角度 為 (0, 0, 0) Ex-1
gameObject.transform.localRotation.eulerAngles= Vector3.zero;
// 設置本地旋轉角度 為 (0, 0, 0) Ex-2
gameObject.transform.localRotation = Quaternion.Euler (new Vector3(0, 0, 0));

物件的縮放尺寸

// 取得本地縮放尺寸
Vector3 Sca = gameObject.transform.localScale;

// 設置本地縮放尺寸為 (x, y, z)
gameObject.transform.localScale = new Vector3(x, y, z);

// 設置本地縮放尺寸為 (0, 0, 0)
gameObject.transform.localScale = Vector3.zero;

物件操作

// 取得子物件數量
int ChildCount = gameObject.transform.childCount;

// 以子物件的索引位置取得子物件(GameObject)
int ChildIndex = 0;
GameObject Child = gameObject.transform.getChild( ChildIndex ).gameObject;

// 取得父物件(GameObject)
GameObject Parent = gameObject.transform.parent.gameObject;

// 設置父物件(GameObject)
GameObject NewParent = new GameObject();
gameObject.transform.SetParent( NewParent.transfrom );

// 取得指定名稱的物件
string ObjectName = "SomeGameObject";
GameObject SearchObject = GameObject.Find( ObjectName );

// 毀滅指定物件
GameObject SomeObject = new GameObject();
GameObject.Destroy( SomaObject );

// 場景載入時不毀滅指定物件
GameObject SomeObject = new GameObject();
GameObject.DontDestoryOnLoad( SomeObject );

// 複製物件
GameObject SomeObject = new GameObject();
GameObject CloneObject = GameObject.Instantiate( SomeObject );

// 取得物件的掛載元件 Component - Collider
Collider currentCollider = gameObject.GetComponent<Collider>();

// 取得物件的掛載元件 Component - Renderer
Renderer currentRenderer = gameObject.GetComponent<Renderer>();