在通过Component
方法将GameObject
添加到GameObject
之后,如何从另一个脚本访问该Component
?
下面是myScript代码(不附加到GameObject):
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);
}
}
}
发布于 2015-11-25 01:17:42
要从Component
GameObject
访问GameObject.GetComponent()
,您应该使用GameObject.GetComponent()
方法。有不止一种方法可以做到这一点。
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
变量:
MyScript a = FindObjectOfType<MyScript>();
print(a.myName + "/" + a.visible);
或者如果您想检查所有MyScript
活动组件的状态:
MyScript[] myScripts = FindObjectsOfType<MyScript>();
foreach (MyScript myScript in myScripts) {
print(myScript.myName + "/" + myScript.visible);
}
https://stackoverflow.com/questions/33906741
复制相似问题