今回は、UE4.15 の新機能である『ポーズのスナップショット機能』について書いていきたいと思います。
『ポーズのスナップショット機能』は、ランタイムで保存した Skeletal Mesh のポーズを、Animation Blueprint で利用できるというものです。
ノードの説明
ポーズの保存は、Save Pose Snapshot ノードもしくは Snapshot Pose ノードで行います。
![](https://historia.co.jp/wp/wp-content/uploads/2017/02/snapshot01.png)
どちらも実行時点での Skeletal Mesh のポーズ情報を保存するノードですが、Save Pose Snapshot ノードはポーズ情報に名前をつけて保存する形となるのに対し、Snapshot Pose ノードはポーズ情報を PoseSnapshot 構造体に格納します。
保存したポーズの再生は、Pose Snapshot ノードで行います。このノードは、Snapshot Name 入力ピンのみが表示されている状態で Anim Graph に追加されます。Save Pose Snapshot ノードで保存したポーズを再生するには、この Snapshot Name に名前を入力します。
![](https://historia.co.jp/wp/wp-content/uploads/2017/02/snapshot02.png)
Snapshot Pose ノードで保存したポーズを再生する場合は、Mode を Snapshot Pin に切り替えた上で、Snapshot 入力ピンを表示させる必要があります。
![](https://historia.co.jp/wp/wp-content/uploads/2017/02/snapshot03.png)
利用例
『ポーズのスナップショット機能』を利用して、操作キャラクターと同じ位置に同じポーズの Skeletal Mesh を配置する処理を組んでみます。Third Person Template をベースに作っていきます。
まず、CopyCharacter という名前の Actor 継承クラスを作ります。Skeletal Mesh Component と、PoseSnapshot 構造体の変数 (Expose on Spawn のチェックをオン) を持つだけの構成です。
![](https://historia.co.jp/wp/wp-content/uploads/2017/02/snapshot04-300x206.png)
次に、CopyCharacter の Skeletal Mesh で利用する Animation Blueprint を作成します。CopyCharacter の持つ PoseSnapshot 構造体を保持し、Pose Snapshot ノードで再生するだけの構成です。
![](https://historia.co.jp/wp/wp-content/uploads/2017/02/snapshot05-300x97.png)
![](https://historia.co.jp/wp/wp-content/uploads/2017/02/snapshot06-300x110.png)
最後に、ThirdPersonCharacter の Event Graph に CopyCharacter の Spawn 処理を記述し、P キーを押したときに実行できるようにします。直前に保存したポーズ情報と位置情報を渡すことで、ThirdPersonCharacter と同じ位置に同じポーズの CopyCharacter が Spawn されるようにしています。
![](https://historia.co.jp/wp/wp-content/uploads/2017/02/snapshot07-300x106.png)
実行するとこのようになります。一定時間経過で CopyCharacter を Destroy したり、Material を工夫したりすることで、残像の表現ができそうです。
![](https://historia.co.jp/wp/wp-content/uploads/2017/02/snapshot08.gif)
また、ラグドールと組み合わせて使用するとこのようになります。アクションゲームなどで、前回ミスした位置に自分のキャラクターを倒しておいたりできます。
![](https://historia.co.jp/wp/wp-content/uploads/2017/02/snapshot09.gif)
『ポーズのスナップショット機能』は簡単に扱える機能ですので、UE 4.15 を導入したら是非試してみてください。