1、确定性
a、随机数:自己写随机函数,服务器提供随机种子
b、浮点数:如果需要运行在不同的机器上,需要使用定点数
c、未初始化变量:某些第三方库在不同的架构上,变量的默认值不一定相同
d、执行顺序:dictionary,table(lua),Raycast返回的结果 顺序不保证
e、本地数据:逻辑顺序需要与玩家无关
f、帧率:不能使用显示帧率,逻辑与显示完全分离,保证逻辑帧的稳定
g、第三方库:最好不要用没有源码的第三方
h、update:monobehaviour的update不能保证顺序,需要逻辑层统一做update
2、流畅性
a、插值:显示与逻辑分离,显示帧率根据机器调整,同时做插值
b、网络连接:延迟要求高的游戏使用udp,一次发送多个帧的数据减少丢包重传,某些地区udp连接不上,切换到tcp
c、jitterbuffer
d、位置抖动:
I、对position变化做阈值(<0.01不更新)判定
II、运动插值,在LateUpdate中更新Position
III、如果摄像机移动有速度,需要将速度和Time.dealtTime联系在一起,且速度最好匀速
IV、在图像资源的制作过程中使用各种滤波函数来模糊图像(http://gad.qq.com/article/detail/5767)
V、在导入资源时设置滤波模式为bilinear或者trilinear
VI、Unity的sprites/Default 这个shader带有一个Pixel snap选项,选上该选项,sprite在渲染时,其顶点位置将snap到整数倍像素位置,从而保证整个sprite能以整数倍像素大小移动
VII、相机位移像素取整
3、外挂
a、修改属性:上传当前状态的hash值,战斗核心在服务器运行逻辑验证
b、透视:使用状态同步控制
c、自动操作:验证码、没有什么好方法