ユーザ用ツール

サイト用ツール


vci:sdk:subitem:owned

SubItemの所有権と同期処理の関係

SubItem・同期・所有権の関係性について説明します。


概略

VCIのアイテムは複数プレイヤーでネットワーク同期する必要があります。
ネットワーク同期はサーバを介して行われます。
※ここでの「同期」とは、位置・回転・拡大縮小が同じになるようにすることです。

VCIでは、SubItem毎に同期します。
SubItemは、0個(背景等の動かないもの)、1個(普通のアイテム)、2個以上(複数の物体がセットになっている)ができます。

また、VCIアイテムには親(VCIまたはSubItemの所有権を持つ者。所有者)と子の関係があります。
親側では物理挙動やUpdate関数などで動作した結果の情報が送信され、
子側ではその結果を受信して再生しています。(子は親の過程を知らず、結果だけを受信)
VCIアイテムを握ると所有権が移ります。

その他、以下のような特徴があります。

  1. 同期は毎フレームではなく、間引かれて実行される
  2. 位置・回転・拡大縮小はそのまま送信するとカクカクするため、バーチャルキャストが動きを補間する

(細かい動きや機敏な動きは同期した時に相手側で見た目が変になる場合がある) - 同期には遅延があるため、完全に同じ見た目・同じ動きにはならず、若干のズレが発生する場合がある

所有権

SubItemの位置・回転・拡大縮小を変更できる権利です。
SubItemごとにスタジオで一人だけが親になれます。 同期は、親から子への一方通行になされます。
※所有権は、ネットワーク同期の所有権でauthorのことではありません

所有権を得る

バーチャルキャストでは、誰でもアイテムを掴む(Grab)ことができて、アイテムを掴むと所有権が移ります。

VCIの所有権とSubItemの所有権

SubItemの所有権に加えて、VCIの所有権があります。
VCIの所有権は、アイテムをシーンに呼び出したユーザーが持っていて、Grabで移動することはありません。

Update関数と所有権

VCIスクリプトのUpdate関数はVCIアイテムだけで呼ばれます。
このことより例えば、VCIアイテム内のSubItemの所有権が無い状態で、Update関数内で位置・回転・拡大縮小を変更しても、所有権が無いSubItemの位置・回転・拡大縮小は変更されません。
(所有権のあるプレイヤーに位置・回転・拡大縮小の状態を上書きされる)

物理挙動

所有権と物理は密接な関係があり、物理アイテムは所有権のあるアイテムだけ物理挙動します
所有権の無いアイテムは、所有者の結果をコピーします。
所有者の結果は間引きして送信されるので、間が補完されて奇妙な動きをする場合があります。
高速になるほど顕著になります。

vci/sdk/subitem/owned.txt · 最終更新: 2019/06/24 16:54 by h-eguchi

ページ用ツール