1. 成员变量
// 名字获取和修改
print(gameObject.name);
gameObject.name = "GameObject改名";
// 查看是否激活
print("isActive: " + gameObject.activeSelf);
// 查看是否为静态
print("isStatic: " + gameObject.isStatic);
// 层级
print("layer: " + gameObject.layer);
// 标签
print("tag: " + gameObject.tag);
// 位置信息 transform
print(gameObject.transform.position); // 等同于 this.transform
2. 静态方法
2.1 创建Unity自带几何体
GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
cube.name = "立方体";
2.2 查找对象
2.2.1 查找单个对象
// (以下方法都只能找到激活对象,不能查找失活的对象)
// (如果场景中有多个满足条件的对象,无法确定找到的是谁)
// 1. 通过对象名查找: 这个方法效率低下,因为它会在场景中查找所有对象
GameObject obj = GameObject.Find("Background");
// 2. 通过 tag 查找
obj = GameObject.FindGameObjectWithTag("Player");
obj = GameObject.FindWithTag("Player");
2.2.2 查找多个对象
// (只能找到激活对象,不能查找失活的对象)
GameObject[] objs = GameObject.FindGameObjectsWithTag("Player");
2.3 实例化对象(克隆对象)
// 用来克隆的对象
// 1. 直接是场景上的某个对象
// 2. 可以是一个预制体对象
public GameObject cloneObj;
GameObject.Instantiate(cloneObj);
2.4 删除对象
// (1.删除游戏对象)
//(2.删除游戏脚本)
// 注意:Destroy不会马上移除对象,一般会在下一帧把这个对象从内存中移除
GameObject.Destroy(cube, 3); // 删除游戏对象
GameObject.Destroy(this); // 删除脚本
GameObject.DestroyImmediate(obj); // 马上移除
2.5 切换场景时不移除
DontDestroyOnLoad(gameObject);
3. 成员方法
3.1 创建空物体
GameObject obj1 = new GameObject();
GameObject obj2 = new GameObject("空物体");
GameObject obj3 = new GameObject("加脚本的空物体", typeof(AudioSource), typeof(Collider2D));
3.2 为对象添加脚本
AudioSource audioSource = obj2.AddComponent<AudioSource>();
3.3 得到脚本
AudioSource audioSource = obj3.GetComponent<AudioSource>();
3.4 标签比较
if (gameObject.CompareTag("Player")) {
print("对象的标签是Player");
}
// 上面的代码等同于下面的代码
if (gameObject.tag == "Player") {print("对象的标签是Player");
}
3.5 设置激活失活
obj2.SetActive(false);
3.6 其他不常用的方法
// 这些方法了解即可,不建议使用,效率比较低
// 找到自己身上所有脚本 的函数去执行
gameObject.SendMessage("TestFun");// 广播,让自己和子对象执行
gameObject.BroadcastMessage("函数名");// 向父对象和自己发送消息,并执行
gameObject.SendMessageUpwards("函数名");
#region 知识点一 GameObject中的成员变量
// 名字
print(gameObject.name);
gameObject.name = "GameObject改名";
// 是否激活
print("isActive: " + gameObject.activeSelf);
// 是否静态
print("isStatic: " + gameObject.isStatic);
// 层级
print("layer: " + gameObject.layer);
// 标签
print("tag: " + gameObject.tag);
// transform
print(gameObject.transform.position); // 等同于 this.transform
#endregion
#region 知识点二 GameObject中的静态方法
// [创建自带几何体]
GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
cube.name = "立方体";
// [查找对象]
// 1.查找单个对象
// (以下方法都只能找到激活对象,不能查找失活的对象)
// (如果场景中有多个满足条件的对象,无法确定找到的是谁)
// 1.1 通过对象名查找: 这个方法效率低下,因为它会在场景中查找所有对象
GameObject obj = GameObject.Find("Background");
// 1.2 通过 tag 查找
obj = GameObject.FindGameObjectWithTag("Player");
obj = GameObject.FindWithTag("Player");
// 2.查找多个对象
// (只能找到激活对象,不能查找失活的对象)
GameObject[] objs = GameObject.FindGameObjectsWithTag("Player");
// [实例化对象(克隆对象)]
GameObject.Instantiate(cloneObj);
// [删除对象]
// (1.删除游戏对象)
//(2.删除游戏脚本)
// 注意:Destroy不会马上移除对象,一般会在下一帧把这个对象从内存中移除
GameObject.Destroy(cube, 3); // 删除游戏对象
GameObject.Destroy(this); // 删除脚本
GameObject.DestroyImmediate(obj); // 马上移除
// [过场景不移除]
GameObject.DontDestroyOnLoad(gameObject);
#endregion
#region 知识点三 GameObject中的成员方法
// 创建空物体
GameObject obj2 = new GameObject("空物体");
GameObject obj3 = new GameObject("加脚本的空物体", typeof(AudioSource), typeof(Collider2D));
// 为对象添加脚本
Lesson2 les2 = obj2.AddComponent<Lesson2>();
// 得到脚本
AudioSource audioSource = obj3.GetComponent<AudioSource>();
// 标签比较
if (gameObject.CompareTag("Player")) { }
if (gameObject.tag == "Player") { }
// 设置激活失活
obj2.SetActive(false);
// [次要的成员方法]
// 了解即可,不建议使用,效率比较低
// 找到自己身上所有脚本 的函数去执行
gameObject.SendMessage("TestFun");
// 广播,让自己和子对象执行
gameObject.BroadcastMessage("函数名");
// 向父对象和自己发送消息,并执行
gameObject.SendMessageUpwards("函数名");
#endregion