実はあまり知られていないかもしれませんが、スケルタルメッシュをコンポーネントとして持っているクラスブループリントを作成しても、そのままではそのアニメーションブループリントをクラスブループリント側から参照することはできません。
逆も同様で、そのままでは同じアクター内に存在しているクラスブループリントとアニメーションブループリントはお互いを触ることができないようになっています。これが何もわからない人にとっては結構厄介です。
ということで今回はクラスブループリントとアニメーションブループリントの間でお互いを連携させていく方法を紹介していきます。
キャストを利用する
最も手っ取り早い方法ですが、お互いのインスタンス情報を取得してキャストすることにより簡単にアクセスできるようになります。まずはアニメーションブループリント側からクラスブループリント側の方法をみてみます。
画像はアニメーションブループリントの中です。これはアニメーションの初期化を行なうイベントの"Blueprint Initialize Animation"からのノードの流れです。"Try Get Pawn Owner"はアニメーションブループリント側から使用できるノードで、これのReturn Valueをドラッグ&ドロップして、自分が作ったクラスブループリントへと変換します。
そしてそのインスタンスをどこからでも参照できるように変数へと保存しています。これでアニメーションブループリント側からクラスブループリントへのアクセスができるようになります。
次はクラスブループリント側で変数を作っておき、その変数をアニメーションブループリントでアクセスする方法です。
クラスブループリント側の変数の右側の眼のアイコンをクリックして変数をパブリックにしておきます。これで、他のブループリントからでも変数を参照することができるようになります。
変更をしたら一度、必ずコンパイルしてください。コンパイルせずに行なった場合には、変数を参照することができません。
これで、アニメーションブループリントで"Player"という変数からパブリックにした変数が参照できるようになりました。パブリックにした変数はGet、Setの両方が可能になります。どちらかのみといったことは現状のブループリントではできません。
そしてこの方法は逆のパターンも可能で、クラスブループリントからアニメーションブループリントの内容を参照することもできます。
こちらはクラスブループリントですが、やっていることはアニメーションブループリントと全く同じです。違うのはインスタンス取得用のノードが"Get Anim Instance"というノードになっています。当然パブリック化してからコンパイルしないと変数にはアクセスできませんので、ご注意を。
イベントディスパッチャーを利用する
プレイヤーキャラクターがボタンを押したタイミングで何かアクションをしたい!ということは必ずあると思います。まずはクラスブループリント側で入力をとるイベントを作っておきましょう。
まずこちらはクラスブループリントです。
そしてイベントディスパッチャーを作成します。先程作成しておいた入力イベントが行なわれた際にイベントディスパッチャーを呼び出します。入力イベントはなんでもいいので、とりあえずキーボードの入力でもOKです。
そしてこちらはアニメーションブループリントです。
クラスブループリントのインスタンスを取得して、ノードのピンを引っ張りドラッグ&ドロップします。今回は"As Player BP"という名前の部分ですが、これは自分で作ったクラスブループリントの名前になりますので注意しましょう。ドロップした時にノード一覧からイベントディスパッチャー "xxxを割り当てる"といった名前を探し、選ぶことでイベントをバインドさせることができます。
これで、特定のイベント発生時にクラスブループリントからアニメーションブループリントにアクションを行なわせるといったことが可能になりました。そのあとは自由にアニメーションさせるなり、やりたいことをやらせてあげましょう。
もちろんこの方法はインスタンスを取得することにより、アニメーションブループリント側からイベントを発生させることでクラスブループリント側で処理させることも可能です。この方法を使えば、今回に限らず、お互いに関連性のないブループリント間でのコミュニケーションがとれるようになります。
特にイベントディスパッチャーは汎用性がとても高いので、ぜひとも利用していきましょう!