Unity3D串列埠處理

2021-09-25 12:14:13 字數 1292 閱讀 9007

最近公司用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...