前回は、Unity の TopDown Engine アセットのサンプル KoalaRifle を見本に、作成した薬きょうパーティクルを放出する Particle System がなぜか武器を装備した瞬間しか放出されないテストプレイの現象を説明しました。
その対策のために ProjectileWeapon コンポーネントの自作とサンプルのプロパティの違いをグループ単位 (Position, IK, Movement, Recoil) で変化させ、射撃中の移動速度や反動による後退の効果を紹介しました。
前回の記事:TopDownEngine ProjectileWeapon 既定値とサンプルの比較2/4 | Compota-Soft-Press
今回は前回の続きで、自作とサンプルの武器プレハブそれぞれの ProjectileWeapon コンポーネントの値の意味についてグループ単位(今回は 12 個中 3 個) で調べ、差分を確認します。
今回紹介するグループの設定によって射撃時に呼び出されるイベントを指定し、射撃時に薬きょうを放出することができました。
※ Unity のバージョン 2021.3.25f1、 TopDown Engine のバージョンは 3.2 です。
Animation グループ (Weapon.cs)
サンプルの値に合わせましたが変化はわかりませんでした。
Animators | the other animators (other than the Character’s) that you want to update every time this weapon gets used この武器が使用されるたびに更新したい他のアニメーター (キャラクター以外) ※Model ゲームオブジェクトの設定手順は後述します。 |
PerformAnimatorSanityChecks | If this is true, sanity checks will be performed to make sure animator parameters exist before updating them. Turning this to false will increase performance but will throw errors if you’re trying to update non existing parameters. Make sure your animator has the required parameters. これが true の場合、アニメーター パラメーターを更新する前に健全性チェックが実行され、アニメーター パラメーターが存在するかどうかが確認されます。これを false にするとパフォーマンスは向上しますが、存在しないパラメータを更新しようとするとエラーがスローされます。アニメーターが必要なパラメータを持っていることを確認してください。 |
MirrorCharacterAnimatorParameters | if this is true, the weapon’s animator(s) will mirror the animation parameter of the owner character (that way your weapon’s animator will be able to ‘know’ if the character is walking, jumping, etc) これが true の場合、武器のアニメーターはオーナー キャラクターのアニメーション パラメーターを反映します (これにより、武器のアニメーターはキャラクターが歩いているか、ジャンプしているかなどを「知る」ことができます) |
Animator Controller を持つ Model を Animators リストへ追加
サンプルと同じようにプレハブ内の Model ゲームオブジェクトを Animators リストへ追加する手順です。
最初にサンプル KoalaRifle のルートのゲームオブジェクトに付加している ProjectileWeapon コンポーネントの Animation グループ内の Animators リストの 1 個の要素をダブルクリックして、そのゲームオブジェクトが同じプレハブ内の Model ゲームオブジェクトであることを確認しましょう。
KoalaRifle プレハブ内の Model ゲームオブジェクトは、さきほどの Animators リストに登録されるための条件である Animator コンポーネントを付加しています。
その中の Controller プロパティの値をダブルクリックして、 Animator Controller アセットの場所を Project ウィンドウで選択します。
Project ウィンドウに KoalaRifle プレハブの Model ゲームオブジェクトが設定していた Animator Controller 「 KoalaRifleAnimator 」が見つかったら、それを選択して Ctrl + D などで複製して、 複製したアセットを「TestWeaponAnimator」にリネームします。
ここからは自作の TestWeapon の設定です。
Project ウィンドウ内で TestWeapon プレハブをダブルクリックして Hierarchy ウィンドウに表示しましょう。
直前に複製した Animator Controller を TestWeapon プレハブ内の Model ゲームオブジェクトの Animator コンポーネントの Contoller プロパティに設定します。
※ Model 内に Animator コンポーネントがなければ Add Component で追加してください。
TestWeapon プレハブの Model の Animator コンポーネントの設定が済んだら、今度はルートのゲームオブジェクトを選択して ProjectileWeapon コンポーネントの Animation グループの Animators リストの要素を + ボタンなどで 1 増やして、1 枠分だけ作成します。
増やした Animators リストの要素は最初 None (空っぽ)なので右側の〇ボタンなどで、同プレハブ内の Model ゲームオブジェクトを選択しましょう。
これで Animators リストへサンプルから複製した Animator Controller を設定した Model ゲームオブジェクトを KoalaRifle と同様に設定できました。
Animation Parameters Names グループ (Weapon.cs)
サンプルの値に合わせましたが変化はわかりませんでした。
WeaponAnimationID | the ID of the weapon to pass to the animator アニメーターに渡す武器のID |
IdleAnimationParameter | the name of the weapon’s idle animation parameter : this will be true all the time except when the weapon is being used 武器のアイドルアニメーションパラメータの名前: これは、武器が使用されているときを除いて常に true になります。 |
StartAnimationParameter | the name of the weapon’s start animation parameter : true at the frame where the weapon starts being used 武器の開始アニメーション パラメータの名前: 武器が使用され始めるフレームで true |
DelayBeforeUseAnimationParameter | the name of the weapon’s delay before use animation parameter : true when the weapon has been activated but hasn’t been used yet 武器の使用前の遅延アニメーション パラメーターの名前: 武器がアクティブ化されているがまだ使用されていない場合は true |
SingleUseAnimationParameter | the name of the weapon’s single use animation parameter : true at each frame the weapon activates (shoots) 武器の使い捨てアニメーション パラメータの名前: 武器がアクティブになる (射撃する) 各フレームで true |
UseAnimationParameter | the name of the weapon’s in use animation parameter : true at each frame the weapon has started firing but hasn’t stopped yet 使用中の武器の名前アニメーション パラメータ : 武器が発砲を開始したがまだ停止していない各フレームで true |
DelayBetweenUsesAnimationParameter | the name of the weapon’s delay between each use animation parameter : true when the weapon is in use 各使用間の武器の遅延の名前アニメーション パラメータ: 武器が使用中の場合は true |
StopAnimationParameter | the name of the weapon stop animation parameter : true after a shot and before the next one or the weapon’s stop 武器停止アニメーションパラメータの名前: ショット後、次のショットまたは武器の停止前に true |
ReloadStartAnimationParameter | the name of the weapon reload start animation parameter 武器のリロード開始アニメーションパラメータの名前 |
ReloadAnimationParameter | the name of the weapon reload animation parameter 武器のリロードアニメーションパラメータの名前 |
ReloadStopAnimationParameter | the name of the weapon reload end animation parameter 武器のリロード終了アニメーションパラメータの名前 |
WeaponAngleAnimationParameter | the name of the weapon’s angle animation parameter 武器の角度アニメーションパラメータの名前 |
WeaponAngleRelativeAnimationParameter | the name of the weapon’s angle animation parameter, adjusted so it’s always relative to the direction the character is currently facing 武器の角度アニメーション パラメータの名前。キャラクターが現在向いている方向を常に基準にするように調整されます。 |
EquippedAnimationParameter | the name of the parameter to send to true as long as this weapon is equipped, used or not. While all the other parameters defined here are updated by the Weapon class itself, and passed to the weapon and character, this one will be updated by CharacterHandleWeapon only. この武器が装備されているか、使用されているかどうかにかかわらず、true に送信するパラメータの名前。ここで定義されている他のパラメータはすべて Weapon クラス自体によって更新され、武器とキャラクターに渡されますが、このパラメータは CharacterHandleWeapon によってのみ更新されます。 |
Feedbacks グループ (Weapon.cs)
ついに薬きょうパーティクルが射撃時に放出されるようになりました。
おそらく変化がわからなかった Animation、Animation Parameters Names グループで行ってきた設定が、Feedbacks グループの設定と連携した結果です。
WeaponStartMMFeedback | the feedback to play when the weapon starts being used 武器の使用開始時に再生されるフィードバック |
WeaponUsedMMFeedback | the feedback to play while the weapon is in use 武器の使用中に再生するフィードバック ※プレハブ内への設置手順は後述します。 |
WeaponUsedMMFeedbackAlt | if set, this feedback will be used randomly instead of WeaponUsedMMFeedback 設定されている場合、このフィードバックは WeaponusedMMFeedback の代わりにランダムに使用されます。 |
WeaponStopMMFeedback | the feedback to play when the weapon stops being used 武器の使用を停止したときに再生されるフィードバック |
WeaponReloadMMFeedback | the feedback to play when the weapon gets reloaded 武器がリロードされたときに再生されるフィードバック |
WeaponReloadNeededMMFeedback | the feedback to play when the weapon gets reloaded 武器がリロードされたときに再生されるフィードバック |
Feedback ゲームオブジェクトを自作プレハブへ追加
サンプル KoalaRifile のプレハブ内には「WeaponUsedMMFeedback」ゲームオブジェクトがあります。
ProjectileWeapon コンポーネントの WeaponUsedMMFeedback プロパティでは、このゲームオブジェクトを設定していますが、自作の TestWeapon のプレハブ内には存在しないので設定できません。
そのため、サンプル KoalaRifle のそのゲームオブジェクトをコピーして、自作 TestWeapon の同じ階層にペーストします。
コピーするためにサンプル KoalaRifle のプレハブを Project ウィンドウでダブルクリックして Hierarchy ウィンドウで構成を開きます。
その中の WeaponUsedMMFeedback ゲームオブジェクトをコピーしましょう。
今度は、Project ウィンドウ内で自作の TestWeapon プレハブをダブルクリックして Hierarchy ウィンドウで構成を開き、同じ階層に Paste メニューで貼り付けます。
異なるプレハブにコピーしたせいで、自作の TestWeapon プレハブ内の WeaponUsedMMFeedback ゲームオブジェクトの MMFeedbacks コンポーネントの Bound Particle System が Missing になってしまっているので、同プレハブ内の MuzzleFlare を割り当ててください。
これで ProjectileWeapon コンポーネントの Feedbacks グループの WeaponUsedMMFeedback プロパティに設定する WeaponUsedMMFeedback ゲームオブジェクトを自作の TestWeapon プレハブに設置できました。
今回はここまで
今回は、Unity の TopDown Engine アセットのサンプル KoalaRifle を見本に、作成した薬きょうパーティクルを放出する Particle System がなぜか武器を装備した瞬間しか放出されないテストプレイの現象を説明しました。
その対策のために ProjectileWeapon コンポーネントの自作とサンプルのプロパティの違いをグループ単位 (Animation, Animation Parameters Names, Feedbacks) で変化させ、ついに射撃中に薬きょうパーティクルが放出されるようになりました。
これで当初の問題は解決しましたが、 ProjectileWeapon コンポーネントの残りのグループ 2 個についてもサンプルとの差分を中心にプロパティの説明と効果を次回も紹介します。
参照サイト Thank You!
- Unity のリアルタイム開発プラットフォーム | 3D/2D、VR/AR のエンジン
- TopDown Engine | システム | Unity Asset Store
- TopDown Engine: MoreMountains.TopDownEngine.ProjectileWeapon Class Reference
- TopDown Engine Weapon.cs, ProjectileWeapon.cs のツールチップ文章。
記事一覧 → Compota-Soft-Press
コメント