トリガーからのメッセージが来ているのか確認するためのGimmick
writtern by すずきかつーき.icon
トリガーとギミックを使ってゲームワールドを作っていると、思った通りに動かないことがあります。
その時に原因の切り分けとして
①トリガーは正しく動いている が、ギミックがメッセージを正しく取れていない
なのか
②トリガーが発生していない(Colliderでありがち)
なのかを判別したい事が多々あります。
というわけで、こんなデバッグ用のGimmickをちょっと作ってみました。(使用する場合 DebugLogGimmic.cs ファイルをUnityのAssets/より下に作成し、以下を全てコピーして張り付けてください)
code:DebugLogGimmick.cs
using System;
using ClusterVR.CreatorKit.Editor.Custom;
using ClusterVR.CreatorKit.Item;
using UnityEditor;
using UnityEngine;
namespace ClusterVR.CreatorKit.Gimmick.Implements
{
public class DebugLogGimmickEditor : VisualElementEditor
{
}
public class DebugLogGimmick : MonoBehaviour, IGlobalGimmick
{
ItemId IGlobalGimmick.ItemId => globalGimmickKey.ItemId;
Target IGimmick.Target => globalGimmickKey.Key.Target;
string IGimmick.Key => globalGimmickKey.Key.Key;
ParameterType IGimmick.ParameterType => ParameterType.Bool;
public void Run(GimmickValue value, DateTime current)
{
Debug.Log($"Key:{((IGimmick)this).Key} Signal:{value.TimeStamp} Bool:{value.BoolValue} Int:{value.IntegerValue} Float:{value.FloatValue}");
}
}
}
これを、適当なGameObjectにUnityのインスぺクタのAddComponentで割り当てると
https://gyazo.com/0b012e7074997b295a4f04202fe9aac6
既に用意されているGimmickのように Target (Global or Item) とKey、 Item を指定した場合には Item の枠 が表示されます。
https://gyazo.com/faf9c040df899f2adb1402db7bdd7839
適宜設定をし、Editor実行中、上記Gimmickが呼ばれるとUnityEditorのConsoleに以下のようなログが表示されるようになります。
https://gyazo.com/4c6e5694a8282ce9457a457cb7e43442
code:text
2020/06/16 17:55:30 -> Key:Gate Signal:0001/01/01 0:00:00 Bool:False Int:0 Float:0
Target に Item を指定した場合は、指定した Item へ飛んできた Key(今回の例だと「Gate」)に対するパラメータ(Signal か Bool か Int か Float、Signalの場合は飛んできた時間)の中身が表示されるので、パラメータタイプ違いや、そもそもメッセージが飛んでいない(Triggerが発火していない)、メッセージが飛んでいるが複数のGimmickが発動していて意図した動きになっていなかった。
などが、(ちょっとだけ)分かりやすくなるかと思います。
注意点
知っての通り、ワールドのアップロードにはスクリプトを含めることが出来ないので、あくまでもPreview実行時の確認用です。
一応、このスクリプトが割り当てられたままでもワールドアップロード出来ることは確認しましたが、出来ればワールドアップロード前にはこのDebugLogGimmickは外した方が安全だと思います。