在上一篇文章中,已经可以在服务器上直接根据服务器自己的操作指令,模拟得出结果,修改球的位置了,接下来,将要考虑如何将服务器模拟的位置如何同步到客户端.
1.服务器向客户端发送单位实体(Entity)状态
首先需要设定一个发包的频率(SendRate),目前设置的是每10个模拟帧发送一次,对于60模拟帧每秒的游戏世界来说,这也相当于6个包每秒.这个包的数据应该是描述Entity在当前模拟帧的状态.
public class State
{
public int frame; //模拟的帧号
public Entity entity; //所属的Entity
public List properties; //需要描述的属性
public int Pack(Packet packet)
{
packet.Write(frame);
//将属性数据写入消息包packet
}
public int Read(Packet packet)
{
frame = packet.ReadInt();
//从消息包中取出属性数据
}
}
发送的方法:
public void FixedUpdate()
{
if (Core.frame % SendRate == 0) //每隔10帧发送一次
{
foreach (var conn in connections)
{
conn.Send();
}
}
}
//connection中发送的方法
publ