With the script I got, I can go to the right and it will never end, I can go up and it'll be endless too etc. but when I go somewhere and try to change direction, it's not working.
using System.Collections.Generic;
using System.Collections;
using UnityEngine;
public class LevelGenerator : MonoBehaviour
{
private const float PLAYER_DISTANCE_SPAWN_LEVEL_PART = 100f;
[SerializeField] private Transform levelPart_Start;
[SerializeField] private List levelPartList;
[SerializeField] private Transform player;
private Vector3 lastRightPosition;
private Vector3 lastUpPosition;
private Vector3 lastLeftPosition;
private Vector3 lastDownPosition;
private Vector3 playerPosition;
private void Awake()
{
lastRightPosition = levelPart_Start.Find("RightPosition").position;
lastUpPosition = levelPart_Start.Find("UpPosition").position;
lastLeftPosition = levelPart_Start.Find("LeftPosition").position;
lastDownPosition = levelPart_Start.Find("DownPosition").position;
}
private void Update()
{
playerPosition = player.Find("Player").position;
if (Vector3.Distance(playerPosition, lastRightPosition) < PLAYER_DISTANCE_SPAWN_LEVEL_PART)
{
SpawnLevelPartRight();
}
if (Vector3.Distance(playerPosition, lastUpPosition) < PLAYER_DISTANCE_SPAWN_LEVEL_PART)
{
SpawnLevelPartUp();
}
if (Vector3.Distance(playerPosition, lastLeftPosition) < PLAYER_DISTANCE_SPAWN_LEVEL_PART)
{
SpawnLevelPartLeft();
}
if (Vector3.Distance(playerPosition, lastDownPosition) < PLAYER_DISTANCE_SPAWN_LEVEL_PART)
{
SpawnLevelPartDown();
}
}
private void SpawnLevelPartRight()
{
Transform chosenLevelPart = levelPartList[Random.Range(0, levelPartList.Count)];
Transform lastLevelPartTransform = SpawnLevelPart(chosenLevelPart, lastRightPosition);
lastRightPosition = lastLevelPartTransform.Find("RightPosition").position;
}
private void SpawnLevelPartUp()
{
Transform chosenLevelPart = levelPartList[Random.Range(0, levelPartList.Count)];
Transform lastLevelPartTransform = SpawnLevelPart(chosenLevelPart, lastUpPosition);
lastUpPosition = lastLevelPartTransform.Find("UpPosition").position;
}
private void SpawnLevelPartLeft()
{
Transform chosenLevelPart = levelPartList[Random.Range(0, levelPartList.Count)];
Transform lastLevelPartTransform = SpawnLevelPart(chosenLevelPart, lastLeftPosition);
lastLeftPosition = lastLevelPartTransform.Find("LeftPosition").position;
}
private void SpawnLevelPartDown()
{
Transform chosenLevelPart = levelPartList[Random.Range(0, levelPartList.Count)];
Transform lastLevelPartTransform = SpawnLevelPart(chosenLevelPart, lastDownPosition);
lastDownPosition = lastLevelPartTransform.Find("DownPosition").position;
}
private Transform SpawnLevelPart(Transform levelPart, Vector3 spawnPosition)
{
Transform levelPartTransform = Instantiate(levelPart, spawnPosition, Quaternion.identity);
return levelPartTransform;
}
}
↧