前言
最近在学习unity自身封装的网络功能,在游戏物体上挂上Network组件,使其成为网络中的一份子,就像这里所说的,Unity网络协议本身是一个比较高层的网络协议,他并不是独立存在的,而是与引擎的游戏对象结合在一起,所以在Unity中不存在单纯的“发送给服务器”或“发送给客户端的”网络消息,不同的游戏对象之间的通信是独立的,就好像每个游戏对象都有一个独立的通信管道。
在游戏中,对象经常发生变化,需要进行状态同步,状态同步的方向只能是isMine到非isMine。比如一个玩家角色对象hp属性,如果需要其他玩家能够看到,就可以使用状态同步来完成。当isMine的玩家角色的hp变化后,会自动更新这个属性给其他的主机上的同一个玩家角色对象。状态同步还支持保证和非保证模式。
要进行状态同步就需要RPC,在其他机子上对同一游戏物体进行一个远程函数调用,RPC一般用来通过网络通知一次性的游戏事件,RPC的传输方向非常自由,可以在一个主机向任何其他主机,包括自己,发送RPC调用。
在unity网络中用到的相关类和方法
RPC 可以传递的参数
int
float
string
NetworkPlayer
NetworkViewID
Vector3
Quaternion
BitStream可以传递的参数
void Serialize (bool value)
void Serialize (char value) - only one byte [0, 255]
void Serialize (short value)
void Serialize (int value)
void Serialize (float value, float maxDelta = 0.00001f);
void Serialize (Quaternion value, float maxDelta = 0.00001f);
void Serialize (Vector3 value, float maxDelta = 0.00001f);
void Serialize (NetworkPlayer value)
void Serialize (NetworkViewID viewID)
RPCMode:
Server - only server
Others - send to everyone except the sender
OthersBuffered - Send to everyone except sender and adds to the buffer
All - send to everyone
All