前書き
TopDownEngineではキャラクタを「歩かせたり」、「走らせたり」、「ジャンプしたり」、「攻撃したり」と様々な動作を標準的にすることができます。この動作をTopDownEngineではCharacterAbilityというくくりで実装されています。TopDownEngineにはどんなCharacterAbilityがあるかは以下の記載されていますのでご確認ください。
いろいろとCharacterAbilityがあることが分かりますが、標準的に準備されているもの以外でオリジナルのCharacterAbilityを作りたいなーっと思うことは必ずあると思います。この記事では、オリジナルのキャラクタアビリティを作成する方法について紹介していこうと思います。
オリジナルのキャラアビリティの作成
まずは新しいキャラクタアビリティをC#スクリプトから作成していきましょう。Unityエディタ内で右クリックし、「Create」->「C# Script」を選択してスクリプトを作成します。
分かりやすいように名前は「CustomAbility」にしています。
以下にオリジナルのアビリティを作成する上で最低限必要となるものを抜き出したCustomAbilityを作ってみました。では、それぞれの処理について簡単に説明していきます。
using MoreMountains.Tools;
using MoreMountains.TopDownEngine;
using UnityEngine;
public class CustomAbility : CharacterAbility
{
protected override void Initialization()
{
base.Initialization();
// 初期化処理
}
protected override void HandleInput()
{
// 入力処理
}
public override void ProcessAbility()
{
base.ProcessAbility();
// アビリティのメイン処理
PlayAbility();
}
public void PlayAbility()
{
// アビリティが発動された時の処理
}
}
継承元について
public class CustomAbility : CharacterAbility
オリジナルのキャラクタアビリティを作成する場合は必ずCharacterAbilityを継承元としましょう。CaracterAbilityを継承元とすることで後述するHandleInputやProcessAbilityが使用可能になります。
Initializationについて
Initializationでは、アビリティの初期設定を行います。例えば、この処理の中でMMFeedbacksの初期化や変数の初期などを行います。
HandleInputについて
HandleInputでは、プレイヤーの入力を処理します。例えば、特定のキーが押された時にアビリティを発動する、キー入力がされた値を読み込むといったことを行います。
ProcessAbilityについて
ProcessAbilityでは、アビリティのメイン処理を行います。例えば、キャラクターのステータスを変更するメソッドを呼び出したり、エフェクトを再生するメソッドを実行したり、シーケンスとしての役割を行います。
PlayAbility(任意のメソッド)について
PlayAbilityでは、ProcessAbilityで呼ばれた時に実行される処理を定義します。例えば、キャラクタの移動速度を変えたり、武器を使用したりなど実際に行うことを定義します。
自作のアビリティを作ってみると
実際に自作のアビリティを作ってみました。以下の動画よりMPバーの回復を実行するオリジナルのキャラクタアビリティを作成しました。アクティブスキル(丸いアイコン)を使うことでMPが消費されますが、そこから時間ごとにMPが回復される処理をキャラクタアビリティとして作成しています。
実際のソースコードの一部抜粋になります。
protected override void Initialization()
{
base.Initialization();
_currentSpecial = 0;
UpdateSpecialBar();
}
protected override void HandleInput()
{
// 入力処理はここで行わない
}
public override void ProcessAbility()
{
base.ProcessAbility();
RecoverSpecial();
}
private void RecoverSpecial()
{
_recoveryTimer += Time.deltaTime;
if (_recoveryTimer >= SpecialRecoveryInterval)
{
_currentSpecial++;
UpdateSpecialBar();
_recoveryTimer = 0f;
}
}
- Initializationについて
→MPバーを表示するための初期化をInitializationにて行っています。 - HandleInputについて
→今回の処理はキー入力などないためHandleInputには処理の記述はありません。 - ProcessAbilityについて
→MPを回復する処理を呼び出しています。 - PlayAbility(任意のメソッド)について
→MPを回復する処理を実装しています。
簡単になりますが、オリジナルのキャラクタアビリティの初期化して入力の受付(今回はSkip)、シーケンスを回して処理を実行するといった一連の流れになります。
簡単に作りたい場合、まずは上記4つのメソッドを実装してみて動きを見るのがいいかなと思います。
まとめ
今回はオリジナルのキャラクタアビリティの作り方について紹介しました。
今回紹介したキャラクタアビリティのメソッドについてInitialization、HandleInput、ProcessAbilityしか紹介しませんでしたが、継承元のCharacterAbilityメソッドを見てみるとUpdateAnimatorやFlip、ResetAbilityなど、いろいろな関数がすでに実装されています。
それぞれ意味があるメソッドですので具体的にどうOverrideされているかはすでに実装されているキャラクタアビリティを参考にしていただけるとより理解が深まるかなと思います。
やり始めは難しいですが2~3個作ってみるとOverrideの組み合わせで何だかんだ簡単に作れるようになります。ぜひ、自分だけのオリジナルアビリティを作成し、ゲームに新しい機能を実装してみてください。
コメント