【アートチーム研究開発】Spineを活用したリアルタイムアクションゲーム~エンジニアによる設計編~
今期、アートチームではMV(R)P アーキテクチャをベースにクリーンアーキテクチャの設計思想を取り入れ、クライアントメンバーでディスカッションしながら、再利用しやすく、変化に柔軟な設計にするための大規模なリファクタリングと、格闘機能のブラッシュアップを実施しました。
キャラクターモーション編に引き続き、今期新たに研究開発にジョインしたクライアントサイドエンジニアのみそスープから、研究を通してもっとも効果の大きかったものをお伝えします。
はじめに
はじめまして!アートチーム所属・クライアントサイドエンジニアの、みそスープです。私は、下記の研究開発の記事が投稿された後、キャラクター追加のタイミングでジョインしました。
そして、キャラクターの個性の自由度を高めるため、Spineアニメーションの管理手法の改善やデザイナーに易しい設計へのリファクタリングを行いました。
その中から当たり判定や、Animatorでのモーションの管理に関する内容をご紹介したいと思います。
SpineのBoundingBox機能による当たり判定の実装
本プロジェクトの攻撃判定はキャラクターの距離を計算して攻撃範囲内であれば攻撃が当たる仕様でしたが、キャラクターの追加に伴い、デザイナーが視覚的に設定できるようにするため、Spineの機能であるBoundingBox(日本語名:境界ボックス)を利用することにしました。
その結果、格闘ゲームで必要になる攻撃範囲や攻撃発生フレームをSpineのタイムライン上に直接設定することができるようになり、キャラの個性を考慮した当たり判定の設定を効率的に行うことができるようになりました。
▼ゲーム内に登場するキャラクターに設定したBoundingBox
キャラクターの体に設定する喰らい判定は、Spineのタイムライン上で設定し、Unityで「BoundingBoxFollower」と「BoneFollower」のコンポーネントを利用しました。
体の動きに合わせて当たり判定の位置がついてくるので、格闘ゲームとの相性がとても良かったです。モーションデザイナーがSpineで全ての当たり判定を設定できるため、調整の手間が省けて効率化に繋がりました。
各キャラクターの個性を出すために行ったこと
本プロジェクトはキャラクターモーション編でもご紹介したように新しいキャラクターが追加されました。その際に各キャラクターの個性を出すために移動や攻撃のステータスを変更する必要がありました。そこで、個性の差をうまく表現するための各種ステータスを、より効率的に変更できるよう二つのことを行いました。
①SpineEventによる動きの制御
アニメーションに合わせた動きをUnityで実装するために、Spineの機能の一つであるEventを利用しました。当初攻撃を行うと同時にキャラクターを前進させていました。しかし新しいキャラクターの登場により、最初の数フレームの間は予備動作を行い、その後前進しながら攻撃を行うといった仕組みが必要になりました。
そこでSpineEventを使って、キャラクターが前進する動きのタイミングを制御できるようにしました。SpineEventを利用することでモーションデザイナー自身での調整が容易になり、想定通りの表現を実現することができました。
攻撃発生前の予備動作サンプル
▲Before
▲After
②ScriptableObjectについて
各キャラクターに性格差分を出すため、ステータスの設定にUnityのScriptableObjectを利用しました。あらかじめ差を出す項目を列挙し、デザイナーにキャラクターに合致した設定を行ってもらいました。モーション担当者が直接Unityで数値を設定することができるようになったので、キャラクターの個性を生かした動きを容易に作成できるようになりました。
ヒットストップ時間に差をつけて重さを表現したサンプル
設定内容はヒットストップ時間をはじめ、攻撃時の移動量、ノックバック量、吹き飛ばし量などの項目が設定できるようになっています。
AnimatorによるSpineのアニメーション管理
α版では実装をコードベースで進めていましたが、キャラクターの追加において「ダッシュ中にも途中でガードキャンセルができる」など仕様の変更もあり、試行錯誤があったため、Animatorを使った設計に変更しました。
それにより各アニメーション同士の繋がりがとても分かりやすくなり、仕様変更に対しても、線を引き直して条件を追加するだけで済むため、とても柔軟に扱うことができるようになりました。
▼キャラクターに設定したAnimatorの画面
まとめ
自分が本プロジェクトにジョインしてから、Spine周りの管理・連携の方法について考える機会が多かったのですが、変化に柔軟な設計を実現することができ、今後の様々なプロジェクトに生かすことができるのではないかなと思います。
今後もSpineモーションデザイナーのパフォーマンスをフルに活かせるような設計を心がけ、よりクオリティの高い作品を創っていきたいです。