最近公司用u3d開發乙個應用,需要用到串列埠,便研究了兩天串列埠程式設計,c#用serialport類實現串列埠程式設計,便開始使用serialport類編寫**。後來發現乙個問題,unity不支援datareceived的方法。遇到這個問題很是棘手啊,後來在網上搜了一下,發現這個問題確實存在,解決的方法是開啟兩個執行緒,乙個用來接收資料,乙個用來處理資料。將兩個執行緒分別放在fixedupdate裡面呼叫,這樣便可以快速的讀取和處理資料了。但是程式執行時,開啟open()方法時,會報system.io.ioexception這個異常。檢察了一下應該是該串列埠被占用。之所以被占用,是因為上次沒close,而每次完成或退出時我確實寫了serialport的close()方法。後來在網上查了一下相關的資料,發現如果close的時候正好趕上讀取串列埠資料,這樣兩個執行緒便發生了矛盾,close方法無法完成。但是**也不會報錯或是拋異常(據說這是微軟的乙個bug,是不是就不清楚了)。所以說問題就出在了這裡。那解決該問題的方法是當啟用close的方法時,必須停止接受串列埠資料的執行緒。這樣該問題就解決了,**大致如下:
listliststr;//在listbyte中讀取資料,用於做資料處理
listlistbyte;//存放讀取的串列埠資料
private thread tport;
private thread tportdeal;//這兩個為兩個執行緒,乙個是讀取串列埠資料的執行緒乙個是處理資料的執行緒
bool isstartthread;//控制fixedupdate裡面的兩個執行緒是否呼叫(當準備呼叫串列埠的close方法時設定為false)
byte stroutpool = new byte[6];
serialport spstart;
void start()
catch (exception e)
tport = new thread(dealdata);
tport.start();
tportdeal = new thread(receivedata);
tportdeal.start();
}void fixedupdate()
if (!tport.isalive)}}
private void receivedata()
if (buf.length == 0)
if (buf != null)}}
catch (exception e)
}private void dealdata()
}liststr.clear();
ienumerator closeport()//該方法為關閉串列埠的方法,當程式退出或是離開該頁面或是想停止串列埠時呼叫。
Unity3D處理Emoji問題
public class uiinputfield inputfield patterns.add u2702 u27b0 onvalidateinput myonvalidateinput private char myonvalidateinput string text,int charind...
Unity3D開發(九) Unity3d流光效果
遊戲開 壇 hello game 遊戲開發群 201276069 之前曾經注意過material 中紋理的屬性都有 tiling 和offset 但沒有深究過其用途,今天才知道竟然可以利用 offset做uv 動畫,從而完成各種有趣的動畫,比如流光效果!流過效果即通常一條高光光在物體上劃過,模擬高光...
Unity3d時鐘指令碼
var tu1 texture2d var time1 float 0 function fixedupdate function ongui function gettime time float string var lasttime string var hour mathf.floortoi...