如何把Object轉換成UnityEngine.GameObject
通過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的成員變量很多