Unity3d unity |查找具有指定父对象的子游戏对象

Unity3d unity |查找具有指定父对象的子游戏对象,unity3d,find,parent-child,gameobject,Unity3d,Find,Parent Child,Gameobject,我必须找到具有指定父对象的子游戏对象。嗯。让我详细解释一下。我正在创建一个预置,其中有一个子游戏对象名为“state”,当我玩游戏时,父游戏对象的名称会改变。 我的意思是,子游戏对象的名称总是相同的,但父游戏对象的名称却完全不同。如何知道指定的父项下有哪个子项。这不像我想的那么容易。这是下面我尝试过的代码 go = Instantiate(Resources.Load("Prefabs/User")) as GameObject; go.transform.FindChild("State").

我必须找到具有指定父对象的子游戏对象。嗯。让我详细解释一下。我正在创建一个预置,其中有一个子游戏对象名为“state”,当我玩游戏时,父游戏对象的名称会改变。 我的意思是,子游戏对象的名称总是相同的,但父游戏对象的名称却完全不同。如何知道指定的父项下有哪个子项。这不像我想的那么容易。这是下面我尝试过的代码

go = Instantiate(Resources.Load("Prefabs/User")) as GameObject;
go.transform.FindChild("State").gameObject.name = userIndex.ToString();
go.transform.FindChild(userIndex.ToString()).gameObject.SetActive(false);
此代码无效,因为名称“state”等于all。我怎样才能修改得更清晰有效。请告诉我一些想法


例如,创建的四个预制件的名称是“a”、“b”、“c”和“d”。 所有游戏对象都有相同的子对象名称;'国家'。 我只想知道如何找到“a”(父游戏对象)下的“状态”(子游戏对象)。
我对unity功能了解不多。如何在所需的父项下查找子项。

如果您这样修改代码,代码会更有效:

GameObject stateGo = go.transform.FindChild("State").gameObject;
stateGo.name = userIndex.ToString();
stateGo.SetActive(false);

我认为你需要详细说明你的问题

如果您这样修改,代码可能会更有效:

GameObject stateGo = go.transform.FindChild("State").gameObject;
stateGo.name = userIndex.ToString();
stateGo.SetActive(false);

我认为你需要详细说明你的问题

你的问题有点让人困惑。这是我从你的提问中了解到的。如何查找在运行时更改名称的父对象的子对象

您可以使用FindChild函数来完成此操作,但还有另一种方法。只需使用查找功能即可

通过使用Find函数,当您在要查找的游戏对象的名称之前使用“/”时,Unity将其视为您正在查找子游戏对象

比如说,,
GameObject.Find(“state”)
将查找名为state父对象

如果您使用GameObject.Find(/Country/state),Unity将仅搜索名为“state”的游戏对象,该游戏对象位于内部,名为“Country”的父游戏对象

因此,假设您的父游戏对象名为Country,而您的子游戏对象名为State,您可以使用

GameObject.Find("/Country/State");
还是像这样

string nameOfParentObject = "ParentObject";
string nameOfChildObject = "ChildObject";

string childLocation = "/" + nameOfParentObject + "/" + nameOfChildObject;
GameObject childObject = GameObject.Find (childLocation);
如果您需要更频繁地从父游戏中搜索子游戏对象,您甚至可以将其放入函数中

GameObject findChildFromParent (string parentName, string childNameToFind)
{
    string childLocation = "/" + parentName + "/" + childNameToFind;
    GameObject childObject = GameObject.Find (childLocation);
    return childObject;
}
现在,只要你想在父游戏对象中搜索游戏对象的子对象,你就可以调用返回游戏对象的函数

假设父类的名称是Jinbom,但后来改为 当您的子对象名称保持为“State”时,运行时为“Country”。通过这样做,您可以找到“状态”游戏对象

GameObject childObject = findChildFromParent ("Country", "State");
要获得在运行时更改的游戏对象的名称,只需使用
yourgameObject.name

您可以在运行时执行此操作

GameObject childObject = findChildFromParent (yourgameObject.name, "State");

你的问题有点让人困惑。这是我从你的提问中了解到的。如何查找在运行时更改名称的父对象的子对象

您可以使用FindChild函数来完成此操作,但还有另一种方法。只需使用查找功能即可

通过使用Find函数,当您在要查找的游戏对象的名称之前使用“/”时,Unity将其视为您正在查找子游戏对象

比如说,,
GameObject.Find(“state”)
将查找名为state父对象

如果您使用GameObject.Find(/Country/state),Unity将仅搜索名为“state”的游戏对象,该游戏对象位于内部,名为“Country”的父游戏对象

因此,假设您的父游戏对象名为Country,而您的子游戏对象名为State,您可以使用

GameObject.Find("/Country/State");
还是像这样

string nameOfParentObject = "ParentObject";
string nameOfChildObject = "ChildObject";

string childLocation = "/" + nameOfParentObject + "/" + nameOfChildObject;
GameObject childObject = GameObject.Find (childLocation);
如果您需要更频繁地从父游戏中搜索子游戏对象,您甚至可以将其放入函数中

GameObject findChildFromParent (string parentName, string childNameToFind)
{
    string childLocation = "/" + parentName + "/" + childNameToFind;
    GameObject childObject = GameObject.Find (childLocation);
    return childObject;
}
现在,只要你想在父游戏对象中搜索游戏对象的子对象,你就可以调用返回游戏对象的函数

假设父类的名称是Jinbom,但后来改为 当您的子对象名称保持为“State”时,运行时为“Country”。通过这样做,您可以找到“状态”游戏对象

GameObject childObject = findChildFromParent ("Country", "State");
要获得在运行时更改的游戏对象的名称,只需使用
yourgameObject.name

您可以在运行时执行此操作

GameObject childObject = findChildFromParent (yourgameObject.name, "State");
这很有效。非常感谢。Country/State参数字段的工作原理类似于在Windows 8上的目录中查找文件,例如: (如果我想转到MrMiyagi用户的“场景”文件夹)

这很有效。非常感谢。Country/State参数字段的工作原理类似于在Windows 8上的目录中查找文件,例如: (如果我想转到MrMiyagi用户的“场景”文件夹)