====== SubItemの所有権と同期処理の関係 ====== SubItem・同期・所有権の関係性について説明します。 [[vci:script:reference:eventfunction:ownership]]も参照してください。 ===== 概略 ===== * **SubItemの位置・回転・拡大/縮小**は、サーバを介して**ネットワーク同期**が行われる * ここでの「同期」とは、同じ値になるよう強制すること * 位置・回転・拡大/縮小以外の値は**同期されない** * SubItemの子孫のオブジェクトの値は**同期されない** * SubItemには**所有者 (VCIまたはSubItemの所有権を持つ者)** と**非所有者**の関係がある * 所有者側では**物理挙動やUpdate関数などで動作した結果の情報が送信**される * 非所有者側では**その結果を受信して再生**する * **SubItemをつかむと所有権が移る** その他、以下のような特徴があります。 * 同期は毎フレームではなく、間引かれて実行される * 位置・回転・拡大/縮小はそのまま送信するとカクカクするため、バーチャルキャストが動きを補間する * 細かい動きや機敏な動きは同期した時に相手側で見た目が変になる場合がある * 同期には遅延があるため、完全に同じ見た目・同じ動きにはならず、若干のズレが発生する場合がある {{ vci:sdk:about_subitem_1.png?nolink&648 |}} ===== 所有権 ===== **SubItemの位置・回転・拡大/縮小を変更できる権利**です。\\ **SubItemごとにスタジオで一人だけが所有者**になれます。同期は、**所有者から非所有者への一方通行**になされます。\\ ※所有権は、ネットワーク同期の所有権であり、authorのことではありません {{ vci:sdk:about_subitem_2.png?nolink&648 |}} ==== 所有権を得る ==== バーチャルキャストでは、誰でもアイテムをつかむ(Grab)ことができて、アイテムをつかむと所有権が移ります。 {{ vci:sdk:about_subitem_3.png?nolink&648 |}} ==== VCIの所有権とSubItemの所有権 ==== SubItemの所有権に加えて、VCIの所有権があります。\\ VCIの所有権は、VCIの所有者 (VCIをシーンに呼び出したユーザー) が持っていて、Grabで移動することはありません。\\ [[vci:script:reference:eventfunction]] の一つ、update関数は、VCIの所有者だけで呼ばれます。\\ このことにより例えば、update関数内で位置・回転・拡大/縮小を変更しても、所有権が無いSubItemの位置・回転・拡大/縮小は行えません。\\ (SubItemの所有権のあるユーザーに位置・回転・拡大/縮小の状態を上書きされる)\\ {{ vci:sdk:about_subitem_4.png?nolink&648 |}} ===== 物理挙動 ===== 所有権と物理は密接な関係があり、物理が有効なSubItemは、所有権のあるアイテムだけ物理挙動します (所有権のないSubItemは Kinematic = true になる)。\\ **所有権の無いアイテムは、所有者の結果をコピー**します。\\ 所有者の結果は**間引きして送信される**ので、間が補完されて奇妙な動きをする場合があります。\\ 高速になるほど顕著になります。 {{ vci:sdk:about_subitem_5.png?nolink&648 |}} {{ vci:sdk:about_subitem_6.png?nolink&648 |}}