今回は現在制作しているゲームの簡単な技術解説をしたいと思います。
またこのゲームは明日のデジゲー博2014にて出展します。
出展情報について個人ブログの方でやりますので、そちらもどうぞよろしくお願いします。
デジゲー博 2014に新しいゲームをだします! : 歩き始めるより走り出せ
特殊な動きを制御するために特殊なカメラを用意
個人的に勝手につけていますが、今作はアクションシューティングというジャンルです。
とはいってもまだアクション要素は少なめになっています。今後はよりアクション要素も足していけるようにしていきたいと思っています。
今作のテーマは空を飛ぶプレイヤーキャラクターを動かし、画面狭しと爽快に動きまわり、背景もどんどん変わっていきます。
ただし、そのままだとカメラが非常に相性が悪く、プレイヤーに引っ付いた状態ではまともではありませんが、シューティングゲームのようにはなりません。カメラには特殊な仕掛けをしています。
これは私がカメラボックスと読んでいますが、透明なボックスコリジョンを作っています。要はプレイヤーはこの中しか移動できないわけです。
そしてカメラの位置はその真正面に位置しています。この中でのみ、プレイヤーは自由に動きまわることができるようになっています。
実際にレベル上にはこのように配置され、この中にプレイヤーがいるようになっています。右側には敵が見えますね。これも色々とトリックがあるのですが、ここでは解説しません。
巨大な背景アクター
実はこのゲーム、カメラは一切動いておりません。なのにどうしてこのような動きができるのかと言うと、単純に巨大な背景が動いているからです。
これ、なんと1つのブループリントの中です。巨大な背景のアクターとなっており、これがレベル上にポン、と置かれています。大きすぎて、全部が収まりきっていません。
あとはこの背景アクター自身を毎フレーム動かすことにより、ゲームの背景がどんどん動いているように見えます。要は背景の動かし方さえ考えれば、他のプレイヤーやエネミーは一切動かす必要がなく、その状態でカメラが動いているように見えるのです。
背景を斜めに動かせば斜めのアングルになりますし、縦に動かせば上下しているようにも見えます。ここは色々と応用が効くところだと思います。
プレイヤーキャラの武器や装備
プレイヤーキャラには様々な武器や装備やエフェクトがアタッチされます。
その制御に使われているのが、スケルトンのボーンに付けることができるソケットという機能です。ソケットは特殊なボーンの一種のロケーターとして扱うことができるものです。
このソケットに様々なトランスフォーム情報をもたせて武器などを装備させています。
実際にアタッチする作業自体はプループリントのコンストラクションスクリプトで行ないます。
一部警告がでたりしていますが、今は気にしない。これで常に武器や装備をつけた状態で登場することができます。
入力イベントの制御
このゲームでは入力したボタンに合わせて、様々なアニメーションを行ないます。そこではの制御はインプットイベントをまず通常のブループリントで取得し、そのイベント情報をアニメーションブループリントにイベントディスパッチャー経由で行なっています。
入力イベントとイベントディスパッチャーの間にマクロがありますが、これは単純に状態を返すだけのマクロです。
条件を抜ければ無事、イベントディスパッチャーをコールすることができるようになります。
こちらはアニメーションブループリントです。
プレイヤーの情報を受けとり、そのプレイヤーが持つイベントディスパッチャーをバインドさせて、イベント入力をアニメーションブループリントで取得できるようしています。これで複雑なイベントも簡単にアニメーションブループリントと連動させることができます。
複雑なアニメーション制御を楽にするAnimMontage
このゲームではかなり複雑なアニメーション処理を行なっていますが、UE4のAnimMontageという機能を使うとかなり楽に制御できるようになっています。
パっとみてもわからないと思いますが、1つのAnimMontageにはこれだけ沢山の情報が仕掛けられています。実はこのAnimMontageには複数のアニメーションが合成されて入っています。
そしてその中で自由に分岐できるようにブランチポイントが設定されています。更にAnimMontageはセクションという情報を持っているので、セクション間は自由に制御できるようになっています。
ブランチポイントはそのタイミングになればそれがイベントとして発行されて、そのタイミングで好きな制御を行なうことができます。そのタイミングで別セクションに移動することもできますし、アニメーションをストップさせることもできます。
ここではなんでも自由に制御できますので、アニメーションに幅を効かせることができます。このゲームではコンボ中に途中でボタン入力がなければそこでコンボ終了となり、アニメーションをストップさせるように処理しています。
アニメーションのブレンディング
更にアニメーションの話となりますが、このゲームでは銃を撃ちながら移動というものを平気でやるために、当然脚のモーションはそのままで、銃を撃ってほしいという欲求がでてきます。
そこでUE4のスロットアニメーションという機能を使い、複数のアニメーションを同時に再生させて、それぞれをブレンドさせてしまいます。
アニメーションステートマシンから受けとる情報とは別に銃を撃った時のアニメーションが再生されている時は、Layered blend per boneというノードで複数アニメーションをブレンディングしています。
この時にブレンドしたい部分に腰から上のボーンを指定しているので、腰から下はそのままで、腰から上は銃を撃つみたいなことが可能となるのです。
さすがにこの解説だけではわからないと思いますが、気になる人はぜひ調べてみてください。
まだまだ解説しきれないくらい色々とありますが…
正直、今回UE4の機能をかなりフルに使っていたので、全然解説しきれません。ブループリントの継承やインターフェースの使い方など、かなりテクニカルな部分もありました。またそういう部分も機会があれば解説したいと思います。