Class unity获取子数据

Class unity获取子数据,class,unity3d,Class,Unity3d,我试图在统一中创建一个程序创建的地牢。 我让它创建了地下城,并在每个预制件上附加了一个脚本,用于构成墙壁、地板等。每个预制件都附加到一个父级,以便于删除和重建整个地下城。脚本包含以下详细信息: public class WallPrefab { public bool use; private int roomId; public WallTypes type; //enum = torch, switch, item etc public WallD

我试图在统一中创建一个程序创建的地牢。 我让它创建了地下城,并在每个预制件上附加了一个脚本,用于构成墙壁、地板等。每个预制件都附加到一个父级,以便于删除和重建整个地下城。脚本包含以下详细信息:

 public class WallPrefab
 {
     public bool use;
     private int roomId;
     public WallTypes type; //enum = torch, switch, item etc
     public WallDirections direction; //direction wall is facing
     public GameObject myPrefab; //nested
 }
预制场还包含一个空的游戏对象,用作火炬、开关等的挂载点

 myPrefab
      prefab //prefab for the actual 3d object
      wallmount //empty game object to store location and rotation details
      ....
我的问题是: 1.如何获得墙类型

    int childs = transform.childCount;
    for (var i = childs - 1; i >= 0; i--)
    {
        c = transform.GetChild(i).gameObject;
        Debug.Log("child:" + c.name);
        //WallTypes g = c.GetComponentInChildren<WallPrefab>().type;
        WallTypes g = c.transform.GetComponentInChildren<WallSettings>().type;
编辑以插入我的问题的这一部分的工作解决方案! 此代码不起作用,因为Unity抱怨:

ArgumentException:GetComponent要求请求的组件 “墙预制”源于单一行为或组件,或是 接口

如何获得装载点的变换?
一旦我得到了挂载点,我知道如何获得位置和旋转,但我实际上如何获得挂载点呢?

问题1似乎很能自我解释

问题2看起来更有意思

如果我理解正确,您有一个脚本,可以在指定的挂载点上创建火炬。假设这些挂载点是空的游戏对象,并且你不想直接将火把添加到预置中,如果我们在这里得到更多关于你的地下城+挂载点是如何生成的细节,那就好了,我会在预置中添加一个脚本,添加一个GameObject实例变量,并使用inspector将挂载点拖到脚本上。然后我将使用gameobjectVariable.transform.position来获取位置

比如:

public class prefabClassWithMountPoints{
    GameObject mountpoint; //drag mount point from inspector
    GameObject torchGameObject; //drag torch prefab here

    public void createTorch(){
        GameObject torchObject = Instantiate(torchGameObject, mountpoint.transform.position, Quaternion.identity);
        //...
    }
    //rest of code
}

这是假设挂载点不是在预置中随机生成的。

您的错误是不言自明的,它是一个标准c类,不是从monobehavior派生的类,因此不能是unity对象上的组件。在公共类WallPrefactPut之后:MonoBehaviorWallTypes WallType=c.transform.GetComponentChildren.type;作品如果你制作了WallPrefact,这是MonoBehavior的一个奇怪的类名,你将能够得到所有子类的转换。不,挂载点被添加到父类Prefact中。它们只是一个添加的空游戏对象,在设计时添加到父预制中。父预置是通过脚本生成的。它被放置在游戏中,并且已经有了挂载点,它应该在正确的位置,以便能够从空的游戏对象获得位置和旋转。我知道怎么从预制房弄到。我遇到的问题是,将空的游戏对象放在预置中?因此装载点是通过脚本添加到父级的,而父级是通过脚本生成的?不,它们不是通过脚本添加的。它们在设计时添加到预置中,而不是在运行时!哦,糟糕。在这种情况下,你可以完全按照我在那里描述的做。在设计时,使用inspector将它们添加到相应的脚本中