加载中...

Unity3d---GameObject类

GameObject中的成员变量

print(this.gameObject.name); //名字
this.gameObject.name="改名";
print(gameObject.activeSelf);//是否激活
print(gameObject.isStatic);//是否是静态
print(gameObject.layer);//层级
print(gameObject.tag);//标签
print(gameObject.transform.position);

GameObject中的静态方法

创建Unity自带的几何体

GAmeObjectobj=GameObject.CreatePrimitive(PrimitiveType.Cube);
obj.name="创建的立方体"

查找对象

相关知识
两种找单个对象的共同点:
1.无法找到失活的对象的,只能找到激活的对象
2.如果场景种存在多个满足条件的对象 我们无法准确确定找到的是谁

查找单个对象

通过对象名查找

通过对象名查找 这个查找效率比较低 因为他会在场景种的所有对象去查找
如果没有找到 就会返回null
GameObject obj2=GameObject.Find("Main Camera");

通过tag(标记)来查找对象

GameObject obj3=GameObject.FindWithTag("Player)";

得到某一个单个对象 目前有两种方式
1.是public从外部面板拖拽 进行关联
2.通过API去找

查找多个对象

找多个对象的API只能是通过tag,名字不行
通过tag找到多个对象,只能找到激活对象,无法找到失活对象

GameObject[] objs=GameObject.FindGameObjectsWithTag("Player");

额外知识点
Unity中的Object和C#中万物之父object的区别
Unity里面的Object命名空间载UnityEngine中的Object类 也是集成万物之父的一个自定义类
C#中的Object 命名空间是在System中的

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

根据一个GameObject对象 创建出一个和它一模一样的对象
GameObject obj5=GameObject.Instantiate(myObj);//也可以直接Instantiate(myObj)

删除对象

删除对象的作用
1.是删除指定的一个游戏对象
2.是删除一个指定的脚本对象
注意:这个Destroy方法 不会马上移除对象 只是给这个对象加了一个移除标识
一般情况下 他会在下一帧时把这个对象移除并从内存中移除

GameObject.Destroy(myObj);//删除对象的方法
GameObject.Destroy(obj5,5);//第二个参数 代表延迟几秒钟删除
GameObject.Destroy(this);//删除脚本
Destroy(obj5,GetComponent<Rotate>());//删除组件

如果没有特殊需求 就是一定要马上移除一个对象的话
建议使用上面的Destroy方法 因为是异步的 降低卡顿的几率
下面这个方法就是立即把对象 从内存中移除
GameObject.DestroyImmediate(myObj);
如果是继承MonoBehavior的类 不用写GameObject
Destroy(myObj2);

过(切换)场景不移除

默认情况 在切换场景是 场景中对象都会被自动删除掉
如果你希望某个对象 过场景不被移除
一般是传 依附的GameObject对象
GameObject.DontDestroyOnLoad(this.gameObject);

GameObject中的成员方法

创建空物体

  • GameObject obj=new GameObject();
  • GameObject obj=new GameObject("创建的空物体");
  • GameObject obj=new GameObject("顺便加脚本的空物体",typeof(Test),typeof(AudioSource));

为对象添加脚本

继承MonoBehavior的脚本 是不能够去new
可以直接使用GameObject提供的方法即可

Test les2=obj6.AddComponent<Test>();//用泛型更方便

通过返回值 可以得到加入的脚本信息,进行处理

标签比较

两种方法

  • if(this.gameObject.CompareTag("Player")print("Yes");
  • if(this.gameObject.tag=="Player")print("Yes");

设置激活失活

obj.SetActive(false);

通过广播或者发送消息的形式 让自己或者别人 执行某些行为方法

命令自己 执行什么行为
命令自己去执行这个TestFun这个函数 会在自己身上挂载的所有脚本去找这个名字的函数
找到自己身上所有的脚本 有这个名字的函数去执行 私有方法也可

this.gameObject.SendMessage("TestFun");
this.gameObject.SendMessage("TestFun2",199);

广播行为 让自己和自己的子对象执行

this.gameObject.BroadcastMessage("TestFun");

向父对象和自己发送消息 并执行

this.gameObject.SendMessageUpwards("函数名");

posted @ 2022-02-20 12:13  lxp_blog  阅读(336)  评论(0编辑  收藏  举报