[TUTORIAL] Gerando Objetos Proceduralmente
Página 1 de 1
[TUTORIAL] Gerando Objetos Proceduralmente
Fiz um sistema de spawn de objetos proceduralmente.
Espero que gostem!
Espero que gostem!
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ProceduralCityCreator : MonoBehaviour
{
public GameObject Limit_A;//Limitar área de spawn do objeto
public GameObject Limit_B;//Limitar área de spawn do objeto
public GameObject Object;//Objeto que sera instanciado
public int Number_Generated_Objects;//Numero de objetos gerados
float A_Position_X;//Marcador X (Limita a posicao X)
float B_Position_X;//Marcador X (Limita a posicao X)
float A_Position_Z;//Marcador Z (Limita a posicao Z)
float B_Position_Z;//Marcador Z (Limita a posicao Z)
float Y = 0.75f;//Posicao Y do objeto instanciado
float Z_Difference;//Diferenca de Z (A - B) (Determina a area Z de Spawn)
float X_Difference;//Diferenca de X (A - B) (Determina a area X de Spawn)
GameObject Smaller_X;//Objeto com a menor posicao X
GameObject Smaller_Z;//Objeto com a menor posicao Z
GameObject Clone;//Objeto Instanciado
Vector3 Position;//Posicao do objeto instanciado
Quaternion Rotation;//Rotacao do objeto instanciado
// Start is called before the first frame update
void Start()
{
A_Position_X = Limit_A.transform.position.x;//Pegar Posicao X
B_Position_X = Limit_B.transform.position.x;//Pegar Posicao X
A_Position_Z = Limit_A.transform.position.z;//Pegar Posicao Z
B_Position_Z = Limit_B.transform.position.z;//Pegar Posicao Z
if (A_Position_X < B_Position_X){ //Se "A_Position_X" for menor que "B_Position_X" (Assim sao permitidos apenas resultados positivos)
Smaller_X = Limit_A; //Se "A_Position_X" for menor | "Smaller_X" = "Limit_A"
X_Difference = (B_Position_X - A_Position_X) - 1;//Calcular Diferenca de X (B - A) (-1 para que o objeto nao seja intaciado na mesma posicao do marcador X)
}
else{
Smaller_X = Limit_B;//Se "B_Position_X" for menor | "Smaller_X" = "Limit_B"
X_Difference = (A_Position_X - B_Position_X) - 1;//Calcular Diferenca de X (A - B) (-1 para que o objeto nao seja intaciado na mesma posicao do marcador X)
}
if (A_Position_Z < B_Position_Z) //Se "A_Position_Z" for menor que "B_Position_Z" (Assim sao permitidos apenas resultados positivos)
{
Smaller_Z = Limit_A;//Se "A_Position_Z" for menor | "Smaller_Z" = "Limit_A"
Z_Difference = (B_Position_Z - A_Position_Z) - 1;//Calcular Diferenca de Z (B - A) (-1 para que o objeto nao seja intaciado na mesma posicao do marcador Z)
}
else
{
Smaller_Z = Limit_B;//Se "B_Position_Z" for menor | "Smaller_Z" = "Limit_B"
Z_Difference = (A_Position_Z - B_Position_Z) - 1;//Calcular Diferenca de Z (A - B) (-1 para que o objeto nao seja intaciado na mesma posicao do marcador Z)
}
for (int i = 0;i < Number_Generated_Objects;i++) //Spanw
{
Position = new Vector3(Smaller_X.transform.position.x + Random.Range(1,X_Difference),Y,Smaller_Z.transform.position.z + Random.Range(1, Z_Difference));
Clone = Instantiate(Object, Position, Rotation) as GameObject; //Instaciar
}
}
// Update is called once per frame
void Update()
{
}
}
Tópicos semelhantes
» [TUTORIAL] Arrastar Objetos com o mouse
» [TUTORIAL] Controlar a rotação de objetos 2D
» [TUTORIAL] Mover/Empurrar Objetos, Caixote,etc
» [TUTORIAL] Busca Customizada De Objetos Na Cena
» [TUTORIAL] Sons Aleatórios, objetos caindo
» [TUTORIAL] Controlar a rotação de objetos 2D
» [TUTORIAL] Mover/Empurrar Objetos, Caixote,etc
» [TUTORIAL] Busca Customizada De Objetos Na Cena
» [TUTORIAL] Sons Aleatórios, objetos caindo
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos