動作確認
Unity 5.1.3-f1 on MacOS X 10.8.5
Unity5でRS-232C受信がうまくいってなかったが、成功する方法が見つかった。
参考になったのは以下のQA
answers.unity3d
要点は以下。
- ReadLine()はフリーズする
- ReadTimeout=1とした時、ReadByte()はフリーズしない
こちらで動作確認したコードは以下。
rcvCS.cs
using System.Collections;
using System.IO.Ports;
using UnityEngine.UI;
public class rcvCS : MonoBehaviour {
SerialPort sp = new SerialPort("COM3", 9600);
public Text T_rcv;
private string lastrcvd = "";
void Start () {
sp.Open ();
sp.ReadTimeout = 1;
}
// Update is called once per frame
void Update () {
byte rcv;
char tmp;
try {
rcv = (byte)sp.ReadByte();
if (rcv != 255) {
tmp = (char)rcv;
lastrcvd = lastrcvd + tmp.ToString();
T_rcv.text = lastrcvd;
}
}
catch(System.Exception) {
}
}
}
COM4でhelloと入力した文字がCOM3で受信できた。
以下は、Unity 5でのRS-232C受信について得た事項 (Unity 5.1.3f1で確認)
- ReadLine()はフリーズする
- Read()も複数文字受信ではフリーズする
- ReadTimeout=1とした時、ReadByte()はフリーズしない
- Coroutine, ThreadでやってもReadLine()を使う限り受信できない
- ByteToRead()はNullReference()が発生する
- 上記は(おそらく)Unity4では問題なかった (Unity4で成功例がいくつかある)