我已成功将蓝牙设备连接到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);
}}
答案 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函数,因为它不是一个便宜的函数。