バーチャルキャスト公式Wiki
メニュー
Steam版
デバイス
アセット
配信
その他
リリース情報
- wiki編集者用ページ
-
以前のリビジョンの文書です
VCIの所有権には VCI全体の所有権 と SubItemの所有権 の2種類が存在します。
このページでは下記について説明します。
所有権はVCI全体の所有権と、VCI内のSubItemの所有権の2つがあります。
それぞれのイベント関数を処理する時に、判定に使われる所有権は異なります。
イベント | VCI所有権:あり | VCI所有権:なし |
---|---|---|
update | 実行される | 実行されない |
updateAll | 実行される |
※1
SubItemの所有権の有無は処理に影響を与えませんが、
update関数でSubItemのtransformを動かす場合は、動かしたいSubItemの所有権が必要です。
(スクリプトで変更しても、SubItemの所有権を持ったクライアントからtransformが上書きされる為)
イベント | 所有権:有 | 所有権:なし |
---|---|---|
onGrab | つかんだ時に実行 | つかんだ後、所有権を得た時に実行 ※1 |
onUngrab | 離した時に実行 | 所有権を失った時に実行(つかんだ状態でも) |
onUse | Useボタンを押した時 | 実行されない |
onUnuse | Useボタンを離した時 | 所有権を失った時に実行 ※2 |
onTriggerEnter/Exit | 実行される | 実行されない ※3 |
onCollisionEnter/Exit | 実行される | 実行されない ※3 |
※1
ネットワークの遅延があります。
「一瞬だけつかむ」というセンシティブな操作の場合、うまく実行されない可能性があります。
※2
所有権を失った事によりonUnuseが実行されるので、スクリプトは所有権を失った状態で実行されます。
また、Useボタンを押し続けてる状態でも、SubItemの所有権を失った場合はonUnuseは実行されます。
※3
所有権のないSubItemは Kinematic = true になります。
transformはSubItemの所有権を持つクライアントの結果が、他のクライアントに同期されます。
つまり、Luaスクリプトや接触によりSubItemのtransformに変化を与えても、
SubItemの所有権を持つクライアントのtransformの状態に上書きされる為、結果としては変化しません。
処理の詳細は VCIアイテムとSubItemについて を参考にしてください。
所有権は「SubItemをgrabした時(つかんだ時)」にgrabした人に移動します。
そのためSubItemをGrabした状態のまま(他の人がつかんだ事により)所有権を失う事はあります。
所有権を得るタイミング | 所有権を得る人 |
---|---|
所有権を持った人が退出 | スタジオ内で1番最初に入室している人がSubItemの所有権を得る |
VCI出現時 | VCIを出現させた人(Grabする前から) |
無人の公開スタジオ入室時 | 入室した人が放置されたアイテムのSubItem所有権を得る |
所有権を失うタイミング | 所有権を失う人 |
---|---|
スタジオ退出時(公開スタジオも同様) | スタジオを退出した人 |
SubItemを所有権を持ってない人がSubItemをgrabした時 | grabされたSubItemの所有権を持っていた人 |
※1
原理上誰も所有権を持ってないSubItemが存在するパターンはありません。
(無人の公開スタジオを除く)
※2
持ち主不在にする方法が存在していた場合、それはバグとなります。
そのように思われる挙動を発見した場合、状況・手順などを報告していただきますようお願いいたします。
SubItemにはグループIDというものがあり、Grabした時に同じグループIDのSubItem全ての所有者を得る事ができます。
ただし、グループIDが0(設定されてない)同士のSubItemの場合、別々のグループIDとして認識されます。
VCIの構造によっては同時に複数の所有権を必要とするものもあるため、盛り込まれた仕様です。
詳細につきましては GroupIDについて を参考にしてください。
※1
_ALL_ を含む関数については vci.assets(ExportAssets) を参考にしてください。