トップダウンエンジンで近接攻撃の実装は出来ても、アニメーションやタイミング、当たり判定の大きさが合っていないと
今回実装したい内容
機能的に攻撃処理を実装して満足するのはプログラマーだけですね。剣振ってないやんけ!というごもっともなお言葉に対応するのが今回の記事になります。
実装内容
今回実装する内容は以下!
- キャラクターが攻撃時にアニメーションを行う
- 攻撃モーションのタイミングをあわせる
- 攻撃パターンを別のものに切り替える(オプション)
ゲーム制作するならアニメーションは必須!また、タイミングや当たり判定を剣などの形に合わせる必要もありますね。コンボ攻撃はまた別の機会かな。
前提条件1
アニメーションを行えるキャラクターをセットアップする必要があります。ここではキャラクターにアニメーションとして攻撃をさせたいのでサンプルの箱キャラクターではやりたいことが出来ないので注意してください。Top Down Engineでのキャラクターのセットアップ方法は次の2つの記事で作成することが出来ます。
前提条件2
こちらの内容はTop Down Engineで近接攻撃の処理を実装した前提で話を進めます。まだこちらの内容を把握されてない場合はいったん近接攻撃の内容を実装・把握した状態で臨んでくださいませ。
アニメーションを連動させる
まずはビジュアルから整える!剣振ってくれないと楽しくないからね!MyWeaponを編集する前提で以下記載致します。
MeleeWeaponにアニメーション用の設定を仕込む
攻撃時にアニメーションを行わせるにはアニメーターのパラメータと連携させる必要があります。
- MeleeWeaponコンポーネントを編集
- Animation Parameters Names
- Start Animation Parameter:melee-attack01
- ここのパラメータ名はアニメーターで呼び出されます。ユニークな名前にしておきましょう
- Animation Parameters Names
アニメーターのトリガーでアニメーション
キャラクターを制御するアニメーターに、先程指定したパラメータを利用してアニメーション出来るようにしましょう
- アニメーターのパラメータを追加
- Triggerを追加(ここはBool型でも実は大丈夫)
- 名前:melee-attack01
- 攻撃モーションのアニメーションに遷移できるようにする
- アクションさせたいアニメーションを追加
- Transition(Any State > 攻撃モーション)
- Has Exit Time:False
- Conditions:melee-attack01
- Transition(攻撃モーション > 待機モーション)
- Has Exit Time:True
この時点で攻撃を行うと、以下のような表示になると思います。
形とタイミングを調整する
アニメーションが成功すればあとは当たり判定の形をあわせて、攻撃の判定が現れるタイミング調整を行います。
形を合わせる
攻撃の判定部分はWeapon Attachmentを基準に行われます。私の方のサンプルでは剣をもったキャラクターに合わせますが、拳や斧などでも同じような変更で調整可能です。
- Weapon Aim 3DがあればRemove Component
- 編集中のWeaponMeleeにWeaponAim3Dコンポーネントがある場合は外してください
- 位置と大きさを調整する
- Damage Area
- Area Offset
- 当たり判定の中心位置の変更
- X,Y,ZはTransformの矢印の色からどっち方向にずらせばよいか調整してみてください
- Area Size
- 当たり判定の大きさを変更
- 調整的にはこちらを先に行ってからOffsetの調整を行うと良いかも
- Area Offset
- Damage Area
攻撃の発生と持続時間
ゲーム的な言い方をすると発生までの硬直時間と当たり判定の持続時間ですね。
- 当たり判定の発生タイミングと持続時間を設定する
- Damage Area Timing
- Initial Delay:当たり判定が発生するまでの待ち時間
- Active Duration:Initial Delay経過後に発生する攻撃判定の持続時間
- Damage Area Timing
出来上がり
私の方の環境では以下のような攻撃モーションを作成出来ました。
少し分かりづらいかもしれませんが、当たり判定が発生するまでちょっと時間がかかっています。ゲームとかしていると細かい部分ではありますが、気になってくる部分ではあるのでこういう調整が出来るのはありがたいですね。
攻撃パターンの切り替え(オプション)
調べてて、基本サポートされてないんだなということが分かりました。かなり無理矢理な内容なので参考程度にとどめてください。
推奨されてない機能・別パターンの攻撃
これは調べた限りの内容になるのですが、同じ武器に対してWeaponを切り替える方法はTop Down Engineの中ではサポートされてませんでした。具体的な内容としては同じ剣を使って弱攻撃・強攻撃などを使い分けるためにMyWeaponを切り替える方法があるのかな?と思っていましたがどうやらないみたいです。
イメージとしては、ゼルダの伝説(神々のトライフォース)などでは
- 剣は基本的に同じモーション
- ハンマーなど別の武器に切り替えるとモーションが変わる
- レベルの異なる武器はモーションは同じだが威力などが変わる
という感じで基本的に武器に対してWeaponが存在すると思ってください。
切り替えるための簡易スクリプト
下記スクリプトは武器(攻撃パターン)の切り替えるスクリプトです
- 切り替えるためのWeaponを追加する
- すでに作成しているMyWeaponとは別のものを用意する
- 面倒な場合はMyWeaponを複製して、わかりやすいパラメータを変えて切り替わっているかを確認できるものにする
- PlayerのプレファブにSwitchWeaponコンポーネントを追加
- 切り替えたいWeaponの設定
- インスペクターでattack01とattack02に切り替えたいWeaponをセットする
- PlayerのCharacterHandleWeaponコンポーネントをセットする
- 切り替えたいWeaponの設定
- ゲームを動かして確認
- 1キー、2キーを押してから攻撃
- それぞれセットされたものに切り替わっているのを確認
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using MoreMountains.TopDownEngine;
public class SwitchWeapon : MonoBehaviour
{
public Weapon attack01;
public Weapon attack02;
public CharacterHandleWeapon characterHandleWeapon;
void Update()
{
if (Input.GetKeyDown(KeyCode.Alpha1))
{
Debug.Log("Switching to attack01");
characterHandleWeapon.ChangeWeapon(attack01, "");
}
if (Input.GetKeyDown(KeyCode.Alpha2))
{
Debug.Log("Switching to attack02");
characterHandleWeapon.ChangeWeapon(attack02, "");
}
}
}
コメント