2013年3月28日 星期四

[Neurosky]將javascript 轉成 c#


照之前所述, 打開Uniyt後會發現API接口, 一個是由c#寫成, 一個是由Javascript寫成,

我們要增加應用程式就是在Javascript 這一项-ThinkGearGUI




可以將兩個程式掛在camera下, 或是掛在任何想運作的物體上。

但如果想一律都用C#來運行該如何做呢?

1.先將ThinkGearGUI.js 落落長的程式截出只對訊號有作用的部分

private var headsetValues : Hashtable;  // Hashtable 是連接ThinkGearController的接口

function Update () {

var delta_val : float = headsetValues["delta"]; // "delta"是key, 告訴headsetValues從Hashtable找到相同Key
print(delta_val); 

}


function OnHeadsetDataReceived(values : Hashtable){ //在ThinkGearController會呼叫此函數,並回傳
  headsetValues = values;
  }

2.將Js丟進Javascript convert to C# 請他轉成C#(沒錯,這很偷懶)


3.得到C#碼, 慢慢一行行debug


// Converted from UnityScript to C# at http://www.M2H.nl/files/js_to_c.php - by Mike Hergaarden
// Do test the code! You usually need to change a few small bits.

using UnityEngine;
using System.Collections;

public class MYCLASSNAME : MonoBehaviour {  //這裡要修改成檔名

private Hashtable headsetValues;

void  Update (){

float por_val = headsetValues["delta"];
print(por_val);

}


void  OnHeadsetDataReceived ( Hashtable values  ){
  headsetValues = values;
  }


}



5.修到最後, 剩下紅色這一行出現錯誤


不能轉型? 到底是怎麼一回事呢?

用print 讀出 headsetValues, 得知他是一個物件, 恩~陣列是一個物件,

但是我已經告訴他Key了, 他應該要依照Key去找到對應的值, 浮點值

實在想不通要如何修改, 就請教資工專業來解答

他建議我強制轉換成浮點型態

float por_val = (float)Convert.ChangeType(headsetValues["delta"], typeof(float));

這時候出現CS0103, 找不到Convert這方法, 所以命名空間有問題!

在程式最上面, 命名空間加上

using System;

將 System全包進來總可以吧!

運作看看, 很順利, 可以讀取值, 這樣就可以用c#去寫程式囉!