添加后Component
to a GameObject
通过GameObject.AddComponent
方法,我怎样才能访问这个Component
来自另一个脚本?
这是 myScript 代码(未附加到游戏对象):
using UnityEngine;
using System.Collections;
public class MyScript : MonoBehaviour {
public string myName = "myName";
public Vector3 pos;
public bool visible;
}
这是附加到场景中游戏对象的主要代码:
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);
}
}
}
要访问一个Component
来自 Unity3dGameObject
,你应该使用GameObject.GetComponent<T>()方法。有不止一种方法可以做到这一点。
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
那些有MyScript
成分 (FindObjectOfType
如果您只想找到 1)
在此基础上,您可以得到以下变量MyScript
像这样:
MyScript a = FindObjectOfType<MyScript>();
print(a.myName + "/" + a.visible);
或者如果您想检查所有状态MyScript
活性成分:
MyScript[] myScripts = FindObjectsOfType<MyScript>();
foreach (MyScript myScript in myScripts) {
print(myScript.myName + "/" + myScript.visible);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)