現在Unityでオリジナルゲームの開発中であり、下記のコードでステージの無限生成を実装しています。問題なく生成されるのですが、Playerが座標45を通過するごとに生成されるため、生成スピードが速く、同じステージが連続で生成された場合、透明な壁にPlayerがすり抜けたら動く敵が、Playerがすり抜けると同時に、次の同じステージの敵も反応してしまい、動いてしまいます。なのでステージの生成を~秒後に1つ生成されるようにしたいのですが、どのようにしたら良いでしょうか。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class GroundGenerator: MonoBehaviour { [SerializeField] GameObject player;//UnityからPlayerを格納 [SerializeField] GameObject[] Grounds = new GameObject[3];//Unityから生成するGroundのPrefabをアタッチ [SerializeField] GameObject Enemy;//UnityからEnemyプレハブをアタッチ float border = 45; float playerStartPosZ;//Playerの初期x座標 float playerNowPosZ;//Playerの現在x座標 GameObject instantiatedGround; void Start() { player = GameObject.Find("Player");//Hierarcyの中から名前が"Player"のものを探して来て取得→変数playerに格納 playerStartPosZ = player.transform.position.z;//最初の基準値となるPlayerの InstantiateEnemy(); } void Update() { GenerateGround();//Groundを一定の間隔で生成 } //Groundを一定の間隔で生成 void GenerateGround() { playerNowPosZ = player.transform.position.z;//Playerの現在x座標を変数playerNowPosXに格納 float playerDistance = playerNowPosZ - playerStartPosZ;//Playerの移動距離(playerNowPosXとplayerStartPosXの差分)を変数playerDistanceに格納 if (playerDistance > border) { //ステージ生成 Debug.Log("ステージ生成"); Instantiate(Grounds[Random.Range(0, 3)], new Vector3(0, 0, player.transform.position.z + 300), Quaternion.identity);//Playerの一定距離だけ先にステージ生成(-5.5fはステージ生成の位置補正の為) playerDistance = 0;//playerDistanceのリセット border = 100;//borderの再設定 playerStartPosZ = playerNowPosZ;//playerStartPosの再設定 } } //Ground生成と同時にEnemyを生成する関数 void InstantiateEnemy() { } }
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。