ランダム生成された障害物
メニューを表示するにはスワイプしてください
Obstacle クラスは、ゲーム内の障害物を管理し、障害物が画面外に出た際に再配置することで、継続的なゲームプレイを維持。
メソッド
Start メソッド
private void Start()
{
lastObject = startingLastObject;
player = FindAnyObjectByType<PlayerMVT>().transform;
}
目的: 最後の障害物の初期化とプレイヤーの Transform の取得。
仕組み:
lastObject = startingLastObject;: インスペクターで指定された初期障害物を lastObject に設定。
player = FindAnyObjectByType<PlayerMVT>().transform;: FindAnyObjectByType メソッドを使ってプレイヤーの Transform を取得。
OnBecameInvisible メソッド
private void OnBecameInvisible()
{
if (player == null) return;
if (transform.position.x >= player.position.x) return;
if (transform == lastObject) return;
Vector2 position = transform.position;
float random = Random.Range(0, 100);
if (random <= 50)
{
position.y = Random.Range(-2, 1);
}
else
{
position.y = Random.Range(15, 18);
}
position.x = lastObject.position.x + Random.Range(6f, 10f);
transform.position = position;
lastObject = transform;
}
目的:障害物が画面外に出て特定の条件を満たした場合に再配置する。
仕組み:
スクリプトは、プレイヤーが存在するかを確認し(if (player == null) return;)、障害物がプレイヤーの後方にあるかを判定(if (transform.position.x >= player.position.x) return;)、連続して同じ障害物が再配置されるのを防止する(if (transform == lastObject) return;)。
現在の障害物の位置を取得し(Vector2 position = transform.position;)、ランダムな数値を生成(float random = Random.Range(0, 100);)、ランダム値に応じて障害物のy座標を調整する。
その後、最後の障害物からランダムな距離だけx座標を更新し(position.x = lastObject.position.x + Random.Range(6f, 10f);)、lastObjectを現在の障害物に更新する(lastObject = transform;)。
まとめ
- 初期化:最後の障害物を設定し、プレイヤーを検索する;
- 再配置:障害物が画面外に出て特定条件を満たした場合、最後の障害物よりランダムな距離と高さで再配置する;
- 条件:障害物がプレイヤーの後方にあり、同じ障害物が繰り返し再配置されないことを保証する。
この設定により、ゲーム内で障害物が継続的に出現し、プレイヤーに対して常に挑戦と多様性が保たれます。
フィードバックありがとうございます!
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください