在unity3D中,如何从其他游戏对象中获取变量?

时间:2014-03-02 10:42:22

标签: c# unity3d

我已成功将蓝牙设备连接到Unity并尝试使用读入数据来控制其他游戏对象 以此为参考 http://answers.unity3d.com/questions/16484/how-to-import-neurosky-mindset-data-into-unity.html

我将连接脚本附加到空游戏对象,它可以读取一些变量。 我将所有变量设置为public int,并将连接脚本包含到另一个游戏对象脚本

public s_ReadNeuro readNeuroScript;

问题出现之后,我不知道如何从连接脚本中获取公共变量(例如,注意和冥想值),这是不断读取的。 如何获取它们并在另一个游戏对象脚本中使用它?谢谢

这是附加到空游戏对象的连接脚本

using UnityEngine;
using System.Collections;

public class s_ReadNeuro : MonoBehaviour {


public int tgHandleId;
public int tgConnectionStatus;
public int tgPacketCount;
public float attention;
public float meditation;
// Use this for initialization
void Start () {
   setupNeuro();
}

// Update is called once per frame
void Update () {
   readNeuro();
}


void setupNeuro() {
    tgHandleId = ThinkGear.TG_GetNewConnectionId();

    tgConnectionStatus = ThinkGear.TG_Connect(tgHandleId,
                                     "\\\\.\\COM4", 
                                     ThinkGear.BAUD_9600, 
                                     ThinkGear.STREAM_PACKETS);

}


void readNeuro() {
    tgPacketCount = ThinkGear.TG_ReadPackets(tgHandleId, -1);

    attention = ThinkGear.TG_GetValue(tgHandleId,  ThinkGear.DATA_ATTENTION);

    meditation = ThinkGear.TG_GetValue(tgHandleId, ThinkGear.DATA_MEDITATION);

}}

1 个答案:

答案 0 :(得分:2)

基本上有两种方法可以做到这一点。在编辑器中使用s_ReadNeuro游戏对象连接OtherGameObject,或使用Unity的查找功能在OtherGameObject中找到s_ReadNeuro游戏对象。使用哪一个取决于您的使用案例,但一般情况下,我更喜欢在编辑器中使用Find功能(更少的代码,更少的麻烦)。无论如何,你的OtherGameObject看起来像这样:

class OtherGameObject : MonoBehaviour {

    public s_ReadNeuro readNeuroInstance;


    void Update() {
        var attention = readNeuroInstance.attention;

        // do something with it.
    }

}

然后在编辑器中,创建一个新的游戏对象,将OtherGameObject行为附加到它上面,然后将其上带有s_ReadNeuro脚本的GameObject实例拖到OtherGameObject的检查器中的“Read Neuro Instance”字段中。 / p>

如果要使用find方法,请按如下方式扩展OtherGameObject的脚本:

class OtherGameObject : MonoBehaviour {

    private s_ReadNeuro readNeuroInstance;


    void Start() {
          readNeuroInstance = GameObject.FindObjectOfType(typeof(s_ReadNeuro));
    }

    void Update() {
        var attention = readNeuroInstance.attention;

        // do something with it.
    }

}

在这种情况下,您无需在编辑器中连接对象。一定要在Start或Awake中调用Find函数,因为它不是一个便宜的函数。