Noticias

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

Ayuda script movimiento 2D personaje

Iniciado por SuperMax, Mayo 15, 2015, 11:43:49 PM

Tema anterior - Siguiente tema
Mayo 15, 2015, 11:43:49 PM Ultima modificación: Mayo 15, 2015, 11:47:34 PM por SuperMax
Hola a todos. Necesito hacer un script para que cuando aprete los botones en el telefono pues el personaje se muevan (no hay gravedad).
Tambien que se pueda mover en diagonal (con dos botones apretados)
 
Nos os estoy pidiendo el codigo completo currado por vosotros (que no estaría mal ), sino guias de referencia o algo que me guie para hacerlo.
 
Supongo que el codigo se aplicará al objeto que quiera mover y luego se llamara a los botones con sus colliders. Yo lo haría, pero es que no tengo ni idea por donde empezar jeje...
 
Saludos.

Para mover un personaje puedes usar un método de la clase Vector3 de la librería de unity, lo explico en C#.
 
primero creamos un 2 métodos un Get y un Set llamados GetPosition y SetPosition para trabajar de una manera mas cómoda y prolija.

public Vector3 GetPosition{get{return transform.position;}}
public Vector3 SetPosition{set{transform.position = value;}}

bien, teniendo nuestros dos métodos para mani***r nuestra posición necesitamos crear un tercero que nos va a servir para mover el Objeto de la siguiente manera.

public void MoveObject(int X, int Y, float Velocity)
{
      //Deberás de crear un Vector3 temporal
      Vector3 Tmp = GetPosition;
      Tmp.x += Vector3.right * (X*Velocity);
      Tmp.y += Vector3.up* (Y*Velocity);
      SetPosition = Tmp;
}

Luego quedarían los limites, para esto podemos clampear el Vector, debemos Crear 4 Variables para limitar nuestros cuatro casos Top Bottom Left Right.

int TopLimit = 5;
int BottomLimit = 5;
int LeftLimit = 5;
int RightLimit = 5;
public void MoveObject(int X, int Y, float Velocity)
{
      Vector3 Tmp = GetPosition;
      Tmp.x += Vector3.right * (X*Velocity);
      Tmp.y += Vector3.up* (Y*Velocity);
      //En esta posición clampeamos los valores, cuando ya hayamos asignado los nuevos valores al vector temporal.
      Tmp.x = Mathf.clamp(Tmp.x,LeftLimit,RightLimit);
      Tmp.y = Mathf.clamp(Tmp.y,BottomLimit,TopLimit);
      SetPosition = Tmp;
}

Entonces con esto ya estaría el movimiento y los limites del Objeto, quedaría la parte de Input, no importa de que tipo sean, siempre son llamados Input, para tu caso necesitas crear 4 métodos diferentes, justamente para poder llamarlos desde los 4 botones de dirección.
 
Dependiendo de la versión de Unity que estes utilizando, si es desde la 4.6 en adelante deberías buscar un tutorial en Youtube de como llamar métodos desde un Boton, si es una version mas antigua entonces deberías de hacerlos con algun Plugins, yo mismo tengo un Sistema de UI búscalo por el foro, o si te animas, puedes armarte uno tu mismo con los componentes GUI que presta la librería de UNITY3D.
 
Espero que mi respuesta te ayude, cualquier duda consulta, visita mi canal en YT tengo vídeos explicativos sobre estos temas y muchas otras cosas, son solo 3 de aproximadamente 3 Horas de reproducción entre todos. Suerte.

Muy buena explicación. No la entendí del todo pero ahora iré parte a parte probando en Unity (Última versión) y a ver que me sale jeje. La verdad es que me ayudaría mucho ya que llevo como 2 semanas solo para ajustar bien la resolucion para todos los dispositivos y a la vez aprendiendo algunas cosas. 

Franco tengo unas cuantas dudas. No podriamos chatear en linea por algun sitio o algo? Tampoco quiero molestar pero si prefieres que las ponga por aqui pues eso...

Mayo 16, 2015, 09:53:53 PM #4 Ultima modificación: Mayo 16, 2015, 09:54:45 PM por SuperMax

En lynda.com hay un tutorial cojonudo para manejo de personajes en 2d...

Cita de: SuperMax date=1431805847Franco tengo unas cuantas dudas. No podriamos chatear en linea por algun sitio o algo? Tampoco quiero molestar pero si prefieres que las ponga por aqui pues eso...
 
Si pregunta aquí entonces queda un aporte en el foro

Pua tio pues no sé por donde empezar... Todo ese script que me has hecho es 1 solo script cierto? Y luego lo meto dentro del personaje, correcto?

Quiero decir que si es solo 1 archivo C# o són más.

Tio me salen un montón de errores, comenzando por esos ";" que has puesto en los public: 

using UnityEngine;
using System.Collections;
public class NewBehaviourScript : MonoBehaviour {
public float Velocity = 10f;
public Vector3 GetPosition{get{return transform.position;}}
public Vector3 SetPosition{set{transform.position = value;}}
      
public void MoveObject(int X, int Y, float Velocity)
   {
         //Deberás de crear un Vector3 temporal
         Vector3 Tmp = GetPosition;
         Tmp.x += Vector3.right * (X*Velocity);
         Tmp.y += Vector3.up* (Y*Velocity);
         SetPosition = Tmp;
   }

}
 

Etiquetas: