ゲーム内の戦闘システムについて考えてもわからなかったことがあったので質問させていただきます。
まずこのゲームでは、キャラクターを構造体をList化してそのリストをにキャラクターの情報を入れています。
コードはこちらになります。(質問用に簡略化しています)
using System.Collections.Generic; using UnityEngine; public class TestScript : MonoBehaviour { List<CharaList> CharaData = new List<CharaList>(); bool isMoving = false; float moveBlock = 3f; float Timer; [System.Serializable] public struct CharaList //構造体の定義 { public string name; public GameObject EntityObjects; public GameObject BattleAngle; } void Start() { CharaData.Add(new CharaList() //キャラクターデータ { name = "Player", EntityObjects = GameObject.FindWithTag("Player"),//キャラクターのオブジェクト BattleAngle = GameObject.FindWithTag("Player").transform.GetChild(0).gameObject }); CharaData.Add(new CharaList() { name = "Boss", EntityObjects = GameObject.FindWithTag("Boss"), BattleAngle = GameObject.FindWithTag("Boss").transform.GetChild(0).gameObject }); } void Update() { if (Input.GetKeyDown(KeyCode.Space)) //スペースキーを押したら移動開始 isMoving = true; if (isMoving) //タイマー Timer += Time.deltaTime; else Timer = 0; if (Timer < 1 && isMoving) //BattleAngleというオブジェクトの前方向に進む CharaData[0].EntityObjects.transform.position += CharaData[0].BattleAngle.transform.forward * moveBlock * Time.deltaTime; //これだけだとPlayerしか移動しない else if (Timer > 1 && isMoving) //1秒を超えたら終了 isMoving = false; } }
※「BattleAngle」は、全てのキャラクターの頭の上にある空のオブジェクトです。このオブジェクトの方向を決めることで、その方向にキャラクターが進みます。
処理の流れとしては、
- スペースキーを押す
- isMovingがtrueになり、Timerがカウントされる
- Timer < 0 && isMoving == trueの条件を満たす。
- キャラクターのオブジェクトがBattleAngleを基準とした前方向(Z方向)に約1秒間進む。
- 1秒を超えた段階で、停止する。
やりたいこと
この処理を全てのキャラクターのオブジェクトで同時にしたいです。
具体的に満たしたい条件&ルールとして
条件1、全てのキャラクターのオブジェクトでこの処理を同時にしたい。
条件2、キャラクターの数は動的に変わる。(移動中は変わらない)
条件3、キャラクターの移動方向も各々違う。
動かすキャラクターが決まっていれば、コードに記述を追加すれば良いだけなのですが、それでは条件2に反してしまうのでそれはできませんでした。
全部のオブジェクトを一つの親オブジェクトにまとめる方法も考えましたが、それでは動く方向は1方向になってしまうので条件3に反してしまいます。
この問題を解決するための解決策やヒントなどを教えていただきたいです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/10/29 06:30