Unity3d 帧同步 VR游戏中是否可行
来源:互联网 发布:麻瓜编程爬虫 编辑:程序博客网 时间:2024/06/04 23:22
,游戏运行时以10fps(100毫秒间隔,具体数值可根据实际情况调整)运行一个逻辑帧,逻辑帧负责物理、ai、攻击判定等等。而动画和实际位移由渲染帧负责。这样动画表现是流畅的。而客户端每逻辑帧都会与服务器进行通信同步客户端的操作,当操作同步完成客户端的逻辑帧可以继续向后模拟。比如运行第3帧要确保第一帧的数据是完整的。双方客户端接收的操作内容是一致的,初始状态是一致的,所以运行的结果也应该是一致的。随机数可以使用确定随机种子的伪随机数来解决。
所以关键问题就是要确保客户端以同样的输入可以获得同样的运行结果。 这个是理论上可行的,很多rts游戏也都是基于此原理。比如魔兽争霸3 最高指挥官2 全面战争 星际争霸 帝国时代 等等。 以最高指挥官(Super Commander)为例,其全部单位有上千个,如果要实时同步他们的状态以现在的网络条件都是很困难的,所以这些rts同步的仅仅是操作,即点击了什么位置,点击了什么按钮,选择了什么目标,按了什么按键。客户端接收到对应的操作,进行同样的模拟,达到同样的输出。从而完成网络同步。
总的来说可以归纳为:客户端以输入模式,服务器以判定模式 运行。
输入模式:同步玩家的输入设备状态 , 即点击了什么位置,点击了什么按钮,选择了什么目标,按了什么按键。。。
判定模式:玩家有权限做这个操作就给他分发出去,没有就不干咯;其实服务不仅仅只管理玩家的行为同步,还有各个AI 道具的行为判断,不做管理就会出现两个客户端AI 行为不一致等等问题
VR游戏中同步速率要求更加严谨,因为VR 只要稍微延迟就很容易被玩家发现,VR游戏的服务器一点要很好,客户端的网速要稳定,同步直接用输入同步模式数据量会降低并保证了传输的及时性;
下面是OculusVR/SteamVR平台设备的输入模式同步数据结构:
大致算一下200byte 左右一个同步包,VR中每秒90~120fps 那么
1fps 同步一次的话:200byte*90=18000~200byte*120=2400 1.5k~2.5k 的数据 同步更慢的话就更小了
假设有100个人同时在线玩那么数据量将达到150k~250k 每秒 加上 其他同步也就300K左右 的数据同步
[Serializable]
public class PlayerSync
{
public int Id;
public Vector3 HeadPostion;
public Quaternion HeadRotation;
public bool LeftHand;
public Vector3 LeftHandPostion;
public Quaternion LeftHandRotation;
public KeyState LeftTrigger;
public Vector2 LeftTriggerAsix;
public KeyState LeftGrip;
public Vector2 LeftGripAsix;
public KeyState LeftThumstick;
public TouchState LeftTouch;
public Vector2 LeftTouchAsix;
public KeyState LeftMenu;
public KeyState LeftXButton;
public KeyState LeftYButton;
public Vector3 LeftHandVelocity;
public bool RightHand;
public Vector3 RightHandPostion;
public Quaternion RightHandRotation;
public KeyState RightTrigger;
public Vector2 RightTriggerAsix;
public KeyState RightGrip;
public Vector2 RightGripAsix;
public KeyState RightThumstick;
public TouchState RightTouch;
public Vector2 RightTouchAsix;
public KeyState RightMenu;
public KeyState RightAButton;
public KeyState RightBButton;
public Vector3 RightHandVelocity;
}
public enum KeyState: byte
{
Up,
Down,
Pressed,
}
public enum TouchState : byte
{
Start,
End
}
- Unity3d 帧同步 VR游戏中是否可行
- Unity3D在2D游戏中利用UGUI实现分辨率自适应的一种可行实践方案
- Unity2016 Unity3D开发VR游戏的经验
- Unity3D中实现帧同步
- Unity3D中实现帧同步
- Unity3D中帧同步的实现
- Unity3D中实现帧同步 - Part 1
- Unity3D中实现帧同步 - Part 2
- 从零开始丨使用Unity3D进行VIVE VR游戏开发
- Unity3D-游戏/VR/AR开发之C#基础:字典
- 游戏中帧同步的实现
- Unity3d实现帧同步
- 来看看是否可行
- unity3d 中实现猜拳游戏
- Unity3d中获取游戏对象
- Unity3D VR推拉门
- 蓝鸥Unity3D ——游戏/VR/AR开发课程大纲
- 【公开课】蓝鸥Unity3D ——游戏/VR/AR开发
- 模糊查询:有几种情况1.中文 2.连起来的拼音查询 3.首字母查询 需要一个jar包pinyin4j
- Groovy入门
- C语言FILE结构体
- 认证机构信息管理软件最实用的功能
- 创建型模式—抽象工厂模式
- Unity3d 帧同步 VR游戏中是否可行
- 标识造型设计中的工艺设计
- 如何利用 JConsole观察分析Java程序的运行,进行排错调优
- 最大流的各种变体
- ListenableFuture demo
- stm32的三种编程下载方式
- 生产环境linux centos 安装oracle 11g
- iOS 探讨之 Keychain Services
- unity rotate 旋转物体 限制物体旋转角度 的大坑