Uniyt3D 中使用GameObject.Find(string name)需要知道的几点:
1、如果场景中有很多个名字为name的游戏物体,查找的顺序是最晚创建的最先被找到(与创建的层级也就是hierarchy的位置无关,与修改名字的时间无关),只与创建该对象的时间有关
2、假设游戏物体的名字有“namename”“name”“name”三个游戏物体,第一个name是第二个name的父节点,如图所示:
当我使用GameObject.Find(“namename”) 的时候,一目了然会找到“namename”这个游戏物体,那如果我删掉namename这个游戏物体的时候呢,
我再使用GameObject.Find(“namename”) 的时候,也会找到一个游戏物体,这个物体是第二个name也就是那个 孩子 级的name。这里默认了父节点与子节点的名字是连接在一起的。比如:
当我使用GameObject.Find(“45”) 的时候会找到 5 这个游戏物体
当我使用GameObject.Find(“12”) 的时候会找到 2 这个游戏物体
当我使用GameObject.Find(“23”) 的时候会找到 3这个游戏物体
当我使用GameObject.Find(“34”) 的时候会找到 4这个游戏物体
当我使用GameObject.Find(“345”) 的时候会找不到游戏物体
当我使用GameObject.Find(“2345”) 的时候会找不到游戏物体
当我使用GameObject.Find(“12345”) 的时候会找不到游戏物体
也就是说只有两个连在一起的才行,三个及其以上都不行了。
又比如我现在有两个同名的子对象又该如何:
当我使用GameObject.Find(“df”) 的时候会找到第一个 f ,也就是Child(0)这个 f 。
3、GameObject.Find很耗时间的,一般通过Tag找,或通过Transform.Find
4、能不用就不用~