跳到主要內容

Unity3D + Arduino

在三十歲的今年,人生的轉"類"點,希望可以換個自己喜歡,制度完善的工作環境,於是去了某家大公司面試,結果難免不如自己的意,不過路還是要繼續鋪下去,所以今天來寫一個Unity3D + Arduino 傳值的簡單功能(不好意思閒話家常了) 

 好囉! 正題來了


Arduino感測器是運用 超音波 ,然而我設定超過150公分就會SerialWrite一個字母,我這傳"A"這個值給Unity,而下面簡易程式碼就是接收Arduino傳過來的值。


下圖Arduino端超音波感測器程式



using System.IO.Ports;
public SerialPort sp = new SerialPort ("COM4", 9600);

public class StageControl : MonoBehaviour {

 void Start () {
  sp.Open ();
  sp.ReadTimeout = 1;
        }

        void Update () {
  if (sp.IsOpen) {
   try{
    if(sp.ReadLine() == "A" && startTrigger == false){
     FromArduinoTrigger1();
    }
   }catch(System.Exception){
    
   }
  }
        }
}

解釋一下上面的功能(可能不用解釋 因為太簡單了) 

  1. 一定要import System.IO.Ports,這就是程式直接去讀取com port的一個API 
  2. 宣告一個 類別為SerialPort的物件,物件名稱叫做sp,並且設定他開的com port為COM4,傳輸速率為9600 
  3. 在應用程式一開始時將物件sp開啟open方法,並設定他的ReadTimeout數值為1 
  4. 在Unity中的每偵都去偵測Comport是否有東西傳進來,所以用了判斷式,判斷sp的屬性IsOpen,運用了try catch 去執行是否有東西傳進來的下一步動作。 


好了到目前為止都OK,但是Unity不讓我用System.IO.Ports,找了很久找到了為何了 如下圖為錯誤訊息:



解法:



在Unity中的File>Build Settings>Player Settings>Other Settings裡面的Optimization>Api Compability Level(他預設是".NET 2.0 SubSet")必須換成".NET 2.0"才可以用



好啦 大致上是這樣,加油好嗎!!!(早知道傷心總是難免的~你又何故一往情深~)

留言