Unity3d網路遊戲Socket通訊

2021-06-22 20:26:30 字數 2049 閱讀 9466

下面是unity3d遊戲通訊socket實現: basegamesocket.cs

@原創:dongfu.luo

using system;

using system.collections.generic;

using system.net.sockets;

public abstract class basegamesocket

this._is_read_head = false;

this._data_buffer = null;

this._data_offset = 0;

this._data_size = 0;

}//關閉客戶端的socket 

public void close()  }

catch (exception exception)  }

//連線遊戲服務端

public void connect(string ip, int port)

catch (exception exception)  }

//如果socket沒有關閉繼續等伺服器資訊,如果有資訊則開始讀 

private void continueread()  }

catch (exception exception)  }

//從傳送佇列從不斷向遊戲伺服器傳送命令 

private void continuesend()

state = this._send_list[0];

if (state.start)

state.start = true;

} socket sock = state.sock;

if (sock.connected)  }

//傳送失敗或錯誤,則關閉socket一般是網路斷了伺服器關閉了 

protected void error(string msg)

//程式猿都知道這是析構函式 

~packedsocket() 

public int getsendqueuesize()  }

//此函式由子類去處理 

protected abstract void onconnect();

//如果是第一次連線上了,解析訊息頭

private void onconnect(iasyncresult ret)

catch (exception exception)  }

} protected abstract void onerror(string msg);

protected abstract void onpack(byte data);

//有服務端資訊來,開始解析,現解析資訊頭再解析訊息體

private void onread(iasyncresult ar)

else if (this._data_offset != this._data_size)

else if (this._is_read_head)

else  }

} catch (exception exception)  }

//如果命令傳送成功,檢查傳送佇列是否還有需要傳送的命令。如果有則繼續傳送 

private void onsend(iasyncresult ar)  }

this.continuesend();

} }//讀取訊息體 

private void readdata(int pack_len)

//讀取訊息頭 

private void readhead()

//具體的傳送資訊,先把資料發到傳送佇列 

public void send(byte buff)

; int count = 0;

list list = this._send_list;

lock (list)

if (count > 0x3e8)

else  }

} public bool isclosed  }

public bool isconnected  }

private class packetout }

Unity3D遊戲開發

入門級unity安裝教程 一 unity五大面板 unity3d的介紹 1 介面 選單 面板 元件 unity5.x 編輯器介紹 unity開啟篇 一 滑鼠右鍵 wsadeq前後左右上下移動 shift加速移動 滑鼠右鍵旋轉檢視 滑鼠中鍵移動檢視 alt 右鍵縮放 alt 左鍵旋轉物體視角 q移動場...

Unity3D遊戲開發初探

1 如何在遊戲指令碼程式中建立物件而不是一開始就建立好物件?使用gameobject的靜態方法 createprimitive view code 其中在createcube方法中,使用gameobject.createprimitive方法來建立cube型別的遊戲物件例項,設定了它出現的座標並為它...

Unity 3D 坦克大戰遊戲收穫

功能很多的指令碼 通常情況下不能適應特殊情況 最好是乙個指令碼只做一件事情 這樣復用率會很高 乙個指令碼寫完以後很多地方都可以用 比如說 移動的指令碼 movement.cs 只處理監聽鍵盤按鍵 和 對應的移動處理 攻擊指令碼 attack 只處理攻擊 遊戲中 坦克的血量顯示就是用的ugui中的 s...