unity客戶端通訊測試問題處理(二)
在客戶端的通訊測試過程中,場景載入的問題給自己帶來了不小的麻煩。因為訊息的解析方法在單獨的監聽執行緒中呼叫,這也就意味著無法在訊息的解析方法中呼叫unity自身的api了。本來是打算在接收到場景切換的訊息後,直接在解析方法中呼叫協同程式startcoroutine,來實現場景的非同步載入,可是現在一
旦呼叫就會
提示以下錯誤:
startcoroutine_auto can only be called from the main thread...
不能直接在監聽執行緒中呼叫,那就只能另想辦法了。如何來觸發場景非同步載入的協同程式呢?於是,自己想到了start方法,因為這裡是個呼叫協同程式的好地方。那麼又該如何呼叫start方法呢?沒錯,通過物件的例項化來實現。
當乙個物件在例項化的過程中,它的指令碼元件中的awake方法與start方法會相繼執行。因此,我就通過例項化遊戲物件的方式,來觸發start方法,進而在start方法中呼叫協同程式,進行場景的非同步載入操作。物件例項化的過程,通過乙個布林變數來進行控制,當解析方法中接收到場景切換的訊息後,與目標場景相對應的布林變數置為true,從而在update方法中進行場景載入物件的例項化,**如下所示:
void
update( )
else
if( _isfirstlevel )
else
if( _issecondlevel ) }
要實現這個過程,離不開prefab的製作。我們需要針對專案中存在的幾個不同場景,每個場景製作乙個prefab,作為非同步載入場景的物件使用,prefab如下所示:
然後還需要編寫繫結在這每乙個prefab之上的指令碼,指令碼實現的功能,就是根據不同的物件,來載入不同的場景,**如下所示:
void
start()
else
if( first_object_name == gameobject.name )
else
if( second_object_name == gameobject.name ) }
在協同程式中直接呼叫場景管理類寫好的非同步載入場景的方法,完成場景的非同步載入。非同步載入場景的**如下所示:
public
ienumerator
loadlevelasync(
string
levelname )
_async =
.loadlevelasync( levelname );
yield
return
_async; }
通過以上處理,當我們在監聽執行緒中的訊息解析方法中接收到場景切換的訊息後,就會立即例項化與目標場景相對應的遊戲物件,然後通過在start方法中呼叫的協同程式,來完成場景的非同步載入。
自己仍然在琢磨,
在update方法中處理場景載入物件的例項化過程,
這可能並不是最佳的方式。
android客戶端除錯問題
情形是這樣子的,有時候自己發現了問題,確認好了幾遍了,然後告訴後端開發人員。其實自己有後端資料庫相關表的資訊,很多時候自己直接使用客戶端來除錯,很少對照 資料庫資料來除錯。所以有時候比較慢,其實自己發現如果客戶端發現了問題,然後也看一下 伺服器的資料,有時候更容易發現問題。單方面的資訊過少也不利於自...
TCP通訊,多客戶端通訊(客戶端 服務端)
客戶端和伺服器間的交流,客戶端傳送資訊,伺服器接收到,並返回資訊 長連線建立socket連線服務端 指定ip位址,埠號 通過ip位址找對應的伺服器 呼叫socket的getinputstream 和getoutputstream 方法獲取和服務端相連的io流 輸入流可以讀取服務端輸出流寫出的資料 輸...
UDP通訊(客戶端)
根據網上的資源修改的 include include include pragma comment lib,ws2 32.lib int client void int main int argc,char argv int client void local.sin family af inet ...