Noticias

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

Ayuda! Sistema de Construccion

Iniciado por Sr_Mostacho, Abril 17, 2018, 01:44:33 AM

Tema anterior - Siguiente tema
Muy buenas gente de la comunidad, espero esten muy bien. Tengo una duda y espero que puedan ayudarme y si es asi les agradezco de antemano.
 
Tengo un proyecto de un juego de supervivencia en el cual ya tengo enemigos, armas, etc. El detalle esta en que quiero tener tambien un sistema de construccion para que los jugadores puedan crearse su base como todos los juegos del genero.
 
Ahora mi duda, tengo ya mas o menos hecho el script para instanciar los gameObject como el "fundation" o las paredes, etc. el problema es que llevo dias cabeceando sobre como podria hacer para alinearlos autimaticamente, me explico...  que las paredes no queden una sobre otra si no que tal como hicieron en rust, se alinee automaticamente al borde del fundation.
 
Habia pensado en capturar las coordenadas de el objeto al que este mirando mi raycast, por ejemplo, si el player esta en modo construccion y va a colocar una pared, mira hacia el fundation y automaticamente se coloca en las coordenadas del funcation. lo que no se es como capturar esas coordenadas (quiza parezca tonta la pregunta y seguramente la solucion sea mas facil de lo que yo pienso, pero la verdad se me acabaron las ideas) y quisiera saber si podrian sacarme de dudas o ayudarme a hacer un mejor sistema de construccion. :D
 
P.D: Utilizo JavaScript
 
 

Primero deberias de permitir que las bases se creen sobre una grilla - o por el momento que su posición sea entera.
 
Segundo, deberías saber la rotación del objeto, es decir si en Y la rotación es 0 entonces el estado de rotación es el inicial, para esto podrias crear un arreglo con las 4 rotaciones posibles.
 

private readonly Vector3[] Rotations = new Vector3[4] { new Vector3(0,0,0), new Vector3(0,90,0), new Vector3(0,180,0), new Vector3(0,270,0) };

 
Luego según la rotación situar el objeto... Podrías detectar si el Raycast esta colisionando con la base, la base debería contar con 4 variables que sean los slots del mismo.
 

public class Base
{
public Transform Forward;
public Transform Back;
public Transform Left;
public Transform Rigth;
}

 
Si el raycast detecta la colisión entonces evaluamos que posiciones son posible mediante el valor de las variables, en base a esto generas las rotaciones.
 
 
 
Te recomiendo hacer algo como lo siguiente  ----
 

public class ConstructionElement : MonoBehaviour
{
public ConstructionElement Parent;
public bool[] AvailableSites;
public Transform[] Slots;
}

 
 

Muchísimas gracias amigo! Pero como haría para que mediante el raycast se detecte la posición del objeto base? O sea, si hago lo que me aconsejas, quedaría perfecto pero aún así necesitaría saber cuál es la posición del objeto base para que mi nuevo objeto se instancie sobre esa posición y luego aplicar las rotaciones y lo demás, no?
 
 
 
Cita de: francoe1 date=1523937697Primero deberias de permitir que las bases se creen sobre una grilla - o por el momento que su posición sea entera.
   
   
      Segundo, deberías saber la rotación del objeto, es decir si en Y la rotación es 0 entonces el estado de rotación es el inicial, para esto podrias crear un arreglo con las 4 rotaciones posibles.
   
   

private readonly Vector3[] Rotations = new Vector3[4] { new Vector3(0,0,0), new Vector3(0,90,0), new Vector3(0,180,0), new Vector3(0,270,0) };

   
      Luego según la rotación situar el objeto... Podrías detectar si el Raycast esta colisionando con la base, la base debería contar con 4 variables que sean los slots del mismo.
   
   

public class Base
{
public Transform Forward;
public Transform Back;
public Transform Left;
public Transform Rigth;
}

   
      Si el raycast detecta la colisión entonces evaluamos que posiciones son posible mediante el valor de las variables, en base a esto generas las rotaciones.
   
   
       
   
   
      Te recomiendo hacer algo como lo siguiente  ----
   
   

public class ConstructionElement : MonoBehaviour
{
public ConstructionElement Parent;
public bool[] AvailableSites;
public Transform[] Slots;
}

   
       
   


Respondí arriba, y gracias de nuevo!

Los objetos que instancies deberían estar emparentados a la base, por lo que la posicion es local -
 
Deberias de trabajar la base y las paredes con la misma escala.

Etiquetas: