前回は Unity で見下ろし型ゲームを作るアセット TopDown Engine のサンプルゲーム Koala Dungeon の銃の攻撃方向をマウスではなく右スティックで操作できるようにしました。
しかし、マウスを操作したときは、マウスポインタの方に向きを変えてほしいです。
そこで今回は、直前の入力によりマウス・右スティックどちらからでも攻撃方向を操作する方法を調べました。
※ ダブル入力はこの回ではできていません。調査報告と思って読んでください。
※ Unity は 2021.3.14f1、TopDown Engine は 3.1.1 です。主人公のキャラクター画像はぴぽや倉庫様のキャラクターチップを使っています。
WeaponAim2D の Aim Control で選べる要素
公式の Weapons | TopDown Engine Documentation に AIM(照準の操作) は WeaponAim2D/3D コンポーネントで設定できることが前回わかりました。
そこ武器のプレハブに付加されている WeaponAim2D コンポーネントの Aim Control を Mouse から Secondary Movement に切り替えることで右スティックで照準を操作できました。
今回は他の要素で、マウスと右スティックを両立できないか調べます。
公式の WeaponAim の説明「Weapons | TopDown Engine Documentation」の AimControl の項目について Google 翻訳しました。
WeaponAim コンポーネント (WeaponAim2D または WeaponAim3D) を武器に追加すると、その向きを制御できるようになり、キャラクターが上下に撃つことができるようになります。そのインスペクタから、その制御モードを定義できます。
オフ : 武器照準なし
PrimaryMovement : 移動スティック/キーを動かしている方向に武器が照準を合わせます。
SecondaryMovement : 武器は、二次移動入力を向けた方向に照準を合わせます。たとえば、デフォルトでは、これは xbox パッドの右スティックです。
PrimaryThenSecondaryMovement : 存在する場合は一次移動が使用され、存在しない場合は二次移動が使用されます
SecondaryThenPrimaryMovement : 存在する場合は二次移動が使用され、そうでない場合は一次移動が使用されます
マウス : 武器はマウス ポインターの方向を向く
スクリプト : 武器は通常の入力では照準を合わせませんが、別のスクリプトによって制御されます (AI や自動照準などに役立ちます)。
これは武器ごとに定義できますが、InputManager ですべての武器に対してグローバル レベルで強制することもできます。 WeaponForcedMode を設定するだけで、プレイヤー キャラクターが使用するすべての武器に自動的に適用されます。
原文
Adding a WeaponAim component (WeaponAim2D or WeaponAim3D) to your weapon will allow you to control its orientation, allowing your character to shoot up, down, etc. From its inspector you’ll be able to define its control mode :
Off : no weapon aim
PrimaryMovement : the weapon will aim in whatever direction you’re moving your movement stick/keys to.
SecondaryMovement : the weapon will aim in the direction you point your secondary movement input to. That’s the right stick on an xbox pad by default, for example.
PrimaryThenSecondaryMovement : primary movement will be used if there’s any, otherwise secondary movement
SecondaryThenPrimaryMovement : secondary movement will be used if there’s any, otherwise primary movement
Mouse : the weapon will point in the direction of the mouse pointer
Script : the weapon won’t aim via regular input, but will be controlled by another script (useful for AIs, auto aim, etc)
This can be defined per weapon, but can also be forced at a global level, for all weapons, on the InputManager. Just set its WeaponForcedMode and it’ll automatically be applied to all the weapons the player Character uses.https://topdown-engine-docs.moremountains.com/weapons.html#weapon-aim より
この説明を読むと、どれか一つの入力しか対応しないように思えます。
AimControl の 選択肢の一つのスクリプトがどういったものかサンプルがないか Demos のそれぞれのプロジェクトごとの Prefabs/Weapons フォルダを探してみました。
Assets/TopDownEngine/Demos/Deadline/Prefabs/Weapons/DeadlineEnemyHandgun.prefab
の AimControl が Script でした。
しかし、AimControl が Script だからといって、そのスクリプトの所在を指し示す設定などは見当たりません。
「Weapons | TopDown Engine Documentation」の Script の項目を読むと AimControl が Script の際は Als や Auto Aim を使うと書いてあり、 Als はわかりませんでしたが、 Auto Aim はドキュメントの次の項目にありました。
Auto Aim では WeaponAutoAim2D/3D コンポーネントが紹介されていて、これらは WeaponAim2D/3D コンポーネントを利用するようです。
WeaponAutoAim2D.cs をみると、 GetComponent を使って、同じゲームオブジェクト/プレハブ内の WeaponAim2D コンポーネントを取得・参照しています。
さきほどの DeadlineEnemyHandgun.prefab にも WeaponAim コンポーネントを取得して参照している WeaponPreventShootingWhenCloseToWalls2D.cs というスクリプトが同じプレハブ内にコンポーネントに追加されていました。
他の武器プレハブについて
他の武器プレハブについてもいくつか AimControl が Script であるものがありました。
- Assets/TopDownEngine/Demos/Loft3D/Prefabs/Weapons/Weapons/LoftAIAssaultRifle.prefab
- Assets/TopDownEngine/Demos/Loft3D/Prefabs/Weapons/Weapons/LoftAIAssaultRifleWithReload.prefab
これらも Script でしたが、こちらには WeaponAim を参照する他のコンポーネントはありませんでした。
どちらにも追加されていた WeaponLaserSight.cs を調べましたが参照していません。
同じく WeaponLaserSight.cs が追加されていても Aim Control は Mouse の設定の LoftAssaultRifle もありました。
Assets/TopDownEngine/Demos/Tanks/Prefabs/TankCannonAI.prefab も Aim Control が Script ですが、WeaponAim を参照するスクリプトは見つかりませんでした。
今日はここまで
結果として
- WeaponAim コンポーネントでは一つの入力にしか対応していない( Script 以外はたぶん)
- AimControl に Script を選択しているサンプルの武器プレハブでは、WeaponAim2D/3D とは別にWeaponAutoAim2D/3D などが追加されていて、WeaponAutoAim2D/3D では GetComponent で同じゲームオブジェクト/プレハブ内から取得した WeaponAim2D/3D を参照している
- AimControl に Script を選択していても WeaponAim コンポーネントを参照する他コンポーネントが存在しない武器プレハブも存在する
WeaponAutoAim2D.cs は処理が多くて、まだ全体の流れがわからないので、どうすれば Mouse と Secondary Movement のダブル入力ができるようになるか調べたいと思います。
参照サイト Thank You!
- Unity
- TopDown Engine
- ぴぽや倉庫
- Input | TopDown Engine Documentation
- Weapons | TopDown Engine Documentation
コメント