首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >访问Unity3d C#中的动态添加组件

访问Unity3d C#中的动态添加组件
EN

Stack Overflow用户
提问于 2015-11-25 00:57:07
回答 1查看 606关注 0票数 1

在通过Component方法将GameObject添加到GameObject之后,如何从另一个脚本访问该Component

下面是myScript代码(不附加到GameObject):

代码语言:javascript
复制
using UnityEngine;
using System.Collections;

public class MyScript : MonoBehaviour {
    public string       myName = "myName";
    public Vector3      pos;
    public bool         visible;
}

下面是附加在场景中的游戏对象上的主要代码:

代码语言:javascript
复制
using UnityEngine;
using System.Collections;

public class Main : MonoBehaviour {
    public GameObject cube;

    void Update() {
        if(Input.GetKeyDown(KeyCode.Space)) {
            cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
            cube.AddComponent<MyScript>();
        }

        if(Input.GetKeyDown(KeyCode.LeftShift)) {
            var a = GameObject.Find("Cube");

            print("cube name/visible: " + 
            /* here is the problem, how do i access the MyScript variables? */ 
            a.myName + "/" + a.visible);
        }
    }
}
EN

回答 1

Stack Overflow用户

发布于 2015-11-25 01:17:42

要从Component GameObject访问GameObject.GetComponent(),您应该使用GameObject.GetComponent()方法。有不止一种方法可以做到这一点。

代码语言:javascript
复制
MyScript m = gameObject.GetComponent<MyScript>();
MyScript m = gameObject.GetComponent("MyScript") as MyScript;
MyScript m = (MyScript) gameObject.GetComponent(typeof(MyScript));

从您的示例代码中,有几件事情应该真正得到解决:

  • 如果要动态地在场景中创建组件,最好先创建预制件,然后将其添加到场景中。
  • 如果您计划在运行时将大量的对象添加到场景中,则应该使用池,而不是昂贵的创建和销毁对象。
  • GameObject.Find("Cube");只会在继承制度中找到一个名为"Cube“的对象。如果要查找所有具有FindObjectsOfType<MyScript>()组件的GameObjects (如果只想找到1),则应使用FindObjectOfType

在此基础上,您可以得到这样的MyScript变量:

代码语言:javascript
复制
MyScript a = FindObjectOfType<MyScript>();
print(a.myName + "/" + a.visible);

或者如果您想检查所有MyScript活动组件的状态:

代码语言:javascript
复制
MyScript[] myScripts = FindObjectsOfType<MyScript>();
foreach (MyScript myScript in myScripts) {
    print(myScript.myName + "/" + myScript.visible);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33906741

复制
相关文章

相似问题

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