Posted on 2013-10-30 14:16
點(diǎn)點(diǎn)滴滴 閱讀(7604)
評論(0) 編輯 收藏 引用 所屬分類:
02 編程語言
通過Hierarchy面板下的Create菜單可以手動地創(chuàng)建一個(gè)GameObject,它可以是一個(gè)相機(jī),一個(gè)燈光,或者一個(gè)簡單的模型,當(dāng)我們要在程序里面動態(tài)地創(chuàng)建一個(gè)相機(jī)的時(shí)候,可以new一個(gè)GameObject,然后把Camera組件Add給它就可以了,創(chuàng)建燈光,GUI等也類似,但要?jiǎng)?chuàng)建簡單模型的時(shí)候,我發(fā)現(xiàn)并沒有類似Cube,Sphere這樣的組件可供添加,后面知道,通過GameObject這個(gè)類的一個(gè)靜態(tài)方法可以達(dá)到這個(gè)目的
static GameObject CreatePrimitive(PrimitiveType type);
可以根據(jù)PrimitiveType創(chuàng)建五種類型的基礎(chǔ)模型
PrimitiveType.Plane,PrimitiveType.Cube,PrimitiveType.Sphere,PrimitiveType.Capsule,PrimitiveType.Cylinder
Unity3D提供一種被稱為Prefab的預(yù)置對象,它是以文件的形式保存在硬盤上的一個(gè)GameObject,它里面可能包含了各種設(shè)置,組件,還有一些腳本。Prefab允許我們在不同的Scene,甚至Project中使用同一個(gè)對象,例如我實(shí)現(xiàn)了一個(gè)子彈,通過打包成Prefab,我可以在另外一個(gè)游戲里面直接使用它。
當(dāng)一個(gè)Prefab對象被修改的時(shí)候,它的所有實(shí)例都會相應(yīng)地被修改
在代碼里面動態(tài)地實(shí)例化一個(gè)Prefab對象
public GameObject obj;
obj = Instantiate( obj );
要先創(chuàng)建一個(gè)公有變量,然后把這個(gè)Prefab拖到這個(gè)變量上,然后才可以用它來實(shí)例化對象(我感到一種蛋蛋的憂傷,能不拖嗎)
通過Resources這個(gè)類的靜態(tài)方法可以將Prefab對象動態(tài)加載進(jìn)來,創(chuàng)建GameObject
GameObject之間的通訊,在游戲中,我們往往需要知道其他對象的一些信息,所以我們經(jīng)常需要?jiǎng)討B(tài)地查詢另外一個(gè)GameObject
1. 查找父節(jié)點(diǎn) transform.parent
2. 查找子節(jié)點(diǎn) transform.Find("name"); transform.Find("Arm/Hand/Finger"); 沒有找到會返回null,名字如果包含"/"字符將像路徑一樣穿越層次
3. 查找場景中的其他GameObject
GameObject.Find 從Scene下開始查找,根據(jù)GameObject的名字進(jìn)行查找,允許使用"/"穿越層次查找,
GameObject.FindWithTag根據(jù)Tag查找一個(gè)GameObject,
GameObject.FindGameObjectsWithTag 根據(jù)Tag批量查找GameObject
GameObject的name和Tag可以直接設(shè)置,但Tag需要在標(biāo)簽管理器先定義一個(gè)Tag,這個(gè)Tag才可用,你不能將一個(gè)未定義的Tag賦給GameObject的Tag變量
最后還有一種搓搓的通訊方法,通過Message來調(diào)用其他GameObject,默認(rèn)是垃圾短信群發(fā),也可以將一個(gè)Object穿進(jìn)去,然后調(diào)它的方法
methodName為方法名,value為方法的參數(shù),options表示是否必須有對象接收該消息(如果是,且沒有對象接受,u3d報(bào)錯(cuò))
//調(diào)用本級別所有的GameObject上所有腳本的methodName方法
void SendMessage(string methodName, object value = null, SendMessageOptions options = SendMessageOptions.RequireReceiver);
//朝本級別和上級父節(jié)點(diǎn)發(fā)送調(diào)用命令
void SendMessageUpwards(...)
//目標(biāo)是本級別和全部子節(jié)點(diǎn)...
void BroadcastMessage(...)
調(diào)用Object的Destroy方法可以銷毀一個(gè)GameObject,組件,或者資源。這是一個(gè)靜態(tài)方法,函數(shù)的原型為 static void Destroy(Object obj, float t = 0.0F );
可以通過將this傳入,銷毀自己。
GameObject的成員變量很多