构造方法
//使用构造函数GameObject (name : String)
GameObject g1 = new GameObject("GO1");
g1.AddComponent<Rigidbody>();
//使用构造函数GameObject ()
GameObject g2 = new GameObject();
g2.AddComponent<FixedJoint>();
//使用构造函数GameObject (name : String, params components : Type[])
GameObject g3 = new GameObject("G3",typeof(MeshRenderer),typeof(Rigidbody),typeof(SpringJoint));
Debug.Log("g1 name:" + g1.name + "\nPosition:" + g1.transform.position);
Debug.Log("g2 name:" + g2.name + "\nPosition:" + g2.transform.position);
Debug.Log("g3 name:" + g3.name + "\nPosition:" + g3.transform.position);
实例属性
Active
GameObject有两个常用属性activeSelf,activeInHierarchy
他俩都是判定当前GO是否是激活状态,也就是下图中的对钩是否打上,但他们的区别是,activeSelf是完全判断这个对钩是否打上,而activeInHierarchy则要求在整个Hierarchy中是否被激活,它依赖它所有父节点,如果有一个父节点激活状态为false那么activeInHierarchy则为false。
image.png
//初始状态:cube1激活,cube2非激活,cube3激活
Debug.Log("cube1.activeSelf:" + cube1.activeSelf); //true
Debug.Log("cube2.activeSelf:" + cube2.activeSelf); //false
Debug.Log("cube3.activeSelf:" + cube3.activeSelf); //ture
Debug.Log("cube1.activeInHierarchy:" + cube1.activeInHierarchy);//ture
Debug.Log("cube2.activeInHierarchy:" + cube2.activeInHierarchy);//false
Debug.Log("cube3.activeInHierarchy:" + cube3.activeInHierarchy);//false
实例方法
1.获取第一个组件
GetComponent(typeof(Rigidbody))as Rigidbody;
GetComponent<Rigidbody>();
GetComponent("Rigidbody") as Rigidbody;
2.获取本身和孩子的第一个组件
GetComponentInChildren(typeof(Rigidbody)) as Rigidbody;
GetComponentInChildren<Rigidbody>();
3.获取组件数组
Component[] cjs = GetComponents(typeof(ConfigurableJoint)) as Component[];
GetComponents<ConfigurableJoint>();
4.获取本身和孩子的组件数组。其中的bool类型代表是否获取未激活状态的组件。
GetComponentsInChildren(typeof(ConfigurableJoint), false) as Component[];
GetComponentsInChildren(typeof(ConfigurableJoint), true) as Component[];
GetComponentsInChildren<ConfigurableJoint>(true);
GetComponentsInChildren<ConfigurableJoint>();
5.发送信息SendMessage
利用反射机制,调用自身或者其他类的方法。例如有3个cube,cube1作为父级,cube2作为子级,cube3作为cube2的子级。
//向子类及自己发送信息,所有子类和本身都会调用一次GetParentMessage方法。
gameObject.BroadcastMessage("GetParentMessage",gameObject.name+":use BroadcastMessage send!");
//向自己发送信息,调用自己类的GetSelfMessage方法
gameObject.SendMessage("GetSelfMessage",gameObject.name+":use SendMessage send!");
//向父类及自己发送信息,所有父类和本身调用一次GetChildrenMessage方法
gameObject.SendMessageUpwards("GetChildrenMessage",gameObject.name+":use SendMessageUpwards send!");
//一个接受父类发送信息的方法
private void GetParentMessage(string str){
Debug.Log(gameObject.name + "收到父类发送的消息:" + str);
}
//一个接受自身发送信息的方法
private void GetSelfMessage(string str)
{
Debug.Log(gameObject.name + "收到自身发送的消息:" + str);
}
//一个接受子类发送信息的方法
private void GetChildrenMessage(string str)
{
Debug.Log(gameObject.name + "收到子类发送的消息:" + str);
}
静态方法
CreatePrimitive方法,创建GameObject对象。
GameObject plane = GameObject.CreatePrimitive(PrimitiveType.Plane);
GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
cube.transform.position = new Vector3(0, 0.5F, 0);
GameObject sphere = GameObject.CreatePrimitive(PrimitiveType.Sphere);
sphere.transform.position = new Vector3(0, 1.5F, 0);
GameObject capsule = GameObject.CreatePrimitive(PrimitiveType.Capsule);
capsule.transform.position = new Vector3(2, 1, 0);
GameObject cylinder = GameObject.CreatePrimitive(PrimitiveType.Cylinder);
cylinder.transform.position = new Vector3(-2, 1, 0);
网友评论