Jump to content
DerKaiser

Generacion procedural 2d

Recommended Posts

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.

 

Edited by pioj
no pongas tonterías en los tags, no ayuda

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites
On 1/17/2019 at 2:04 AM, Rddleo said:

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.

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.
    
        }
    }
}

 

Edited by pioj
Por favor, usa el <> o el "quote" para pegar código.

Share this post


Link to post
Share on other sites
46 minutes ago, DerKaiser said:

PasteBin?

Solo copio del compilador al foro xD.

holy shit! :63_astonished:... así derecho sin la herramienta de código? a mi no me sale así ... creo :35_thinking:

Share this post


Link to post
Share on other sites
1 minute ago, lightbug said:

holy shit! :63_astonished:... así derecho sin la herramienta de código? a mi no me sale así ... creo :35_thinking:

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

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites
2 hours ago, Rddleo said:

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.

Gracias, lo intentare.

Share this post


Link to post
Share on other sites

UnitySpain © Todos los derechos reservados 2020
×
×
  • Create New...