セッションでのオブジェクト同期について
セッションでは、参加者のアクションが他の参加者にも同期する事で自然な体験の共有が可能です。
ネットワーク同期の仕組みは複雑です。
STYLYでは出来るだけ同期を意識する事なく作品制作が出来るような仕組みを提供します。
STYLYにおける同期の特徴を以下に説明します。
同期するもの
- アバターの姿勢、身振り手振り
- uGUIのボタンを押した。ボールを投げたといったインタラクション
同期対象のUnityコンポーネント
- uGUI
- Button
- Dropdown
- InputField
- ScrollRect
- Scrollbar
- Slider
- toggle
- Event Trigger
- Pointer Down
- Pointer Up
- Pointer Enter
- Pointer Exit
- Pointer Click
- STYLY Interaction SDK
- Breakable
- Breaker
- ColliderTrigger
- Collision
- DestroyTarget
- Draggalbe
- Equipment
- Mover
- Spawner
- Timer
参考作品を実際にセッションで試してもらえると分かりやすいです。
同期しないもの
- Timeline、Animation
- Playmakerでの処理
- 物理演算による動き
アニメーションやPlaymakerの処理は、同期するイベント(ボタンクリックなど)を起点とする事で実質的に全プレイヤーで同期して動かす事が出来ます。
物理演算は決定論的ではないため、参加者によって位置にズレが生じます。
ただ、Draggable/Equipmentによりプレイヤーが持っている間は位置を同期します。
また、投げた瞬間の位置とベクトルも同期しますので、放り投げたボールはおおよそ同じ位置に着地します。
制作における注意事項
- 同期対象の上限:999
- 上限を超えた物は同期しません
- 通信頻度に気をつける
- 同期を同時に多量に行うと通信エラーの原因になります。問題が起こる場合は連打を抑止するなど対応してください
- 同期したく無い場合は STYLY_Attr_DoNotSync コンポーネントを使う
- STYLY_Attr_DoNotSync コンポーネントにより、GameObjectおよび子オブジェクトを同期しないように指定できます
セッション運用時の注意事項
- シーン体験中に、セッションに途中参加した人には同期しません
- 必ずホストが居る様にしてください。
- ホストが居なくなると同期対象のオブジェクトは消えます
- オブジェクトの同期に問題が出た場合の解消方法
- ホスト操作により、対象のシーンを再度シーン一覧から選択してください。全員が同時にシーン遷移する必要があります。
- (重要)必ず事前にテストしましょう
STYLYアセット同期対応状況
- MediaPlayer系のアセットは同期しません