Physx Unity3D同步模拟

16 篇文章 2 订阅
14 篇文章 0 订阅



对于同步,碰撞等效果需要引入物理引擎进行模拟的。就涉及到服务器和客户端同时模拟同步的问题。经过一定时间的测试,已经能够在客户端使用Unity3D 3.4.2服务器使用Phyxs 2.8.1的情况下,实现直线运动和碰撞上的同步。但是由于客户端和服务器帧率上存在的差别,所以对于碰撞,无法很好的同步,只能在碰撞后,服务器进行微调。


现在罗列细节如下:
1.主意物理帧率。Unity3D使用Time.fixedDeltaTime 服务器使用NxSence::SetTiming
2.服务器和客户端使用帧同步
3.Unity3D Drag与Physx的damping是一个概念的。
4.重力
a.Unity3D的重力设置可以在edit->project setting->physxics->Gravity设置。Physx在NxSence上设置
b.Unity3D单个物体是否受重力影响可以在rigidbody设置use gravity, physx通家过NxActor::raiseBodyFlag(NX_BF_DISABLE_GRAVITY)
5.最大速度
a.最大角速度是有设置的。Unity3D在edit->project setting->physxics->Max Angular Velocity。Physx是NxBodyDesc.maxAngularVelocity上
6.Unity3D和Physx使用的都是左手坐标系所以没有多少关系。但是有几个坐标转换的函数是需要熟悉的
a.Unity3D
Rotation是Quaternion类型。在Inspector上填写的rotation是绕x,y,z轴的旋转角度。最后的关系是如下,主意顺序不能乱:
transform.rotation = Quaternion.Quaternion.AngleAxis(rotation.y, Vector3.up)
*Quaternion.AngleAxis(rotation.x, Vector3.right)
*Quaternion.AngleAxis(rotation.z, Vector3.forward)

Quaternion.Inverse()获取当前的逆矩阵,可以用来实现左边的互转
b.Physx
localxxxx
NxMat33.getInverse()获取当前矩阵的逆矩阵,可以用来实现左边的互转
7.服务器StepTime 200ms,客户端fixedDeltaTime 20ms.服务器的一次simulator和客户端的10次fixedUpdate效果在AddForce和AddTorge下是几乎相同的。会有微小误差。但是如果同步的是速度,则同步上会出比较大的差距。特别是力比较大的情况下。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值