Jump to content
Highest

Optimizar juego 3D Endless Runner [Problema con Obstaculos]

Recommended Posts

Hola buenas, estoy haciendo un proyecto de un Endless Runner 3D para android.
Tengo un problema con los obstaculos aleatorios, mi codigo genera obstaculos aleatorios en las coordenadas (x) -2.8, 0 , - 2.8, Hasta ahí bien.
El problema es que se generan infinitamente hacia adelante en las coordenadas (z) lo cual produce que el juego ande mal,
ademas necesitaria saber como hacer que se destruyan cuando el jugador las deje atras. Si alquien me pudiera ayudar a hacer el codigo se los agradeceria mucho!

Les dejo mi codigo:

using System.Collections;
using UnityEngine;

public class GenerateCoin : MonoBehaviour
{
    public GameObject CoinObj;
    Vector3 Pos;
    bool next;
    public float[] posX;
    public float[] posZ;
    int value = 1;
    public int lastpos = 1;
    public float coinY;

    void FixedUpdate()
    {
     //   StartCoroutine(WaitSys());
        Generate();
    }
   /* IEnumerator WaitSys()
    {
        yield return new WaitForSeconds(0f);
        next = true;
        Generate();
    }*/
    void Generate()
    {
        if(GameManager.sharedInstance.currentGameState == GameState.inGame)
        {
        // if (!next)
        //     return;
        int i = Random.Range(0, 3);
        Pos.x = posX[i];
        Pos.z += posZ[i];
        Pos.y = coinY;
        GameObject CoinClone = Instantiate(CoinObj, Pos, CoinObj.transform.rotation);
        CoinClone.GetComponent<CoinScript>().myNum = value;
        CoinClone.transform.SetParent(this.transform);
        value += 1;
        //next = false;  
        //return;
        }
    }
    public void Message(int i)
    {
        if (lastpos == i)
        {
            lastpos += 1;
        }
    }
}

Gracias de antemano!

Share this post


Link to post
Share on other sites

En la función Generate() estás añadiendo a .z el valor de posZ eso puede ser lo que esté generando los objetos en un valor de Z cada vez más alto.

Por otro lado, para destruir los objetos puedes usar la opción MonoBehaviour.OnBecameInvisible() ya que esta se llama cuando el objeto deja de ser visible por la cámara, otra opción es calcular la distancia del objeto con alguna referencia, por ejemplo la cámara y si esta es mayor a X valor entonces destruyes el objeto.

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...