Hello, im am having trouble with a script to create a world “infinity”, my idea is this: I have an object “World” (consisting of a square RagePixel sprite), I want to clone this world to the right or left depending whether the player is on the left or right side of the world, this would serve to generate a kind of infinite world (like that of Cortex Command, where if you run always to one side, back to the place you came from, as if you round the world). I have the script, but for some reason I make infinite objects. I think it is because control ignores “pasaDeLado ()” but I’m not 100% sure. Hope you can help, thank you very much! !
using UnityEngine;
using System.Collections;
public class CreacionPlaneta : MonoBehaviour
{
public float ladoDelPlaneta;
public float posicionJugador;
public int contadorPasarMapa=0;
public float tamanioMapa;
public float posicionRelativaJugador;
public bool mapNuevo = false;
public float posicionPlaneta;
public GameObject[] arregloPlaneta = new GameObject[1];
public Vector3 nuevaPosicion;
public float ladoDelPlanetaAntes = 1;
public GameObject nuevoPlaneta;
public string i1 = "nada";
public string ladoPlaneta = "nada";
public string ladoPlanetaAntes = "nada";
public string posRelativaJug = "nada";
public string pasoMapa = "nada";
public string i2 = "nada";
void Start ()
{
tamanioMapa = this.gameObject.renderer.bounds.size.x;
posicionRelativaJugador = posicionJugador;
posicionPlaneta = this.transform.position.x;
ladoDelPlaneta = deQueLadoEsta();
ladoDelPlanetaAntes = 0;
generarPlaneta();
creoLado(ladoDelPlaneta);
}
void Update ()
{
ladoDelPlaneta = deQueLadoEsta();
posicionRelativaJugador = (posicionJugador - (contadorPasarMapa*tamanioMapa));
ladoPlaneta = ladoDelPlaneta.ToString();
ladoPlanetaAntes = ladoDelPlanetaAntes.ToString();
posRelativaJug = posicionRelativaJugador.ToString();
pasoMapa = sePasoDeMapa().ToString();
if(!sePasoDeMapa())
{
i1 = "in(!sePasoDeMapa())";
if(pasaDeLado())
{
i1 = "in(pasaDeLado())";
borroLadoContrario();
creoLado(ladoDelPlaneta);
}
}
}
//Este metodo se va a fijar si el jugador pasa de un lado a otro
bool pasaDeLado()
{
if(ladoDelPlaneta != ladoDelPlanetaAntes)
{
return true;
}
else
{
return false;
}
}
//------------------------------
//Duplica el mapa del lado que esta el jugador
void creoLado(float ladoDelPlaneta)
{
if(ladoDelPlaneta == 0)
{
//Creo para la izquierda
this.nuevaPosicion.x = (this.transform.position.x - (tamanioMapa/2));
this.nuevoPlaneta = (GameObject)Instantiate( this.gameObject, nuevaPosicion, transform.rotation);
this.arregloPlaneta[1] = this.nuevoPlaneta;
this.ladoDelPlanetaAntes=this.ladoDelPlaneta;
}
else
{
//Creo para la derecha
this.nuevaPosicion.x = (this.transform.position.x + (tamanioMapa/2));
this.nuevoPlaneta = (GameObject)Instantiate( this.gameObject, nuevaPosicion, transform.rotation);
this.arregloPlaneta[1] = this.nuevoPlaneta;
this.ladoDelPlanetaAntes=this.ladoDelPlaneta;
}
}
//------------------------------
//Borra el mapa del lado que no esta el jugador
void borroLadoContrario()
{
Destroy(this.arregloPlaneta[1]);
i2 = "EntroBorrar";
}
//------------------------------
//Crea por primera vez el planeta
void generarPlaneta()
{
arregloPlaneta[0] = this.gameObject;
}
//------------------------------
//Este metodo va a cambiar de lugar los mapas, hacienod que el que era copia sea el principal
void cambiarDeMapa()
{
GameObject aux;
aux = arregloPlaneta[0];
arregloPlaneta[0] = arregloPlaneta[1];
arregloPlaneta[1]=aux;
}
//------------------------------
//Este metodo dice si se paso de un mapa al otro
bool sePasoDeMapa()
{
if( posicionRelativaJugador < 0 )
{
contadorPasarMapa -= contadorPasarMapa;
cambiarDeMapa();
return true;
}
else if (posicionRelativaJugador >= tamanioMapa)
{
contadorPasarMapa += contadorPasarMapa;
cambiarDeMapa();
return true;
}
else
{
return false;
}
}
//------------------------------.
//Este método va a indicar de que lado del planeta se encuentra el personaje
int deQueLadoEsta()
{
if(posicionRelativaJugador <= tamanioMapa/2)
{
//entonces esta del lado izquierdo
return 0;
}
else
{
//entonces esta del lado derecho
return 1;
}
}
//------------------------------
}