前提・実現したいこと
複数のキャラクターを別々に移動させるコントローラースクリプトの中に攻撃用スクリプトを組み込もうとしています。詳しく書くと、キャラクターが止まっている間は自動で攻撃し、キャラクターが移動中の間は攻撃を停止するという処理が書かれたスクリプトを参照元とし、移動処理の監督スクリプトに組み込む、といったものです。スクリプトは3つあり、MoveController(個別のキャラを移動させるためにUnitMoveに指示を出す監督のような役割)、UnitMove(キャラ全員が等しく持っている移動処理が入っている)、AttackController(これから実装しようとしている攻撃処理)です。
発生している問題
MoveControllerがUnitMoveを統括している状態になっているのですが、下記の通り、MoveControllerは任意のUnitMoveを持つオブジェクトのStateを変えるためにUnitMoveを参照しています。MoveController内で参照されているState(Idle,Ready,Move)のMoveの時だけ攻撃をしないように、AttackControllerのAttackTriggerメソッドとStopAttackTriggerメソッドを使い分けて組み込んで参照させたいと思っているのですが、これがなかなかうまくいきません。尚、AttackController型のattackControllerは宣言されているだけで、見やすいようにUpdate内には特に何も組み込んでいない状態にしてあります。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class MoveController : MonoBehaviour { UnitMove forcusObj;//参照元のUnitMove型の変数 AttackController attackController;//参照元のAttackController型の変数 void Update() { if (Input.GetMouseButtonUp(0)) { var ray = Camera.main.ScreenPointToRay(Input.mousePosition); var hit2d = Physics2D.Raycast(ray.origin, ray.direction); if (hit2d.collider != null) { var s = hit2d.collider.gameObject.GetComponent<UnitMove>(); if (s != null) { switch (s.CurrentState) { case UnitMove.State.Idle: //このStateの時にAttackTriggerを入れたい forcusObj = s; forcusObj.Forcus(); break; case UnitMove.State.Move: //このStateの時にStopAttackTriggerをいれたい s.FocusOut(); break; } } } else if (forcusObj != null) { switch (forcusObj.CurrentState) { case UnitMove.State.Ready: //このStateの時にAttackTriggerを入れたい forcusObj.MoveTo(Camera.main.ScreenToWorldPoint(Input.mousePosition)); break; } } } } }
試したこと
まず最初にやったことはUnitMove内のState処理からAttackControllerを参照するというものでしたが、これではキャラ達が個別に攻撃してくれず、一人のキャラだけが正しく攻撃してしまっていました。そのため、UnitMoveを指示しているMoveController内のState処理に直接組み込まなくてはいけないと思いました。そこで、UnitMoveコンポーネントを変数sに入れているのと同じように、sにAttackControllerコンポーネントをいれようとしたのですが、どうやってもエラー文が出てしまいました。これが今の状況です。願わくば、s = hit2d.collider.gameObject.GetComponent<AttackController>();という処理を記した後に、AttackTrigger、StopAttackTriggerを組み込みたいと思うのですが、そもそもこれがうまくいったところで、参照先で書いたUnitMoveのState内に、異なる参照元から引っ張ってきたメソッドを組み込むことができるのかどうかすらわかりません…長々と書いてしまい申し訳ありません。参照の仕方についての題にしてしまいましたが、実装したいのは『個別キャラの移動処理のように攻撃処理も個別に実装したい。また、移動処理のState(移動しているかしてないか)によって攻撃するかしないかを決めたい』ということです。なので他の方法があれば、そちらでも歓迎いたします。
あなたの回答
tips
プレビュー