【Unity教程】找到对象的脚本的几种方法

在实际的脚本编程中,使用查找方法,调用对象,是不可避免的,但是一般耗时的并且不可避免的代码调用,都放在初始化函数当中,

这也就是为什么游戏当中初始化的时间很长的原因,当然也可以避免游戏初始化时间过长,这就要牺牲及时的效率

会使得游戏的过程不流畅,导致游戏所有的动作都需要一定的时间,当然效率和时间当中,要有取舍,这也是不可避免的


不建议对物体进行 activie = false; 处理,因为一旦养成这样的习惯,当大量的脚本挂在物体上面的时候,而且有其他的脚本对activie = false;物体的脚本

进行调用的时候,一旦脚本找不到该物体,就会引起一系列的代码崩溃,使得程序出现错误

如果想使得游戏物体隐藏,最好直接使得该物体的scale(0,0,1)【2D】或者是scale(0,0,0)【3D】


在Unity当中,想要对不同对象的脚本进行调用

物体A挂了脚本A,物体B挂了脚本B

物体B的脚本B想要使用物体A的脚本A

首先要获得当前物体A,然后获得物体A的 组件 脚本A


GameObject.Find()
    GameObject root = GameObject.Find(“GameObject”);
    GameObject root = GameObject.Find(“GameObject/Cube”);

找到的物体基本上是没有同名的,如果有同名的,则会找到第一个

如果需要找到大量同名的不同对象,参考FindGameObjectsWithTag的使用方法

在LTest里面调用DBtest.cs文件

首先声明

private DBtest dbtest;//当然是否是公有成员,最好是私有成员,这样在调用的时候就不会弄混


DBtest.cs文件内容首先要声明

public string hello;


FindGameObjectsWithTag

var respawns = GameObject.FindGameObjectsWithTag ("enemy");

 foreach (var respawn in respawns)  [这里应该是foreach,而不是for循环]
{
...............

}

如果标签enemy中,有大量不同的对象,可以遍历每个对象,找到对应的名字或者属性,方法如上所示


Transform.Find()


 foreach (Transform t in GetComponentsInChildren())//遍历此.CS文件挂的物体下每个子物体
        {
          print("name:" + t.name + "\n");
            if (t.GetComponent() != null)//判断每个子物体是否有MeshRenderer组件
            {
                t.GetComponent().enabled = false;//判断每个子物体是否有MeshRenderer组件,如果有,使其透明
            }
        }


        Transform EGO = Resources.Load("EmptyGO",typeof(Transform))as Transform;
        gob = Instantiate(EGO);
        //加载图片,进行接收
        //添加加载到的图片资源到2D精灵组件


GameObject.SendMessage("HelloFuction");

GameObject代表你找到的对象,HelloFuction意思是名字是HelloFuction的函数


SendMessageUpwards

它的作用和SendMessage类似,只不过它不仅会向当前对象推送一个消息,也会向这个对象的父对象推送这个消息(记住,是会遍历所有父对象)。


相关资料:

【Unity3D游戏开发】GameObject.Find()、Transform.Find查找隐藏对象 (十)

GameObject.find方法的作用

#你好Unity3D#Unity获取游戏对象详解(来自我的长微博)

Unity获取游戏对象详解

Unity3D中的游戏对象的SendMessage方法


你可能感兴趣的:(Unity,Unity教程,Unity资料,代码分析,Unity经验,Unity函数,Unity精灵,Unity对象)