Generador de Obstáculos Aleatorios en unity 3D
– UnityAssets3Free
hola , soy Camilo y en esta ocasion os traigo
nueva pregunta
Estoy buscando hacer mi primer juego real llamado Bottomless. Parece que tengo un problema con el script del generador de obstáculos en Unity2D. Quiero que el obstáculo se genere verticalmente donde un jugador está bajando de nivel.
Aquí mi guión:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Generator : MonoBehaviour
public GameObject spike;
public float maxspeed;
public float minspeed;
public float currentspeed;
void Awake()
currentspeed = Random.Range(maxspeed, minspeed);
spikegen();
void spikegen()
GameObject SpikeIns = Instantiate(spike, transform.position, transform.rotation);
void Update()
Parece que la ejecución de este código se cuelga unity rápidamente. ¿Alguien tiene una alternativa mejor?
1 respuesta 1
Así que he estado considerando su problema, y creo que lo mejor que puede hacer es crear puntos de generación en los mosaicos de su mapa para que los picos encajen entre sí. Entonces, cuando su reproductor esté cayendo y el nuevo mapa esté cargado, tome los puntos de generación, agréguelos a una lista, elija uno al azar y luego cree una instancia de su pico allí. O tome los mosaicos del mapa para generar los picos a medida que se cargan.
Método 1:
Crea puntos de generación en tu parte del mapa. Cree y agregue el siguiente script. Coloque los puntos de generación en la lista del inspector. Y llama a la función en Awake/Start.
using System.Collections;
using UnityEngine;
public class MapScript : MonoBehaviour
//Spike you want to instantiate
public GameObject spike;
//List for you to place spawn points in the inspector
public List<GameObject> Spawnpoints = new List<GameObject>();
public void Awake()
//Get a random number from 0 to our lists count
int random = Random.Range(0, Spawnpoints.Count);
//Instantiate at the random spawn point
GameObject SpikeIns = Instantiate(spike, Spawnpoints[random].transform.position, transform.rotation);
Método 2:
Similar al ejemplo anterior, excepto que el código para generar ocurre en la secuencia de comandos del Generador (este no es el método preferido ya que tendremos que acceder a la secuencia de comandos del mosaico del mapa).
Por lo tanto, use el código anterior, pero elimine GameObject Awake and Spike y luego en el script del generador:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Generator : MonoBehaviour
public GameObject spike;
public float maxspeed;
public float minspeed;
public float currentspeed;
void Awake()
currentspeed = Random.Range(maxspeed, minspeed);
spikegen();
void Update()
void spikegen()
List<GameObject> Spawners = new List<GameObject>();
foreach(GameObject spawn in refernceToOtherScripts.Spawnpoints)
Spawners.Add(spawn);
int random = Random.Range(0, Spawners.Count);
GameObject SpikeIns = Instantiate(spike, Spawners[random].transform.position, transform.rotation);
Ninguno de ellos ha sido probado ya que estoy en la computadora de mi trabajo, pero ambos deberían funcionar perfectamente bien. Como probablemente hayas adivinado, hay muchas maneras diferentes de hacer esto.
nota: si aun no se resuelve tu pregunta por favor dejar un comentario y pronto lo podremos de nuevo , muchas gracias
sin mas,espero que te funcione