Chapter 12

ComonyDelayAction

LASTMILE WORKS
LASTMILE WORKS
2022.07.30に更新

ComonyDelayActionについて


ComonyTriggerによって関連付けられたギミックの動作のタイミングを遅らせることが出来るコンポーネントです。

トリガーやギミック、イベントの仕組みがわからない場合はComonyTriggerのページをご覧ください。

Gimmickシーンを確認


Gimmickシーン(Assets > ComonySDK > Samples > Gimmick)の中に配置されているWalkという名前のオブジェクトにComonyDelayActionコンポーネントをアタッチする形でご説明いたします。

ComonyDelayActionコンポーネントをアタッチ


では早速、Walkの中にあるTrigger_walkにComonyDelayActionコンポーネントをアタッチしてみましょう。

Trigger_walkを選択してInspectorの一番下の『Add Component』をクリックします。



出てくるウインドウの検索欄からComonyDelayActionを検索して選択します。



なお、今回は説明のためにTrigger_walkにComonyDelayActionをアタッチしていますが、他のオブジェクトにアタッチしても動作はします。

このComonyDelayActionはイベントのトリガーであるComonyTriggerと、動作させたい機能を持つギミックのコンポーネント(WalkではComonyBasic)の中間に処理を挟むようなイメージです。

通常はComonyTriggerに設定したActionKeyの文字列と、ComonyBasicのRecvActionに設定した文字列が一致していることで任意のギミックの機能が動作します。

それに対してComonyDelayActionを使用する場合はComonyTriggerに設定したActionKeyの文字列とComonyDelayActionのRecvKeyに設定した文字列を一致させることで実際に動作させたいギミックの機能を動作させる前に『指定した時間分だけ待機させる』という機能を動作させます。

そして指定した時間が経過すると次にComonyDelayActionに設定しているActionKeyの文字列とComonyBasicのRecvActionに設定した文字列と一致している機能を動作させるという流れです。

ComonyDelayActionの設定


実際に設定してみましょう。

任意のエリアに入ったら文字が消える処理を遅らせてみようと思いますのでComonyTriggerのOnMyAvaterEnterに設定してある文字列『walk_disable』をコピーしてComonyDelayActionのRecv Action右の枠にペーストしましょう。



Delay Timeで待機時間を指定できます。

今回はわかりやすいように5秒に指定してみます。

また、5秒待った後に動作させたいギミックの機能を指定するためにSend Actionに任意の文字列を入力します。



これで任意のエリアに入ったらTriggerはwalk_disableの文字列を持つギミックの機能を探して、この文字列はComonyDelayActionが持っているので5秒待つという機能を動作させてから、Send Actionに指定された新たな文字列(ここではwalk_disable_delay_test)を持つギミックの機能を探すというイベントの流れが出来ました。

ですので最後に、実際に動作させたいギミックの機能にwalk_disable_delay_testという文字列を設定する必要があります。

HierarchyからComonySwitchObjectActiveコンポーネントがアタッチされているtext(1)オブジェクトを選択して下さい。

Inspectorに表示されたComonySwitchObjectActiveのRecvActionのDisableの右の枠に、ComonyDelayActionのSend Actionに設定した文字列と同じ文字列を入力しましょう。



これでComonySwitchObjectActiveがアタッチされているオブジェクトが5秒後にDisable(非表示)されるという処理が完成しました。

動作の確認


試しに動作を見てみようと思いますが現在の設定のままでは設定されているエリア(ComonyTriggerがアタッチされているオブジェクトに別途アタッチされているBox Collider)が無色透明なので、いつエリアに入ったか判別が難しいと思います。

なのでこのBoc Colliderを可視化してから確認しましょう。

Trigger_walkオブジェクトを選択してMesh Rendererにチェックを入れます。



これだけですが、場合によってはピンク色になっていたり、ピンク色にはなっていないけど他の色に設定したいかもしれません。

その場合は新しくマテリアルを作成してTrigger_walkにアタッチしてあげましょう。

Projectウインドウ内で右クリック、Create > Materialを選択してマテリアルを作成します。



任意の名前を設定してから選択してInspectorを見てみましょう。



Base Mapと書かれた欄の白い部分をクリックしてください。

カラーを調整するウインドウが出てくるので好きな色に設定しましょう。



なお、透明にしたい場合はA(Alpheの頭文字です)を低めに設定してSurface TypeをOpaqueからTransprentに変更しましょう。



完成したマテリアルをシーン内のTrigger_walkに直接ドラッグ&ドロップすると新しいマテリアルを簡単に適用できます。



ではシーンを再生してComonyDelayActionが動作しているかどうか改めて確認してみましょう。

正しく設定されていればこのエリアに入ってから5秒後に文字が消えるはずです。



エリア内に入って5秒待ちます。



消えました。

設定に関する注意点


今回のような設定では文字が消える前にエリアから出てしまった場合、文字が消えた後に文字が自動で再度表示されません。

原因はComonyTriggerに設定しているOnMyAvaterExitのトリガーにあります。

OnMyTriggerExitとComonyBasicのEnableによってアバターがエリアから出たら文字を表示させるという流れにしていますが、このOnMyTriggerExitはアバターがエリアから出た瞬間だけ呼び出されて動作させるものなのです。

つまり5秒後の文字が消える前にエリアを出てしまうと、文字が消える前にOnMyTriggerExitによって文字を表示させる機能が先に動作を完了してしまい、文字が消えたままになってしまうのです。

なのでComonyDelayActionを使ってEnableの処理も待機させる必要がありますが、ComonyDelayActionは1つの種類の文字列しか受け取ることが出来ないのでもうひとつComonyDelayActionをアタッチする必要があります。

ですが、1つのオブジェクト内に同一のオブジェクトを複数アタッチすることはできないので、空のオブジェクトをシーン内に作成して、そこに新たにComonyDelayActionをアタッチしてDisableの処理と同様にEnableの処理も待機させるように設定しましょう。