バーチャルキャスト公式Wiki
メニュー
Steam版
デバイス
アセット
配信
その他
リリース情報
- wiki編集者用ページ
-
以前のリビジョンの文書です
イベント関数とは、条件を満たした時に実行される関数です。
例えば「VCIに触った時に音を鳴らす」「VCIを掴んだ時にアニメーションをさせる」といったような挙動は、イベント関数を通じてそれぞれの処理が実行されます。
イベント関数はシステムによって関数名と関数の挙動が定義されています。
イベント関数 | 説明 |
---|---|
update() | VCIを出したユーザーのクライアントのみで毎フレーム実行されます |
updateAll() | 所有権に関係なく全ユーザーで実行されるupdate()です |
onUse(use) | VCIを持っている状態でコントローラーをグリップした場合に実行されます。 |
onUnuse(use) | VCIを持っている状態でコントローラーをグリップして離した場合に実行されます。 |
onTriggerEnter(item, hit) | VCIと Colliderが接触した時に実行されます。 ( ColliderのIsTriggerにチェックされていれば有効) |
onTriggerExit(item, hit) | VCIと Colliderが接触した状態から離れた時に実行されます。 ( ColliderのIsTriggerにチェックされていれば有効) |
onCollisionEnter(item, hit) | VCIと Collider(+Rigidbody)が接触した時に実行されます。 |
onCollisionExit(item, hit) | VCIと Collider(+Rigidbody)が接触した状態から離れた時に実行されます。 |
onGrab(target) | VCIを掴んだ時(トリガーボタンを押す)に実行されます。 |
onUngrab(target) | VCIを離した時(トリガーボタンを離す)に実行されます。 |
各イベント関数の引数には Subitemのgameobject名 が String型 で渡されます。
引数を使って SubItem = vci.assets.GetSubItem(target)
等を使う事により、掴んだり触ったりしたSubitemに対して、処理を行う事ができます。
Unity(C#)の「Start」や「Awake」に相当するイベント関数はVCIスクリプトには実装されていません。
しかし、関数の外に記述した部分はVCIを出した時の1度しか実行されないので、関数の外に処理を書くことで実質的にStart関数のように扱う事が可能です。
-- ここがstart関数のように機能します print("VCIを出した時のみ実行") function myFunction() --VCI呼び出し時に実行されず、他の関数から呼び出す必要があります print("onUse()から実行される") end function onUse() print("Useボタンを押した時に自分で定義した myFunction() を呼び出す") myFunction() end
VCIを出したユーザーのクライアントのみで毎フレーム実行されます。
他のクライアントでは実行されないので、結果を同期させる際には注意する必要があります。
ただし、updateによる処理であってもオブジェクトのトランスフォームなどはバーチャルキャストの機能によって同期します。
詳しくは VCIアイテムとSubItemについて を参照してください。
function update() end
所有権に関係なく全ユーザーで毎フレーム実行されるupdate()です。
詳しくは VCIアイテムとSubItemについて を参照してください。
function updateAll() end
VCIを持っている状態でコントローラーをグリップした場合に実行されます。
下記サンプルはUseされたSubItemの名前がConsoleに表示されます。
※使用するには掴める事が前提のため、 Colliderと SubItem(VCISDK)のGrabbableが設定されていないと動作しません。
function onUse(use) print("onUse : "..use) print("SubItemの "..use.." がグリップ状態になりました。") end
VCIを持っている状態でコントローラーをグリップして離した場合に実行されます。
下記サンプルはUseされたSubItemの名前がConsoleに表示されます。
※使用するには掴める事が前提のため、 Colliderと SubItem(VCISDK)のGrabbableが設定されていないと動作しません。
function onUnuse(use) print("Unuse : "..use) print("SubItemの "..use.." がグリップ状態から離れました。") end
VCIとColliderが接触した時に実行されます。
onTriggerEnterはVCIのSubItemにアタッチされた ColliderのIs Triggerが有効だと実行されます。
SubItemに物理挙動を持たせたくないが、接触しているかどうかの判定は行いたい時に使います。
下記サンプルはSubItem同士が接触するとSubItemの名前のログが流れます。
function onTriggerEnter(item, hit) print("Trigger Enter") print(string.format("%s <= %s", item, hit)) end
VCIとColliderが接触した状態から離れた時に実行されます。
onTriggerExitはVCIのSubItemにアタッチされた ColliderのIs Triggerが有効だと実行されます。
SubItemに物理挙動を持たせたくないが、接触しているかどうかの判定は行いたい時に使います。
下記サンプルはSubItem同士が接触するとSubItemの名前のログが流れます。
function onTriggerExit(item, hit) print("Trigger Exit") print(string.format("%s <= %s", item, hit)) end
VCIとCollider(+Rigidbody)が接触した時に実行されます。
onCollisionEnterはVCIのSubItemにアタッチされた ColliderのIs Triggerが無効だと実行されます。
SubItemに物理挙動を持たせた上で接触判定を行いたい時に使用します。
下記サンプルはSubItem同士が接触するとSubItemの名前のログが流れます。
function onCollisionEnter(item, hit) print("Collision Enter") print(string.format("%s <= %s", item, hit)) end
VCIとCollider(+Rigidbody)が接触した状態から離れた時に実行されます。
onCollisionExitはVCIのSubItemにアタッチされた ColliderのIs Triggerが無効だと実行されます。
SubItemに物理挙動を持たせた上で接触判定を行いたい時に使用します。
下記サンプルはSubItem同士が接触した状態から離れるとSubItemの名前のログが流れます。
function onCollisionExit(item, hit) print("Collision Exit") print(string.format("%s <= %s", item, hit)) end
onGrabはVCIを掴んだ時に実行されます。
onGrab(target)の引数にはSubItemの名前が格納されます。
下記サンプルは掴んだアイテムの現在地をConsoleに表示するサンプルです。
function onGrab(target) print("onGrab : "..target) local item = vci.assets.GetSubItem(target) print(item.GetPosition()) end
onUngrabはVCIを掴んでる状態から離した時に実行されます。
onGrab(target)の引数にはSubItemの名前が格納されます。
下記サンプルはSubItemを離した時に、(0,0,0)の位置に移動させるサンプルです。
アイテムを移動させた場合はSetVelocity(Vector3.zero)
でアイテムに加わってる力を0にすると挙動が安定します。
function onUngrab(target) print("onUngrab : "..target) local item = vci.assets.GetSubItem(target) item.SetLocalPosition(Vector3.zero) item.SetVelocity(Vector3.zero) end
※1.所有権が無い状態でGrabしてもonGrab()は実行されません。Grabした状態で所有権を得たらonGrab()を通ります。
※2.Grab状態であっても、所有権が無くなった段階でonUngrab()が実行されます。
2人で同じVCIを掴んだ場合
1.VCIを先に掴んでる人が居る。
→ 先:Grab + 所有権有り → onGrab()実行済み
2.後から別の人が同じVCIを掴む。
→ 先:Grab + 所有権無し → onUngrab()が実行される
→ 後:Grab + 所有権有り → onGrab()が実行される