Unity入门之重要组件和API(1) : GameObject

 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Unity打怪升级

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值