【问题标题】:unity | Find child gameObject with specified parent团结 |查找具有指定父级的子游戏对象
【发布时间】:2015-05-15 01:46:59
【问题描述】:

我必须找到具有指定父级的子游戏对象。嗯。让我更详细地解释一下。我正在创建具有一个名为“状态”的子游戏对象的预制件,并且在我玩游戏时更改了父游戏对象的名称。 我的意思是子游戏对象的名称始终相同,但父游戏对象的名称却完全不同。我怎么知道哪个孩子在指定的父母之下。这并不像我想的那么容易。这是我尝试过的下面的代码。

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”(父游戏对象)下的“状态”(子游戏对象)。 我对统一功能了解不多。我该如何处理在期望的父母下找到孩子。

【问题讨论】:

    标签: unity3d find parent-child gameobject


    【解决方案1】:

    您的问题有点令人困惑。这是我从你所问的情况中理解的。如何找到在运行时更改其名称的父对象的子对象。

    您可以使用 FindChild 功能执行此操作,但还有另一种方法。您只需使用 Find 功能即可。

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

    例如, GameObject.Find("state") 将寻找名为 stateparent 游戏对象。

    如果您使用 GameObject.Find(/Country/state),Unity 将搜索名为“state”的 GameObject,即一个名为“Country”的游戏对象。

    因此假设您的父 GameObject 称为 Country,而您的子 GameObject 称为 State,您可以找到 Country GameObject 的子对象

    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 但后来改为 运行时“国家”,而您的子对象名称保持为“状态”。你可以通过这样做找到“状态”游戏对象

    GameObject childObject = findChildFromParent ("Country", "State");
    

    要获取在运行时更改的游戏对象的名称,您只需使用yourgameObject.name

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

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

    【讨论】:

      【解决方案2】:

      这样修改代码会更有效:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多