I am making a simple ball game that moves left and right when it hits a wall. I want the game to be like an arcade type game where the ball is on a platform and it keeps jumping up. So I’ve written a code to spawn a list of prefabs randomly upwards with a fixed gap. Since this is an endless runner I want the bottom Prefabs to be destroyed and new one to be spawned on top of the previous one. But when a new prefab is being spawned sometimes the gap made on the y axis is off but a decimal point and the more you play the bigger the gap is until the ball can’t make the jump to the next platform. Any Solutions??
public class PlatformSpawner : MonoBehaviour
{
public GameObject[] prefabs;
private GameObject platform;
public float gap = 3f;
public int maxInstances = 20;
private int numInstances = 0;
public ArcadeMovement scoreCountScript;
private float spawnerPosition = 0f;
private float lastSpawnedPosition = 0f;
private GameObject newPrefab;
private void Start()
{
spawnerPosition = transform.position.y;
}
void Update()
{
float scoreCounter = scoreCountScript.scoreCount;
Vector3 currentPosition = transform.position;
Transform currentRotation = gameObject.transform;
currentPosition.x = 0f;
currentRotation.eulerAngles = new Vector3(currentRotation.eulerAngles.x, currentRotation.eulerAngles.y, 0f);
transform.position = currentPosition;
if (numInstances < maxInstances)
{
if (scoreCounter < 25)
{
int index = Random.Range(0, 3);
currentPosition = transform.position + new Vector3(0f, (numInstances * gap), 0f);
newPrefab = Instantiate(prefabs[index], currentPosition, Quaternion.identity);
currentPosition += newPrefab.transform.position;
numInstances++;
}
if (scoreCounter >= 25)
{
int index = Random.Range(0, 5);
currentPosition = transform.position + new Vector3(0f, (numInstances * gap), 0f);
newPrefab = Instantiate(prefabs[index], currentPosition, Quaternion.identity);
currentPosition += newPrefab.transform.position;
numInstances++;
}
if (scoreCounter >= 50)
{
int index = Random.Range(0, 7);
currentPosition = transform.position + new Vector3(0f, (numInstances * gap), 0f);
newPrefab = Instantiate(prefabs[index], currentPosition, Quaternion.identity);
currentPosition += newPrefab.transform.position;
numInstances++;
}
}
}
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.gameObject.CompareTag("Ground"))
{
Destroy(collision.gameObject);
Debug.Log("Platform Destroyed");
numInstances--;
}
}
}