【Unity】GameObject中的静态方法

11 篇文章 1 订阅
10 篇文章 0 订阅

一、创建自带几何体

这个静态方法是有GameObject类型返回值的,可以用一个GameObject变量去接收它,然后再做后续的逻辑处理,还能得到这个几何身上挂载的脚本

GameObject.CreatePrimitive(PrimitiveType.Cube);
GameObject obj = GameObject.CreatePrimitive(PrimitiveType.Sphere);
//改个名字
obj.name = "YeFly创建的几何体";
//挂载的脚本
obj.GetComponent

二、查找对象相关的知识

1、查找单个对象

无法找到失活的对象

如果场景中有多个满足查找条件的对象,我们无法确定找的是哪一个

        1)通过对象名查找

                这个查找效率比较低,因为它会在场景中所有对象中进行查找,找到了,就返回对应对象,没找到,返回null

GameObject obj2 = GameObject.Find("Wall");
        //      保险起见,使用前先判断是否找到
    if (obj2 != null)
        {
            print("根据名字找的对象:" + obj2.name);
        }
        else
        {
            print("没找到Wall对象");
        }

        2)通过Tag查找

GameObject obj3 = GameObject.FindWithTag("Player");
//obj3 = GameObject.FindGameObjectWithTag("Player");
    if (obj3 != null)
        {
            print("根据Tag找的对象:" + obj3.name);
        }
        else
        {
            print("没找到Tag为Player的对象");
        }

2、查找多个对象

只能通过Tag去查找多个对象

将返回一个GameObject数组

GameObject[] objs = GameObject.FindGameObjectsWithTag("Player");
print("Tag为Player的对象个数:" + objs.Length);

补充:

a.还有几个用的很少的查找方法,都是GameObject的父类Object提供的方法

b.Unity里的Object 不是指C#里的万物之父object,Unity里的Object是Unity自己写的,它也属于万物之父object

c.Unity的Object的命名空间在UnityEngine中;C#的object的命名空间在System中

d.还有方法FindObjectOfType<>()可找到场景中挂载了某一个脚本的对象(谁挂了这个脚本 就找谁),此方法效率更加底下,因为它不仅要去遍历对象,还要去遍历脚本

三、实例化(克隆)对象的方法

根据一个GameObject对象创建出一个和它一模一样的GameObject对象,返回一个被克隆的对象,使用GameObject类型的变量接收,如果继承了MonoBehaviour 可以不用写前面的GameObject,因为这个方法是Unity的Object基类提供的,所以可以直接用Instantiate(obj)

GameObject insObj = GameObject.Instantiate(obj);
Instantiate(obj);

四、删除对象的方法

        1、下一帧就删除

GameObject.Destroy(obj);

        2、延迟一段时间后 再删除

//参数1 要删除的对象
//参数2 几秒后删除
GameObject.Destroy(obj, 3);

        3、Destroy不仅可以删除对象,还可以删除脚本

GameObject.Destroy(this);

        这个Destroy不会马上删除对象,只是给这个对象加了一个移除标识,一般情况下,会在下一帧 把对象删除,这么做是为了减少卡顿

        如果继承了MonoBehaviour 可以不用写前面的GameObject,因为这个方法是Unity的Object基类提供的,所以可以直接用Destroy(obj);

       4、如果有特殊需求 需要马上删除对象(一般很少用)

GameObject.DestroyImmediate(obj);

五、GameObject对象过场景不移除

Unity中可以创建多个游戏场景,难免会场景之间来回切换,而Unity的机制是,一旦切换到另一个场景,此场景里的对象会被全部移除,但如果你想让一些对象出现在每一个场景,那就使用这个方法


例如当前脚本挂在的对象不想在切换场景的时候被移除

GameObject.DontDestroyOnLoad(this.gameObject);

//DontDestroyOnLoad(this.gameObject);

如果继承了MonoBehaviour 可以不用写前面的GameObject,因为这个方法是Unity的Object基类提供的,所以可以直接用

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

hiOoo.

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

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

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

打赏作者

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

抵扣说明:

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

余额充值