【Photon勉強会】完全同期を実現するTrueSync詳解(2017/5/30講演)
- 9. 決定性のなさ #1
• 簡単なデモを作りました
– 半径0.75、質量5の球が
100の速さで毎秒発射
– 半径1.5 高さ3、重さ50の円柱に衝突
– 床の大きさは32x32 摩擦係数は0.5
– 弾の跳ね返る方向、円柱が落ちる
までの時間等少しずつ齟齬が生じる
r = 1.5
h = 3
m = 50
r = 0.75
m = 5
v = 100
w = 32
h = 32
μ = 0.5
- 10. 決定性のなさ #2
• よりわかりやすいデモ
– 半径0.75, 質量5の球が
100の速さで毎秒発射
– 一辺が1重さ1の立方体を
4x4x4個積み上げたものに衝突
– 床の大きさは32x32 摩擦係数は0.5
• 絶対に同じ結果にならない
=決定性はない
r = 0.75
m = 5
v = 100
w = 32
h = 32
μ = 0.5
h,w = 1
m = 1
4x4x4
- 11. 完全同期を目指すと
• 極端な例 (座標)
– 4x4x4 = 64個のboxを同期
– 64(個) x 60(fps) x 4(ccu)
= 15360(msg/sec)
– ほぼ実現不可能
– ベクトルでやっても
齟齬が生じる
r = 0.75
m = 5
v = 100
w = 32
h = 32
μ = 0.5
h,w = 1
m = 1
4x4x4
- 23. クラス対照表
Unity TrueSync Unity TrueSync
BoxCollider TSBoxCollider PolygonCollider2D TSPolygonCollider2D
CapsuleCollider TSCapsuleCollider RidigBody TSRigidBody
CapsuleCollider TSCapsuleCollider SphereCollider TSSphereCollider
CircleCollider TSCircleCollider TerrainCollider TSTerrainCollider
Collistion TSCollision Transform TSTransform
ContactPoint TSContactPoint Vector TSVector
MeshCollider TSMeshCollider
- 36. 入力受取例
public class PlayerInput : TrueSyncBehaviour {
public override void OnSyncedInput() {
FP accell = Input.GetAxis("Vertical");
FP steer = Input.GetAxis("Horizontal");
TrueSyncInput.SetFP(0, accell);
TrueSyncInput.SetFP(1, steer);
}
}
- 38. 入力反映例
public override void OnSyncedUpdate() {
FP accell = TrueSyncInput.GetFP(0);
FP steer = TueSyncInput.GetFP(1);
accell *= 10 * TrueSyncManager.DeltaTime;
steer *= 250 * TrueSyncManager.DeltaTime;
tsTransform.Translate(0, 0, accell,
Space.Self);
tsTransform.Rotate(0, steer, 0);
}