SDK3版Snail MarkerをWrite Defaultsオフでも動くようにする

この記事は約3分で読めます。

Avatars3.0版Snail Markerで、Write Defaultsと干渉して動かなくなるバグの回避策について。

Snail Markerって?

指で空中に字が書ける便利なアセット。無言勢の命綱。

theepicsnail/Marker
VRC Marker for presentation room like drawing anywhere - theepicsnail/Marker

とても便利なのだが、最近更新されてないようでWrite Defaultsの使用が非推奨となったころのSDKでは字が書けなくなったり、意図せず線が途切れたりするバグがある。
でも、解決策がある。

Write Defaults

Write Defaultsはステートに入る前の元々のパラメータを指定してくれるUnityの機能ではあるのだが、いろいろあってこれが想定しない動作を引き起こすことがあり、VRChat的には非推奨になった。

暗黙の了解で初期のパラメータを設定してくれていることに期待することが事故のもとになっているので、明示的に書いてやればOK。

Snail MarkerはTrail Rendererによって実現されていることから、これのパラメータをAnimator Controller等でいじれば各種動作を変更することができるようになります。

わたしの場合は上記のように設定しています。線の太さが0.0030と細めに設定してあるのは文字を書くことが多いため。

回避策設定例

以下、回避策の設定例。
暗黙のデフォルト値に期待しているのが問題なので、ちゃんとデフォルト値を定義してやればよいのです。
導入直後のSnail Markerは下の図で示すIdleに何も設定されていません。ここに、デフォルト値を定義するアニメーションを追加しましょう。

Animationを作成し、次の画像のように2つのパラメータを指定します。
幸いにもSnail Markerでデフォルト値を指定する必要があるのは2つなので、そこまで大変ではありません。
もし他のステートで変更するパラメータが多い場合、それらのデフォルト値をすべて指定する必要があるので手間が非常に大きくなります。

指定するパラメーターの意味について

Trail Renderer.Emitting:ONに設定されている間、線を描きます。OFFに設定した場合は描かれなくなりますが、既存の線は消されません。

Trail Renderer.Time:その線が残る有効時間を秒単位で指定します。デフォルトで1e+07が指定されており、10000000秒を示します(実質時間無制限で残る)。
0に設定するとその線の寿命が尽きたことになり、消えます。

上記の例では、線を描かないようにしつつ、線の有効期限は10000000秒に設定することで意図したとおりに描いている線を切ることができるようになっています。

上記のように設定し、各ステートのWrite Defaultsをオフにすることで現時点で最新のVRCSDKでも正しくSnail Markerが動作するようになります。

タイトルとURLをコピーしました