【TopDown Engine】敵に近づいた時に、自動でロックオンする方法【Unity】

aicatch ゲーム開発

この記事でのバージョン
Unity:2020.3.3f1
TopDown Engine:バージョン 2.3.1

はじめに

TopDown Engine | システム | Unity Asset Store
Use TopDown Engine from More Mountains to elevate your next project. Find this & more システム and templates on the Unity As...


TopDown Engineについての記事です。

TopDown Engineには武器の狙いとして、以下の物が実装されています。

  • PrimaryMovement:移動スティック/キーの方向
  • SecondaryMovement:パッドでいう右スティックの方向
  • PrimaryThenSecondaryMovement:上記PrimaryがあるときはPrimary、無い場合はSecondary
  • SecondaryThenPrimaryMovement:上記の逆
  • Mouse:マウスの向き
  • Script:別のスクリプトで制御

この中でロックオンはScriptに当たります。

やりたいことは、通常時はPrimaryMovement、敵接近時は自動でScriptに切り替える、です。

やり方

前提として、既に武器は作成している、3D武器とします。(Projectile WeaponかMelee Weaponスクリプトを実装済み)3Dと2Dはスクリプトが別にあります。

①作成した武器にWeapon Aim 3Dスクリプトを追加。

inspector


②Aim ControlをPrimary Movement

Aimcontrol


③武器にWeapon Auto Aim 3Dスクリプトを追加。

Autoaim3d


Targets Maskにロックオンしたいものを追加。(画像はEnemiesのみ)

tartgetmask


⑤武器に空のゲームオブジェクトを2つ追加し、名前をFeedback等に変更。

feedbackadd


⑥それぞれにMMFeedbacksスクリプトを追加し、Add new feedback…→Events→Eventsを選択。

feedbackevent


⑦片方のFeedbackにPlay Events()欄に武器(Weapon Aim 3Dスクリプトを追加しているオブジェクト)をアタッチし、WeaponAim3D→GetScriptAim()を選択。

getscript


⑧もう片方のFeedbackもPlay Events()欄に武器をアタッチし、WeaponAim3D→GetPrimaryMovementAim()を選択。

getprimary


Weapon Auto Aim 3DFeedbackに先ほど作成したFeedbackをアタッチ。FirtsとNew Targetの方にScriptAimNo More Targetの方にPrimary Aimをアタッチする。

autoaimfeedback


⑩Scan for Targetsでロックオンの距離等の設定を行う。(Scan Radiusは検出範囲、Duration Between Scansは検出間隔)

autoaimradius



これで武器の設定がおわりました。

敵がいないときはキャラの正面を狙っていて、近づくと自動でロックオンすると思います。


最後に

本当はボタンを押したら切り替えるみたいな仕様がいいだろうと思いましたが、モバイル向けだとこっちの仕様がいいのかなと思って実装してみました。

これは武器ごとに設定できるので、色々試していくと面白いかもです。

終わり!

コメント