追記:
<注意>内部でどういう処理がされてるか分からない以上、出てくるデータが脳波とは言いきれません。2014.7.18
動いたのでとりあえずのまとめ。
http://developer.neurosky.com/docs/doku.php?id=using_thinkgear_with_unityここのUnity3D Package, available hereと書いてあるところからダウンロード。
どうやらIntroductionから下は古いっぽいので読まなくてもいいと思います。
unity3d packageをプロジェクトに突っ込んでその中にあるreadmeを読んだほうがいいと思います。
前提条件としてThinkGear Conectorが必要です。起動もしておいてください。
使い方ですが
1.NeuroSkyAssets>NeuroSkyTGCController
の中にあるNeuroSkyTGCControllerのprefabをHierarchyにつっこむ。
2.NeuroSkyAssets>NeuroSkyScripts
の中にあるDisplayDataをカメラにあてる。
このままだとDisplayDataのスクリプトのテクスチャがないとかでエラーがでると思うので、DisplayDataをあてたカメラのInspectorビューのDisplaydataのところのSignal IconsをSizeを5、Elementを上から緑、赤、黄1、黄2、黄3とします。
この状態で再生して数値とかが出ていればokです。
対象のコンピューターによって拒否されたため、接続できませんでした。と出たらThinkGear Conectorのつけ忘れだと思います。
最初の状態ではPoorSignal,Attention,Meditation,Deltaしか表示されていないです。
変更や増やしたい場合、例えばLowgammaの値を取りたい場合は、
public class DisplayData : MonoBehaviour
{
.
.
.
private float lowgamma;
void Start(){
.
.
.
controller.UpdateLowGammaEvent += OnUpdateLowGamma;
}
.
.
.
void OnUpdateLowGamma(float value){
lowgamma = value;
}
void OnGUI()
{
.
.
.
GUILayout.Label("LowGamma:" + lowgamma);
}
}
としてやれば表示されると思います。(とりあえず追加箇所だけ)
ただ、僕の場合遅くなったり(2,3fps)することがよくありました。
多くの場合がnecomimiがThinkGear Conectorと繋がっていないことによって起きていたような気がするのですが、繋がっている時も遅かったような気がするのでよくわかりません。
あとJsonExceptionがよく出てきて全然数値が取れませんでした。
いろいろと試していてどうやらTGConnectionController.csのParseData()が原因っぽいなと分かりました。
別のスレッドで処理すれば遅くなるのを回避できるのではと思ったのでやってみたらできました。
JsonExceptionもなぜか減りました(無くなってはない)
.
.
.
using System.Threading;
public class TGCConnectionController : MonoBehaviour {
.
.
.
private Thread th;
void Start () {
th = new Thread(parse_call);
Connect();
}
public void Disconnect(){
//if(IsInvoking("ParseData")){
//CancelInvoke("ParseData");
th.Abort();
stream.Close();
//}
}
public void Connect(){
//if(!IsInvoking("ParseData")){
.
.
.
//InvokeRepeating("ParseData",0.1f,0.02f);
//StartCoroutine(parse());
th.Start();
//}
}
void parse_call(){
while(true){
ParseData();
}
}
.
.
.
}
Threadを使うのは初めてでむちゃくちゃな使い方かもですが一応動いたのでその報告。
もっと良いやり方あったら教えて下さい。
[0回]
PR