Unity3D腳印4——GameObject

 通信,動態建立,Prefab,銷燬ide

 
經過Hierarchy面板下的Create菜單能夠手動地建立一個GameObject,它能夠是一個相機,一個燈光,或者一個簡單的模型,當咱們要在程序裏面動態地建立一個相機的時候,能夠new一個GameObject,而後把Camera組件Add給它就能夠了,建立燈光,GUI等也相似,但要建立簡單模型的時候,我發現並無相似Cube,Sphere這樣的組件可供添加,後面知道,經過GameObject這個類的一個靜態方法能夠達到這個目的
 
static GameObject CreatePrimitive(PrimitiveType type);
 
能夠根據PrimitiveType建立五種類型的基礎模型
 
PrimitiveType.Plane,PrimitiveType.Cube,PrimitiveType.Sphere,PrimitiveType.Capsule,PrimitiveType.Cylinder
 
Unity3D提供一種被稱爲Prefab的預置對象,它是以文件的形式保存在硬盤上的一個GameObject,它裏面可能包含了各類設置,組件,還有一些腳本。Prefab容許咱們在不一樣的Scene,甚至Project中使用同一個對象,例如我實現了一個×××,經過打包成Prefab,我能夠在另一個遊戲裏面直接使用它。
 
當一個Prefab對象被修改的時候,它的全部實例都會相應地被修改
 
在代碼裏面動態地實例化一個Prefab對象
 
public GameObject obj;
obj = Instantiate( obj  );
 
要先建立一個公有變量,而後把這個Prefab拖到這個變量上,而後才能夠用它來實例化對象(我感到一種蛋蛋的憂傷,能不拖嗎)
 
經過Resources這個類的靜態方法能夠將Prefab對象動態加載進來,建立GameObject
 
GameObject之間的通信,在遊戲中,咱們每每須要知道其餘對象的一些信息,因此咱們常常須要動態地查詢另一個GameObject
 
1. 查找父節點 transform.parent
 
2. 查找子節點 transform.Find("name");  transform.Find("Arm/Hand/Finger"); 沒有找到會返回null,名字若是包含"/"字符將像路徑同樣穿越層次
 
3. 查找場景中的其餘GameObject 
GameObject.Find 從Scene下開始查找,根據GameObject的名字進行查找,容許使用"/"穿越層次查找,
GameObject.FindWithTag根據Tag查找一個GameObject,
GameObject.FindGameObjectsWithTag 根據Tag批量查找GameObject
 
GameObject的name和Tag能夠直接設置,但Tag須要在標籤管理器先定義一個Tag,這個Tag纔可用,你不能將一個未定義的Tag賦給GameObject的Tag變量
 
最後還有一種搓搓的通信方法,經過Message來調用其餘GameObject,默認是垃圾短信羣發,也能夠將一個Object穿進去,而後調它的方法
 
methodName爲方法名,value爲方法的參數,options表示是否必須有對象接收該消息(若是是,且沒有對象接受,u3d報錯)
 
//調用本級別全部的GameObject上全部腳本的methodName方法
void SendMessage(string methodName, object value = null, SendMessageOptions options = SendMessageOptions.RequireReceiver);
 
//朝本級別和上級父節點發送調用命令
void SendMessageUpwards(...)
 
//目標是本級別和所有子節點...
void BroadcastMessage(...)
 
調用Object的Destroy方法能夠銷燬一個GameObject,組件,或者資源。這是一個靜態方法,函數的原型爲 static void Destroy(Object obj, float t = 0.0F );
 
能夠經過將this傳入,銷燬本身。
 
GameObject的成員變量不少
相關文章
相關標籤/搜索