Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Temas recientes

Generacion procedural 2d

Iniciado por DerKaiser, Enero 15, 2019, 11:26:19 PM

Tema anterior - Siguiente tema
Enero 15, 2019, 11:26:19 PM Ultima modificación: Enero 16, 2019, 02:48:13 PM por pioj
Hola  que tal gente de este lindo foro, estaba por los lares de unity cuando me encontre con un problema salvaje de pogramacion, necesitaria ayuda para resolverlo.
 
Mi script genera 3 capa de materiales(Gameobjects puestos uno al lado del otro en forma de cuadrado), estas capas estan bien pero el problema es que no se como generar en la tercera capa, la mas grande, GameObjects de forma de que parezcan como vetas de minerales, y que Tambien no aparezcan otro gameobject distinto bajo de el.
 
Jodido, si, pero no imposible. 
 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Generate : MonoBehaviour
{
    public int width;
    public int height;
    public int distance;
    public int space;
    public GameObject Grass;
    public GameObject Dirt;
    public GameObject Stone;
    public float heightpoint;
    public float heightpoint2;
    void Start()
    {
        Generation();
    }
    void Generation()
    {
        distance = height;
        for (int w = 0; w < width; w++)
        {
            int lowernum = distance - 1;
            int heighernum = distance + 2;
            distance = Random.Range(lowernum, heighernum);
            space = Random.Range(12, 20);
            int stonespace = distance - space;
 
            for (int j = 0; j < stonespace; j++)
            {
                Instantiate(Stone, new Vector3(w, j), Quaternion.identity);
            }
            for (int j = stonespace; j < distance; j++)
            {
                Instantiate(Dirt, new Vector3(w, j), Quaternion.identity);
            }
            Instantiate(Grass, new Vector3(w, distance), Quaternion.identity);
    
        }
    }
}

 
Ese es el script en cuestion por si queres probarlo o robarlo,  sin nada mas que decir pido ayuda, 
 
Adios 
 
                                                       Stemen.
 
 

con el codigo sin los comentarios pertinentes no se si lo estoy entendiendo bien, pero lo que puedes hacer es generar primero una matriz con lo que va en cada posicion y despues leer la matriz e ir posicionando los objetos leyendo en la matriz, asi te aseguras que no superponga objetos.

Enero 18, 2019, 01:24:00 AM #2 Ultima modificación: Enero 18, 2019, 01:14:05 PM por pioj
Cita de: Rddleo date=1547687076con el codigo sin los comentarios pertinentes no se si lo estoy entendiendo bien, pero lo que puedes hacer es generar primero una matriz con lo que va en cada posicion y despues leer la matriz e ir posicionando los objetos leyendo en la matriz, asi te aseguras que no superponga objetos.
   


Hola Rddleo, a que te referis con matriz?
 
Aca te pongo el Código con los comentarios
 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Generate : MonoBehaviour
{
    public int width;
    public int height;
    public int distance;
    public int space;
    public GameObject Grass;
    public GameObject Dirt;
    public GameObject Stone;
    public float heightpoint;
    public float heightpoint2;
    void Start()
    {
        Generation();
    }
    void Generation()
    {
        distance = height;
        for (int w = 0; w < width; w++)
        {
            int lowernum = distance - 1;//Esto es el punto minimo desde donde se generan los GameObjects
            int heighernum = distance + 2;//Este es el mas alto
            distance = Random.Range(lowernum, heighernum);// distance se refiere a la altura, siendo que se ocupa entre lowernum y heighernum
            space = Random.Range(12, 20);//La cantidad de tierra se pone aca
            int stonespace = distance - space;//Donde va la piedra
 
            for (int j = 0; j < stonespace; j++)//Aca uso un for loop para ubicar piedra(Stone) siempre que j sea menor que Stone space.
            {
                Instantiate(Stone, new Vector3(w, j), Quaternion.identity);
            }
            for (int j = stonespace; j < distance; j++)//Aca cambiamos  j = 0 para que sea j = stonespace, esto hace sea agrege tierra sobre la piedra
            {
                Instantiate(Dirt, new Vector3(w, j), Quaternion.identity);
            }
            Instantiate(Grass, new Vector3(w, distance), Quaternion.identity);//Lo mismo pero con el grass o pasto.
    
        }
    }
}

 
 

Enero 18, 2019, 03:09:15 AM #3 Ultima modificación: Enero 18, 2019, 03:09:23 AM por lightbug
@DerKaiser qué usas para postear código? es algo embebido? pasteBin ?

Cita de: lightbug date=1547777355@DerKaiser qué usas para postear código? es algo embebido? pasteBin ?
   


PasteBin?
 
Solo copio del compilador al foro xD.

Cita de: DerKaiser date=1547779385PasteBin?
   
   
      Solo copio del compilador al foro xD.
   


holy shit!

Cita de: lightbug date=1547782405holy shit!


, Es mas facil, ni se que es pastebin xD.

Por matriz me refiero a un vector de 2 dimensiones que tenga i y j de dimensiones con el bucle for que tu tienes puedes generar el mapa y despues recorriendolo lo colocas en el juego. Asi nonse te superpondrian la piedra con la tierra y con el pasto. No se si te habre sido de ayuda.

Cita de: Rddleo date=1547819708Por matriz me refiero a un vector de 2 dimensiones que tenga i y j de dimensiones con el bucle for que tu tienes puedes generar el mapa y despues recorriendolo lo colocas en el juego. Asi nonse te superpondrian la piedra con la tierra y con el pasto. No se si te habre sido de ayuda.
   


Gracias, lo intentare.

Etiquetas: