使用 GaussSense Desktop 開發 Unity3D 應用

教學文件 - GaussToys Developers

透過 GaussSense Desktop 應用程式可以在 Mac OS X / Windows / Linux 作業系統下快速使用 GaussSense,GaussSense Desktop 透過 WebSocket 傳送磁場資訊到 Unity3D 編輯器,在遊戲中提供新的互動體驗。

🙋🏻 開始前請先確認您的 Arduino 與 GaussSense 已完成接線與上傳好 Arduino code
若還未完成請先參考 👉 詳細步驟教學

1. 準備 GaussSense Desktop

安裝 GaussSense Desktop 和連結 Mini GaussSense 可參考 開始使用 GaussSense Desktop

2. Import GaussSense Websocket Package

點選 Unity 上方選單的 Assets → Import Package → Custom Package… 來加入 GaussSense-Websocket.unitypackage

GaussSense Desktop 連結後會建立 Websocket server 傳送磁場資訊,port 為 5100,GaussSense Websocket Unity Package 則會建立 Websocket client 來接收 GaussSense Desktop 所傳送的磁場資訊,點選 Scenes 資料夾中的範例場景 GaussSenseWebsocket.unity 來開始了解基本的接收 GaussSense 磁場資訊方法。

在現有專案加入 GaussSense Websocket Package

查看範例專案 SpaceShooter2D GitHub Repository

Into The Space 是 Unity Asset Store 裡的專案,可以免費下載。我們將利用這個專案介紹如何在專案中加入 GaussSense Websocket package,讓我們可以透過抓握磁鐵來操作遊戲中的飛機。

1. 首先先點選上方選單的 Assets → Import Package → Custom Package… 來加入 GaussSense-Websocket.unitypackage。

2. 在場景中建立一個 Empty Object 命名為 GaussSense,並把 Scripts 資料夾的 GaussSense.cs 加入此物件。

3. 在 PlayerShip 物件中可以找到 Player_Script.cs,原本程式碼以鍵盤來控制飛機移動,現在我們可以加上 GaussSense 的磁場資訊,首先先在 Start() 中尋找剛剛命名為 GaussSense 的物件並取出 GaussSense.cs 的 Component :

private GaussSense gs;
void Start()
{
  gs = GameObject.Find("GaussSense").GetComponent();
}

4. 在 FixedUpdate() 中加上讀取雙極中點與旋轉角度來控制飛機:

GData bipolarMidpoint = gs.getBipolarMidpoint();
if (bipolarMidpoint != null && bipolarMidpoint.getIntensityInGauss() > 0) {
  moveHorizontal = (bipolarMidpoint.getX() - 0.5f) * 2;
  moveVertical = -(bipolarMidpoint.getY() - 0.5f) * 2;

  float angle = -bipolarMidpoint.getAngle() * Mathf.Rad2Deg;
  this.transform.rotation = Quaternion.Euler(0, 0, angle);
}

GaussSense 物件中我們可以取出 N 極、S 極與雙極 GData ,當 Mini GaussSense 與 NFC 模組連結時,也可使用 getTagID() 取得偵測的 Tag ID:

Get Methods Meaning
getNorthPoint()Get the north point object. Methods: getX(), getY(), getIntensity()
getSouthPoint()Get the south point object. Methods: getX(), getY(), getIntensity()
getBipolarMidpoint()Get the bipolar midpoint object. Methods: getX(), getY(), getIntensity(), getAngle(), getPitch()
getTagID()Get the IDs of NFC tag. Return List<int>

按照以上步驟即可快速在遊戲中加入 GaussSense 的互動功能,產生出新的遊戲方式!

回到教學目錄