Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Spawn prefabs upwards with a fixed gap #1905

Open
Abraham0Titus opened this issue Apr 21, 2023 · 0 comments
Open

Spawn prefabs upwards with a fixed gap #1905

Abraham0Titus opened this issue Apr 21, 2023 · 0 comments

Comments

@Abraham0Titus
Copy link

Abraham0Titus commented Apr 21, 2023

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??

`using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;

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)
    {
        int index = 0;
        if (scoreCounter < 25)
        {
            index = Random.Range(0, 3);
        }

        else if (scoreCounter >= 25 && scoreCounter < 50)
        {
            index = Random.Range(0, 5);
        }

        else if (scoreCounter >= 50)
        {
            index = Random.Range(0, 7);
        }

        currentPosition = transform.position + new Vector3(0f, Mathf.RoundToInt(numInstances * gap), 0f);
        newPrefab = Instantiate(prefabs[index], currentPosition, Quaternion.identity);
        currentPosition += newPrefab.transform.position;
        numInstances++;
    }
}

private void OnTriggerEnter2D(Collider2D collision)
{
    if (collision.gameObject.name.StartsWith("Platform"))
    {
        Destroy(collision.gameObject);
        Debug.Log("Platform Destroyed");
        numInstances--;
    }
}

}`

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant