0 支持
156 閲覧
(240 ポイント) Q&A
いつもお世話になっております。

Unity上でSS6PlayerForUnityを使用してアニメーションを再生している際に、任意のタイミングで別コンポーネントのメソッドを呼び出すことは可能でしょうか?

現在Unityでの2DアニメーションにSS6PlayerForUnityの導入を検討しています。

UnityのAnimatorでは再生中にAnimationEventでメソッドを呼び出すことが可能でしたが同じことがSS6PlayerForUnityでも可能かどうか知りたく、質問させていただきました。
(エフェクトの生成や効果音の再生をAnimationEventで行っています)

Unityバージョン:2021.3.15f1
SpriteStudioバージョン:6.6.4.2007
このページをシェアする

回答 1

0 支持
(5.0k ポイント)

お世話になっております。SS6Player for Unity担当です。

お返事が遅れてしまい、申し訳ありません。

UnityのAnimatorでは再生中にAnimationEventでメソッドを呼び出すことが可能でしたが同じことがSS6PlayerForUnityでも可能かどうか知りたく、質問させていただきました。

SS6PUのUnity-Nativeモードでのインポートでは、アニメーションデータに「ユーザーデータ」が設置されていると、それのフレームを再生した時に特定の名前の関数(メソッド)が呼ばれるようになっています。

2種類の呼び出す関数の仕様がありまして……

  • SS6PU Ver.2.1.9 より前
  • SS6PU Ver.2.1.9以降
で、「Ver.2.1.9以降」は「Ver.2.1.9より前」にコールバックの方法が追加されています。

SS6PU Ver.2.1.9 より前(従来共通方式)

ユーザーデータの「数値」が設定されている場合: 

Script_SpriteStudio6_RootUnityNative.FunctionEventInt(int value)

ユーザーデータの「文字列」が設定されている場合:
Script_SpriteStudio6_RootUnityNative.FunctionEventText(string value)

関数がAnimationEventに固定名で設定されていて、呼び出されます。


SS6PU Ver.2.1.9 移行(従来方式への追加方式)

※この方法はインポータの「Convert To Unity-Native」モードで、「Oprtion Basic」内「Integrate "UserData" event Callback-Function」が非チェックで・「Convert parameter "~" in "UserData"」がそれぞれチェックされている場合に設定されます。

ユーザーデータの「矩形」が設定されている場合:

Script_SpriteStudio6_RootUnityNative.FunctionEventCoordinate(string value)

ユーザーデータの「矩形」が設定されている場合:

Script_SpriteStudio6_RootUnityNative.FunctionEventRectangle(string value)

関数がAnimationEventに固定名で設定されていて、呼び出されます。

Ver.2.1.9以降(新規方法)

※この方法はインポータの「Convert To Unity-Native」モードで、「Oprtion Basic」内「Integrate "UserData" event Callback-Function」がチェックされている場合に設定されます(FunctionEventInt/Text/Rectangle/Coordinateの各関数とは排他で設置されますので、併用はできません)。

ユーザーデータが設置されている場合

Script_SpriteStudio6_RootUnityNative.FunctionEventUserData(string value)

関数がAnimationEventに固定名で設定されていて、呼び出されます。

 


Ver.2.1.9以降で追加された方法については、イベント関数に渡ってくるユーザーデータの内容がJSONでシリアライズされているため、内容を覗くためには一定の手順が必要になります。

その詳細は下記のURL(SS6PUのGitHub内のIssue)を参照していただけますようお願いいたします。

https://github.com/SpriteStudio/SS6PlayerForUnity/issues/92

※Issueの文章の中身が英語なのですが、サンプルコードは四角の中(コードブロック)に記載してあるので、通常の文章と見た目で判別していただけるかと思います。


お忙しい中お手数とは存じますが、何卒今後ともよろしくお願いいたします。

(5.0k ポイント)
また、上記に付記です。

もし、SS6PUの「SS6Player」モードでデータをインポートして・「Script_SpriteStudio6_Root」クラスで再生している場合、

ユーザーデータを検知した時点で設定されている関数に(イベントと同様に)コールバックされます。

詳細は

https://github.com/SpriteStudio/SS6PlayerForUnity/wiki/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9%EF%BC%88%5BRoot%5D%E3%82%B3%E3%83%BC%E3%83%AB%E3%83%90%E3%83%83%E3%82%AF%EF%BC%89#%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%83%87%E3%83%BC%E3%82%BF%E6%A4%9C%E7%9F%A5

をご参照いただけますようお願いいたします。

※SS6Player for UnityのGitHub内のC#クラス機能解説「FunctionUserData」(クラス内フィールド=クラス変数)の解説へのリンクです。
(240 ポイント)
ご返答ありがとうございます

非常に細かく説明していただき助かりました!

上記内容確認の上実装させていただきます
...