团结|使用指定的父级查找子gameObject

时间:2015-05-15 01:46:59

标签: unity3d find parent-child gameobject

我必须找到具有指定父级的子gameObject。嗯。让我解释一下细节。我正在创建一个预制件,它有一个名为' state'当我玩游戏时,父游戏对象的名称会改变。 我的意思是child gameObject的名称总是相同,但父gameObject的名称都是不同的。我怎么知道哪一个孩子在指定的父母一个之下。这并不像我想象的那么容易。这是我尝试过的代码。

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"等于全部。我怎样才能更清晰有效地修改。请给我一些想法。

例如,创建的四个预制件的名称是' a'''''''' d' 所有游戏对象都具有相同的孩子名称;'州'。 我想知道的是如何找到'(#child; (父游戏对象)。 我不太了解统一特征。我如何处理在所需父母下找到孩子的问题。

3 个答案:

答案 0 :(得分:3)

你的问题有点令人困惑。这就是我从你的要求中理解的。如何查找在运行时更改其名称的父对象的子对象。

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

通过使用Find功能,当您在寻找游戏对象的名称之前使用'/'时,Unity会像您正在寻找一个孩子GameObject一样。

例如, class ListItemCategory(models.Model): name = models.CharField(max_length=30, blank=True, null=True) shoppinglist = models.ForeignKey(ShoppingList) class ShoppingListItem(models.Model): shoppinglist = models.ForeignKey(ShoppingList) category = models.ForeignKey(ListItemCategory, blank=True, null=True, default = None) item = models.CharField(max_length=200, blank=True, null=True) class ShoppingList(models.Model): name = models.CharField(max_length=30, blank=True, null=True, default="Pod List") 会查找名为 GameObject。

如果您使用 GameObject.Find(/ Country / state),Unity将搜索名为“”的GameObject,即内部 GameObject名为“国家/地区”。

假设你的父游戏对象被称为国家而你的孩子GameObject被称为状态,你可以找到Country GameObject的孩子

GameObject.Find("state")

或者像这样

GameObject.Find("/Country/State");

如果您需要更频繁地从父母那里搜索儿童游戏对象,您甚至可以将其付诸实践

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

string childLocation = "/" + nameOfParentObject + "/" + nameOfChildObject;
GameObject childObject = GameObject.Find (childLocation);

现在,只要您想在父GameObject中搜索GameObject子项,您就可以调用将返回GameObject的函数。

我们只是说你的父类的名字是Jinbom,但后来改为 运行时“Country”,而您的子对象名称仍为“State”。你可以通过这个来找到“State”GameObject

GameObject findChildFromParent (string parentName, string childNameToFind)
{
    string childLocation = "/" + parentName + "/" + childNameToFind;
    GameObject childObject = GameObject.Find (childLocation);
    return childObject;
}

要获得在运行时更改的GameObject的名称,您只需使用GameObject childObject = findChildFromParent ("Country", "State");

您可以在运行时

执行此操作
yourgameObject.name

答案 1 :(得分:0)

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

#include <cassert>
#include <iostream>
#include <vector>
using namespace std;

class stack{
private: 
    int capacity;
    int data[capacity];
    int top;
    int bottom;


public:
   stack(){
        top=0;
        bottom=0;
        capacity=100;
   }

   bool isEmpty(){
        return top==bottom;
   }

   int pop(stack S){
        //assert(!isEmpty());
        int elem = data[top];
        top--;
        return elem;  
   }

   void push(stack S,int x){
        assert(top<capacity-1);
        top++;
        data[top]=x;
        return;
   }

};

int main()
{
    return 0;    
}

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

答案 2 :(得分:0)

GameObject.Find("/Country/State"); 

这很有效。谢谢。 Country / State参数字段的工作方式类似于在Windows 8上查找目录中的文件,例如: (如果我想去MrMiyagi用户的“Scene”文件夹)

C:\Users\MrMiyagi\Unity\Assets\Scenes