再简单不过了,只需将它们分配给不同的变量
public GameObject johnCharacterOnLeft;
public GameObject johnCharacterWhoJoinsLater;
void Start()
{
johnCharacterOnLeft.SetActive(true);
johnCharacterOnLeft.Whatever(true);
johnCharacterOnLeft.Whatever(true);
johnCharacterOnLeft.Whatever(true);
johnCharacterWhoJoinsLater.SetActive(false);
johnCharacterWhoJoinsLater.Whatever(false);
johnCharacterWhoJoinsLater.Whatever(false);
...
}
请注意,作为一项规则,当您学习时,不要使用查找。就是这么简单。在检查器中使用公共变量并拖动连接。
(如果有人阅读还不知道如何在检查器中拖动连接,请检查任何基本的tutorial。)
如果您确实想找到具有特定标签的所有对象:
GameObject[] allCats;
allCats = GameObject.FindGameObjectsWithTag("cat");
foreach (GameObject g in allCats)
Debug.Log("I found one, name is: " +g.name);
如果您想找到其中一个具有特定名称的人,您必须搜索所有这些..
GameObject[] allCats;
allCats = GameObject.FindGameObjectsWithTag("cat");
foreach (GameObject g in allCats)
{
Debug.Log("I found one, name is: " +g.name);
if ( g.name == "Felix" )
{
Debug.Log("I did find Felix the cat");
g.Whatever ...
}
如果您确实想找到具有特定名称的所有对象...
理解这一点很重要
...您在 Unity 中无法做到这一点 - 这根本没有意义。
生活中的生活 - Find 是一个你永远不应该真正使用的黑客,除非在极少数情况下。如果您(出于某种原因?)需要“查找”所有具有特定名称的游戏对象,您必须简单地查看场景中的每一件事(这并不容易做到)。你可以很容易地谷歌这个。但是,您绝对没有理由这样做。
请注意,只是一个示例 .. 假设您的场景中有许多“猫”的东西。 非常简单 - 没有比这更复杂的了 - 您可以将它们全部放在同一个“文件夹”中。 (也就是说,都在同一个持有者游戏对象下。)这只是一种非常简单的方法,可以完全避免您遇到的那种问题。
再一次,实际上是没有办法找到“所有同名的游戏对象”——Find 调用是一个在 Unity 中不应该出现的 hack;他们明确没有
最重要的是不要忘记...如果不活动,查找将不起作用!
Find 调用是一个在 Unity 中不应该出现的 hack:永远记住 它甚至对非活动对象不起作用。既然他们提出了“查找名称”的概念,最好的情况是它不适用于非活动对象:但整个事情都是一团糟——永远不要使用“查找”。
特别是作为初学者只需拖入检查器 - 老实说就是这么简单。 (同样,在几乎所有情况下,你的东西都会开始不活动,所以你当然必须这样做,因为你无法“找到”不活动的东西。)
(请注意——不要忘记,如果您只是在寻找“boss”类型的脚本,请说您的 Scores 或 SoundEffects,切勿使用 find。只需使用 this easy idiom。)