この文書の現在のバージョンと選択したバージョンの差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
vci:script:reference:eventfunction [2021/06/24 17:35] t-daihisa |
vci:script:reference:eventfunction [2024/01/14 12:00] (現在) Ramen [イベント関数一覧] |
||
---|---|---|---|
ライン 1: | ライン 1: | ||
+ | ~~NOTOC~~ | ||
====== VCIイベント関数 ====== | ====== VCIイベント関数 ====== | ||
+ | |||
+ | <WRAP center round important 80%> | ||
+ | |||
+ | このページは過去の情報となります。\\ | ||
+ | 新しいスクリプトリファレンスは**[[https://developer.virtualcast.jp/vci-docs/api/events/index.html|こちら]]**になります。 | ||
+ | </WRAP> | ||
イベント関数とは、条件を満たした時に実行される関数です。 | イベント関数とは、条件を満たした時に実行される関数です。 | ||
- | 例えば「VCIに触った時に音を鳴らす」「VCIを掴んだ時にアニメーションをさせる」といったような挙動は、イベント関数を通じてそれぞれの処理が実行されます。 | + | 例えば「VCIに触った時に音を鳴らす」「VCIをつかんだ時にアニメーションをさせる」といったような挙動は、イベント関数を通じてそれぞれの処理が実行されます。 |
イベント関数はシステムによって関数名と関数の挙動が定義されています。 | イベント関数はシステムによって関数名と関数の挙動が定義されています。 | ||
ライン 10: | ライン 17: | ||
===== イベント関数一覧 ===== | ===== イベント関数一覧 ===== | ||
- | ^ イベント関数 ^ 説明 ^ | + | 下表において、VCI上のSubItemのことも便宜上VCIと表現しています。 |
- | | [[vci/script/reference/eventfunction#update | update()]] | **VCIを出したユーザーのクライアントのみ**で毎フレーム実行されます | | + | |
- | | [[vci/script/reference/eventfunction#updateall | updateAll()]] | 所有権に関係なく全ユーザーで実行されるupdate()です | | + | ^ イベント関数 ^ 説明 ^ 条件 ^ |
- | | [[vci/script/reference/eventfunction#onuse | onUse(use)]] | VCIを持っている状態でコントローラーをグリップした場合に実行されます。 | | + | | [[#update]] | 毎フレーム実行 |VCIを出したユーザーのみ| |
- | | [[vci/script/reference/eventfunction#onunuse | onUnuse(use)]] | VCIを持っている状態でコントローラーをグリップして離した場合に実行されます。 | | + | | [[#updateAll]] | 全ユーザーで毎フレーム実行 | | |
- | | [[vci/script/reference/eventfunction#ontriggerenter | onTriggerEnter(item, hit)]] | VCIと[[vci:component:unitycomponent:collider| Collider]]が接触した時に実行されます。\\ ([[vci:component:unitycomponent:collider| Collider]]のIsTriggerにチェックされていれば有効) | | + | | [[#onUse]] | VCIを**使った**時に実行 |所有権を持っている| |
- | | [[vci/script/reference/eventfunction#ontriggerexit | onTriggerExit(item, hit)]] | VCIと[[vci:component:unitycomponent:collider| Collider]]が接触した状態から離れた時に実行されます。\\ ([[vci:component:unitycomponent:collider| Collider]]のIsTriggerにチェックされていれば有効) | | + | | [[#onUnuse]] | VCIを**使うのをやめた**時に実行 |:::| |
- | | [[vci/script/reference/eventfunction#oncollisionenter | onCollisionEnter(item, hit)]] | VCIと[[vci:component:unitycomponent:collider| Collider]](+[[vci:component:unitycomponent:rigidbody|Rigidbody]])が接触した時に実行されます。 | | + | | [[#onTriggerEnter]] | VCIと[[vci:component:unity_collider|Collider]]が**接触した**時に実行 |所有権を持っている \\ [[vci:component:unity_collider|Collider]]の**IsTrigger:有効**| |
- | | [[vci/script/reference/eventfunction#oncollisionexit | onCollisionExit(item, hit)]] | VCIと[[vci:component:unitycomponent:collider| Collider]](+[[vci:component:unitycomponent:rigidbody|Rigidbody]])が接触した状態から離れた時に実行されます。 | | + | | [[#onTriggerExit]] | VCIと[[vci:component:unity_collider|Collider]]が**離れた**時に実行 |:::| |
- | | [[vci/script/reference/eventfunction#ongrab | onGrab(target)]] | VCIを掴んだ時(トリガーボタンを押す)に実行されます。 | | + | | [[#onCollisionEnter]] | VCIと[[vci:component:unity_collider|Collider]]が**接触した**時に実行 |所有権を持っている \\ [[vci:component:unity_collider|Collider]]の**IsTrigger:無効** | |
- | | [[vci/script/reference/eventfunction#onungrab | onUngrab(target)]] | VCIを離した時(トリガーボタンを離す)に実行されます。 | | + | | [[#onCollisionExit]] | VCIと[[vci:component:unity_collider|Collider]]が**離れた**時に実行 |:::| |
+ | | [[#onGrab]] | VCIを**つかんだ**時に実行 | | | ||
+ | | [[#onUngrab]] | VCIを**離した**時に実行 | | | ||
==== イベント関数の引数について ==== | ==== イベント関数の引数について ==== | ||
各イベント関数の引数には **Subitemのgameobject名** が **String型** で渡されます。\\ | 各イベント関数の引数には **Subitemのgameobject名** が **String型** で渡されます。\\ | ||
- | 引数を使って ''SubItem = vci.assets.GetSubItem(target)'' 等を使う事により、掴んだり触ったりしたSubitemに対して、処理を行う事ができます。 | + | 引数を使って ''SubItem = vci.assets.GetTransform(target)'' 等を使う事により、つかんだり触ったりしたSubitemに対して、処理を行う事ができます。 |
- | ===== Start関数が無い ===== | + | ===== アイテムロード時のタイミングでの処理を書きたい ===== |
- | Unity(C#)の「Start」や「Awake」に相当するイベント関数はVCIスクリプトには実装されていません。\\ | + | Unityの ''Start'' のような、アイテムロード時に最初に一度だけ実行されるイベント関数はありません。\\ |
- | しかし、**関数の外に記述した部分はVCIを出した時の1度しか実行されない**ので、関数の外に処理を書くことで実質的にStart関数のように扱う事が可能です。\\ | + | しかし Lua はスクリプト言語ですので、 ''main.lua'' のグローバルな場所に処理を記述すれば、そのタイミングで実行できます。 |
+ | === サンプル === | ||
<file lua main.lua> | <file lua main.lua> | ||
- | -- ここがstart関数のように機能します | + | function func1() |
- | print("VCIを出した時のみ実行") | + | print("誰からも呼び出されていないのでこれは実行されない") |
- | + | ||
- | function myFunction() | + | |
- | --VCI呼び出し時に実行されず、他の関数から呼び出す必要があります | + | |
- | print("onUse()から実行される") | + | |
end | end | ||
- | function onUse() | + | function func2() |
- | print("Useボタンを押した時に自分で定義した myFunction() を呼び出す") | + | print("グローバルから呼び出されているので、アイテムをロードしたときに一度だけ実行される") |
- | myFunction() | + | |
end | end | ||
+ | |||
+ | print("アイテムをロードしたときに一度だけ実行される") | ||
+ | func2() | ||
</file> | </file> | ||
===== update ===== | ===== update ===== | ||
+ | **update()** | ||
**VCIを出したユーザーのクライアントのみ**で毎フレーム実行されます。\\ | **VCIを出したユーザーのクライアントのみ**で毎フレーム実行されます。\\ | ||
- | 他のクライアントでは実行されないので、結果を同期させる際には注意する必要があります。\\ | + | 他のクライアントでは実行されないので、結果を同期させる際には注意する必要があります。 |
- | \\ | + | |
ただし、updateによる処理であってもオブジェクトのトランスフォームなどはバーチャルキャストの機能によって同期します。\\ | ただし、updateによる処理であってもオブジェクトのトランスフォームなどはバーチャルキャストの機能によって同期します。\\ | ||
- | 詳しくは [[vci:component:sdk:subitem:owned|VCIアイテムとSubItemについて]] を参照してください。\\ | + | 詳しくは [[vci:component:sdk:subitem:owned|VCIアイテムとSubItemについて]] を参照してください。 |
+ | === サンプル === | ||
<file lua main.lua> | <file lua main.lua> | ||
function update() | function update() | ||
ライン 61: | ライン 71: | ||
===== updateAll ===== | ===== updateAll ===== | ||
+ | **updateAll()** | ||
所有権に関係なく全ユーザーで毎フレーム実行されるupdate()です。\\ | 所有権に関係なく全ユーザーで毎フレーム実行されるupdate()です。\\ | ||
- | 詳しくは [[vci:component:sdk:subitem:owned|VCIアイテムとSubItemについて]] を参照してください。\\ | + | 詳しくは [[vci:component:sdk:subitem:owned|VCIアイテムとSubItemについて]] を参照してください。 |
+ | === サンプル === | ||
<file lua main.lua> | <file lua main.lua> | ||
function updateAll() | function updateAll() | ||
ライン 71: | ライン 83: | ||
===== onUse ===== | ===== onUse ===== | ||
+ | **onUse(use)** | ||
- | VCIを持っている状態でコントローラーをグリップした場合に実行されます。\\ | + | [[vci:script:reference:eventfunction:ownership:#SubItemの所有権とイベント関数の関係|SubItemの所有権を持っている状態]]でSubItemを使った場合に実行されます。 |
- | 下記サンプルはUseされたSubItemの名前がConsoleに表示されます。 | + | |
- | ※使用するには掴める事が前提のため、[[vci:component:unitycomponent:collider| Collider]]と[[vci:component:sdk:subitem| SubItem(VCISDK)]]の**Grabbable**が設定されていないと動作しません。 | + | ※使用するにはつかめる事が前提のため、[[vci:component:unity_collider| Collider]]と[[vci:component:sdk:subitem| SubItem]]の**Grabbable**が設定されていないと動作しません。 |
+ | === サンプル === | ||
+ | UseされたSubItemの名前がConsoleに表示されます。 | ||
<file lua main.lua> | <file lua main.lua> | ||
function onUse(use) | function onUse(use) | ||
print("onUse : "..use) | print("onUse : "..use) | ||
- | print("SubItemの "..use.." がグリップ状態になりました。") | + | print("SubItemの "..use.." が使っている状態になりました。") |
end | end | ||
</file> | </file> | ||
===== onUnuse ===== | ===== onUnuse ===== | ||
+ | **onUnuse(use)** | ||
- | VCIを持っている状態でコントローラーをグリップして離した場合に実行されます。\\ | + | VCIを持っている状態でVCIを使うのをやめた場合に実行されます。 |
- | 下記サンプルはUseされたSubItemの名前がConsoleに表示されます。 | + | |
- | ※使用するには掴める事が前提のため、[[vci:component:unitycomponent:collider| Collider]]と[[vci:component:sdk:subitem| SubItem(VCISDK)]]の**Grabbable**が設定されていないと動作しません。 | + | ※使用するにはつかめる事が前提のため、[[vci:component:unity_collider| Collider]]と[[vci:component:sdk:subitem| SubItem]]の**Grabbable**が設定されていないと動作しません。 |
+ | === サンプル === | ||
+ | UseされたSubItemの名前がConsoleに表示されます。 | ||
<file lua main.lua> | <file lua main.lua> | ||
function onUnuse(use) | function onUnuse(use) | ||
print("Unuse : "..use) | print("Unuse : "..use) | ||
- | print("SubItemの "..use.." がグリップ状態から離れました。") | + | print("SubItemの "..use.." が使っている状態から離れました。") |
end | end | ||
</file> | </file> | ||
===== onTriggerEnter ===== | ===== onTriggerEnter ===== | ||
+ | **onTriggerEnter(item, hit)** | ||
VCIとColliderが接触した時に実行されます。\\ | VCIとColliderが接触した時に実行されます。\\ | ||
- | onTriggerEnterはVCIのSubItemにアタッチされた[[vci:component:unitycomponent:collider| Collider]]の**Is Trigger**が有効だと実行されます。\\ | + | onTriggerEnterはVCIのSubItemにアタッチされた[[vci:component:unity_collider| Collider]]の**Is Trigger**が有効だと実行されます。\\ |
- | SubItemに物理挙動を持たせたくないが、接触しているかどうかの判定は行いたい時に使います。\\ | + | SubItemに物理挙動を持たせたくないが、接触しているかどうかの判定は行いたい時に使います。 |
- | \\ | + | |
- | 下記サンプルはSubItem同士が接触するとSubItemの名前のログが流れます。\\ | + | キャラクターの各パーツにもColliderは存在するため、キャラクターの接触判定を行うことも出来ます。 |
+ | === サンプル === | ||
+ | SubItem同士が接触するとSubItemの名前のログが流れます。 | ||
<file lua main.lua> | <file lua main.lua> | ||
function onTriggerEnter(item, hit) | function onTriggerEnter(item, hit) | ||
ライン 114: | ライン 134: | ||
===== onTriggerExit ===== | ===== onTriggerExit ===== | ||
+ | **onTriggerExit(item, hit)** | ||
VCIとColliderが接触した状態から離れた時に実行されます。\\ | VCIとColliderが接触した状態から離れた時に実行されます。\\ | ||
- | onTriggerExitはVCIのSubItemにアタッチされた[[vci:component:unitycomponent:collider| Collider]]の**Is Trigger**が有効だと実行されます。\\ | + | onTriggerExitはVCIのSubItemにアタッチされた[[vci:component:unity_collider| Collider]]の**Is Trigger**が有効だと実行されます。\\ |
SubItemに物理挙動を持たせたくないが、接触しているかどうかの判定は行いたい時に使います。 | SubItemに物理挙動を持たせたくないが、接触しているかどうかの判定は行いたい時に使います。 | ||
- | 下記サンプルはSubItem同士が接触するとSubItemの名前のログが流れます。\\ | + | === サンプル === |
+ | SubItem同士が接触した状態から離れるとSubItemの名前のログが流れます。 | ||
<file lua main.lua> | <file lua main.lua> | ||
function onTriggerExit(item, hit) | function onTriggerExit(item, hit) | ||
ライン 129: | ライン 150: | ||
===== onCollisionEnter ===== | ===== onCollisionEnter ===== | ||
+ | **onCollisionEnter(item, hit)** | ||
VCIとCollider(+Rigidbody)が接触した時に実行されます。\\ | VCIとCollider(+Rigidbody)が接触した時に実行されます。\\ | ||
- | onCollisionEnterはVCIのSubItemにアタッチされた[[vci:component:unitycomponent:collider| Collider]]の**Is Trigger**が無効だと実行されます。\\ | + | onCollisionEnterはVCIのSubItemにアタッチされた[[vci:component:unity_collider| Collider]]の**Is Trigger**が無効だと実行されます。\\ |
SubItemに物理挙動を持たせた上で接触判定を行いたい時に使用します。 | SubItemに物理挙動を持たせた上で接触判定を行いたい時に使用します。 | ||
- | 下記サンプルはSubItem同士が接触するとSubItemの名前のログが流れます。 | + | === サンプル === |
+ | SubItem同士が接触するとSubItemの名前のログが流れます。 | ||
<file lua main.lua> | <file lua main.lua> | ||
ライン 144: | ライン 167: | ||
===== onCollisionExit ===== | ===== onCollisionExit ===== | ||
+ | **onCollisionExit(item, hit)** | ||
VCIとCollider(+Rigidbody)が接触した状態から離れた時に実行されます。\\ | VCIとCollider(+Rigidbody)が接触した状態から離れた時に実行されます。\\ | ||
- | onCollisionExitはVCIのSubItemにアタッチされた[[vci:component:unitycomponent:collider| Collider]]の**Is Trigger**が無効だと実行されます。\\ | + | onCollisionExitはVCIのSubItemにアタッチされた[[vci:component:unity_collider| Collider]]の**Is Trigger**が無効だと実行されます。\\ |
SubItemに物理挙動を持たせた上で接触判定を行いたい時に使用します。 | SubItemに物理挙動を持たせた上で接触判定を行いたい時に使用します。 | ||
- | 下記サンプルはSubItem同士が接触した状態から離れるとSubItemの名前のログが流れます。 | + | === サンプル === |
+ | SubItem同士が接触した状態から離れるとSubItemの名前のログが流れます。 | ||
<file lua main.lua> | <file lua main.lua> | ||
function onCollisionExit(item, hit) | function onCollisionExit(item, hit) | ||
ライン 159: | ライン 183: | ||
===== onGrab ===== | ===== onGrab ===== | ||
+ | **onGrab(target)** | ||
- | onGrabはVCIを掴んだ時に実行されます。\\ | + | onGrabはVCIをつかんだ時に実行されます。\\ |
onGrab(target)の引数にはSubItemの名前が格納されます。 | onGrab(target)の引数にはSubItemの名前が格納されます。 | ||
- | 下記サンプルは掴んだアイテムの現在地をConsoleに表示するサンプルです。 | + | === サンプル === |
+ | つかんだアイテムの現在地をConsoleに表示するサンプルです。 | ||
<file lua main.lua> | <file lua main.lua> | ||
function onGrab(target) | function onGrab(target) | ||
print("onGrab : "..target) | print("onGrab : "..target) | ||
- | local item = vci.assets.GetSubItem(target) | + | local item = vci.assets.GetTransform(target) |
print(item.GetPosition()) | print(item.GetPosition()) | ||
end | end | ||
ライン 174: | ライン 199: | ||
===== onUngrab ===== | ===== onUngrab ===== | ||
- | + | **onUngrab(target)**\\ | |
- | onUngrabはVCIを掴んでる状態から離した時に実行されます。\\ | + | onUngrabはVCIをつかんでる状態から離した時に実行されます。\\ |
onGrab(target)の引数にはSubItemの名前が格納されます。 | onGrab(target)の引数にはSubItemの名前が格納されます。 | ||
+ | === サンプル === | ||
下記サンプルはSubItemを離した時に、(0,0,0)の位置に移動させるサンプルです。\\ | 下記サンプルはSubItemを離した時に、(0,0,0)の位置に移動させるサンプルです。\\ | ||
アイテムを移動させた場合は''SetVelocity(Vector3.zero)''でアイテムに加わってる力を0にすると挙動が安定します。 | アイテムを移動させた場合は''SetVelocity(Vector3.zero)''でアイテムに加わってる力を0にすると挙動が安定します。 | ||
ライン 184: | ライン 210: | ||
function onUngrab(target) | function onUngrab(target) | ||
print("onUngrab : "..target) | print("onUngrab : "..target) | ||
- | local item = vci.assets.GetSubItem(target) | + | local item = vci.assets.GetTransform(target) |
item.SetLocalPosition(Vector3.zero) | item.SetLocalPosition(Vector3.zero) | ||
item.SetVelocity(Vector3.zero) | item.SetVelocity(Vector3.zero) | ||
ライン 201: | ライン 227: | ||
==== 処理の例 ==== | ==== 処理の例 ==== | ||
- | **2人で同じVCIを掴んだ場合** | + | **2人で同じVCIをつかんだ場合** |
- | 1.VCIを先に掴んでる人が居る。\\ | + | 1.VCIを先につかんでる人が居る。\\ |
→ 先:Grab + 所有権有り → onGrab()実行済み\\ | → 先:Grab + 所有権有り → onGrab()実行済み\\ | ||
- | 2.後から別の人が同じVCIを掴む。\\ | + | 2.後から別の人が同じVCIをつかむ。\\ |
→ 先:Grab + 所有権無し → onUngrab()が実行される\\ | → 先:Grab + 所有権無し → onUngrab()が実行される\\ | ||
→ 後:Grab + 所有権有り → onGrab()が実行される | → 後:Grab + 所有権有り → onGrab()が実行される | ||