首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AddComponent<>可拓方法

AddComponent<>可拓方法
EN

Stack Overflow用户
提问于 2015-11-26 04:30:56
回答 2查看 101关注 0票数 0

错误:“UnityEngine.GameObject”必须可转换为“UnityEngine.Component”

我试图通过非单行为类的扩展方法添加组件,我知道它是错误的,但是有什么解决方案吗?

代码语言:javascript
复制
public static void AddGameObject(this Transform go, int currentDepth, int depth)
{
    if (depth == currentDepth)
    {
        GameObject test = go.gameObject.AddComponent<GameObject>(); //error is here
        Debug.Log(go.name + " : " + currentDepth);
    }

    foreach (Transform child in go.transform)
    {
        child.AddGameObject(currentDepth + 1, depth);
    }
}

在单行为类中,我调用这样的扩展方法

2.(0,2);

基本上,我想要实现的是通过扩展方法对所有子类进行addcomponent<>。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-26 05:51:35

GameObjects不是组件,GameObjects是放置组件的对象。这就是为什么它说要将一个GameObject转换成一个组件。

那么,您想要添加一个GameObject作为一个子吗?你想要创建一个新的吗?

使用AddComponent添加组件(如MeshRenderer、BoxCollider、NetworkIdentity、.)或者您的脚本之一(它们也是从Monobehaviour派生出来的组件)到已经存在的游戏对象。

假设你想添加一个你小时候做的预制件。您要做的是创建一个新的GameObject,然后设置它的父级如下:

代码语言:javascript
复制
void AddChildGameObject(this GameObject go, GameObject childPrefab) {
    GameObject newChild = Instantiate(childPrefab) as GameObject;
    newChild.transform.parent = go.transform;
}
票数 0
EN

Stack Overflow用户

发布于 2015-11-26 06:34:26

将新GameObjest作为子级添加的正确方法是

代码语言:javascript
复制
public static void AddGameObject(this Transform go, int currentDepth, int depth)
{
    if (depth == currentDepth)
    {
        GameObject newChild = new GameObject("PRIMARY");
        newChild.transform.SetParent(go.transform);
        Debug.Log(go.name + " : " + currentDepth);
    }

    foreach (Transform child in go.transform)
    {
        child.AddGameObject(currentDepth + 1, depth);
    }
}

基本上,代码所做的是根据深度将新的GameObject作为子gameObject添加到gameObject的所有子程序中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33930641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档