从另一个脚本C#UNITY访问变量

时间:2017-01-10 05:57:23

标签: c# unity3d

我有两个脚本 的 simplecloudhander.cs cloudtarget.cs

simplecloudhander.cs

public string mTargetMetadata = "";

public void OnNewSearchResult(TargetFinder.TargetSearchResult targetSearchResult)
    {

        GameObject newImageTarget = Instantiate(ImageTargetTemplate.gameObject) as GameObject;

        GameObject augmentation = null;

        string model_name = targetSearchResult.MetaData;


        if( augmentation != null )
            augmentation.transform.parent = newImageTarget.transform;


        ImageTargetAbstractBehaviour imageTargetBehaviour = mImageTracker.TargetFinder.EnableTracking(targetSearchResult, newImageTarget);

        Debug.Log("Metadata value is " + model_name );
        mTargetMetadata = model_name;
}

我想在另一个 cloudtarget.cs脚本中访问 mTargetMetadata

这里是cloudtarget.cs脚本

void OnGUI() {
        SimpleCloudHandler sc = new SimpleCloudHandler ();

        GUI.Label (new Rect(100,300,300,50), "Metadata: " + sc.mTargetMetadata);

}

但我无法在另一个脚本中获取mTargetMetadata值

2 个答案:

答案 0 :(得分:2)

您必须在 cloudtarget 脚本中添加对该脚本的引用。只需将 SimpleCloudHandler 类型的公共变量添加到类 cloudtarget ,而不是OnGUI方法,稍后拖放带有 SimpleCloudHandler 的GameObject检查器中的脚本 cloudtarget

示例:

enter image description here enter image description here

使用附加的SimpleCloudHandler脚本拖放MainCamera =>通过检查器显示 cloudtarget 脚本的公共 SimpleCloudHandler 变量。

有多种方法可以在Unity中进行引用,我建议您查看Unity提供的文档

答案 1 :(得分:0)

如果您的脚本附加到同一个对象,那么您可以使用GetComponent这样的

gameObject.GetComponent<simplecloudhander>().mTargetMetadata

如果它们没有附加到同一个gameObject,您可以先使用GameObject.Find找到脚本所附加的gameObject,您应该使用{{1}的名称1}}找到它,然后使用gameObject获取您想要的GetComponent

component

如果您只是想访问它,也不需要新的关键字,

GameObject.Find("nameOftheGameObject").GetComponent<simplecloudhander>().mTargetMetadata