質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

0回答

899閲覧

異なる参照元を持つ2つのスクリプトを参照先で計算させる方法

shushudayo

総合スコア3

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2020/06/28 04:45

前提・実現したいこと

複数のキャラクターを別々に移動させるコントローラースクリプトの中に攻撃用スクリプトを組み込もうとしています。詳しく書くと、キャラクターが止まっている間は自動で攻撃し、キャラクターが移動中の間は攻撃を停止するという処理が書かれたスクリプトを参照元とし、移動処理の監督スクリプトに組み込む、といったものです。スクリプトは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(移動しているかしてないか)によって攻撃するかしないかを決めたい』ということです。なので他の方法があれば、そちらでも歓迎いたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bboydaisuke

2020/07/04 20:10

まだ回答を求めているようだけど誰も何も言わないのであえて言いますけど、書かれていることの意味がさっぱりわからないし、じっくり何度も何度も読むなんてしたくないし、文章の書き方もその気を起こさせない書き方なんですよ。
shushudayo

2020/07/05 07:43

すみません…自分でも薄々気づいてはいたんですが、自分でもどこがわかっていないのか理解しきれておらず、どうも言語化するのが難しかったため、回答者さんの時間を無駄に使わせてしまいました。読み返してみましたが、確かに問題点もうまくまとめられておらず、分かりづらかったかと思います。修正するよりまず自分的にも問題点を洗い出しきったほうが良いと思うので、しばらくしたら投稿を削除させていただきます…申し訳ないです…
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問