INICIO FORO
Regresar   ForoCoches > Zona General > Electrónica / Informática


  Ayuda Unity  
Respuesta

 
Herramientas
Viejo 25-abr-2019, 17:36   #1
Dake2414
ForoCoches: Miembro
 
Avatar de Dake2414
 
Nov 2016 | 443 Mens.
Lugar: Barcelona

Ibiza

Ayuda Unity

Hola buenas, estoy haciendo un projecto en unity con un compañero y tenemos un problema.
El movimiento del jugador lo realizamos modificando GetComponent<Rigidbody>().velocity y con una corutina, el problema viene que los movimientos no son exactos y poco a poco el personaje se desvía.
Cualquier ayuda es bienvenida. Gracias
Dake2414 está desconectado   Responder Con Cita


Viejo 25-abr-2019, 19:03   #2
heckler_
ForoCoches: Miembro
 
Avatar de heckler_
 
Feb 2012 | 118 Mens.
Asi de memoria, teneis que coger la componente de la dirección del mando, multiplicarlo por un valor normalizador y por el Time.DeltaTime. Después con eso sacais un Vector3 que será con el que se mueva el rigidbody. Mirad en la sección de tutoriales que lo explican seguro.



Saludos
heckler_ está desconectado   Responder Con Cita
Viejo 02-may-2019, 12:19   #3
Icarus
Francotirador
 
Avatar de Icarus
 
Sep 2009 | 1.411 Mens.
Lugar: Galicia

Seat Leon FR

Cita:
Originalmente Escrito por Dake2414 Ver Mensaje
Hola buenas, estoy haciendo un projecto en unity con un compañero y tenemos un problema.
El movimiento del jugador lo realizamos modificando GetComponent<Rigidbody>().velocity y con una corutina, el problema viene que los movimientos no son exactos y poco a poco el personaje se desvía.
Cualquier ayuda es bienvenida. Gracias
¿En qué eje se desvía? ¿En el X? ¿Es en 2D o 3D? ¿Podrías poner la parte del código de la corutina?
Icarus está desconectado   Responder Con Cita


 

 

Viejo 02-may-2019, 13:39   #4
Dake2414
ForoCoches: Miembro
 
Avatar de Dake2414
 
Nov 2016 | 443 Mens.
Lugar: Barcelona

Ibiza

Cita:
Originalmente Escrito por heckler_ Ver Mensaje
Asi de memoria, teneis que coger la componente de la dirección del mando, multiplicarlo por un valor normalizador y por el Time.DeltaTime. Después con eso sacais un Vector3 que será con el que se mueva el rigidbody. Mirad en la sección de tutoriales que lo explican seguro.



Saludos
Hola buenas, gracias por responder. El problema viene de que no queremos que se mueva mientras se presione el botón sino una vez presione el botón se mueva cierta distancia y luego pare, nose si me explico.
Dake2414 está desconectado   Responder Con Cita


 

 

Viejo 02-may-2019, 13:59   #5
Dake2414
ForoCoches: Miembro
 
Avatar de Dake2414
 
Nov 2016 | 443 Mens.
Lugar: Barcelona

Ibiza

Cita:
Originalmente Escrito por Icarus Ver Mensaje
¿En qué eje se desvía? ¿En el X? ¿Es en 2D o 3D? ¿Podrías poner la parte del código de la corutina?
Lo que hago cuando el usuario presiona la tecla derecha es poner la velocidad horizontal (en este caso z) a 2.5 entonces llamo a la Coroutine que tras 0,5 segundos ( se ha desplazado 1,25) pone la velocidad horizontal a 0. El problema es que no es exacto entonces la posición no es exacta y el personaje choca contra el entorno. Cuando pueda pongo el código.
Dake2414 está desconectado   Responder Con Cita
Viejo 02-may-2019, 15:08   #6
Icarus
Francotirador
 
Avatar de Icarus
 
Sep 2009 | 1.411 Mens.
Lugar: Galicia

Seat Leon FR

Cita:
Originalmente Escrito por Dake2414 Ver Mensaje
Lo que hago cuando el usuario presiona la tecla derecha es poner la velocidad horizontal (en este caso z) a 2.5 entonces llamo a la Coroutine que tras 0,5 segundos ( se ha desplazado 1,25) pone la velocidad horizontal a 0. El problema es que no es exacto entonces la posición no es exacta y el personaje choca contra el entorno. Cuando pueda pongo el código.
¿Y no os sería más sencillo que usaseis una distancia fija?

Si estás en X, cada vez que el usuario pulse la tecla avanzará Y distancia hacia donde haya pulsado

No se si me explico

Última edición por Icarus fecha: 02-may-2019 a las 15:11.
Icarus está desconectado   Responder Con Cita
Viejo 02-may-2019, 15:30   #7
Dake2414
ForoCoches: Miembro
 
Avatar de Dake2414
 
Nov 2016 | 443 Mens.
Lugar: Barcelona

Ibiza

Cita:
Originalmente Escrito por Icarus Ver Mensaje
¿Y no os sería más sencillo que usaseis una distancia fija?

Si estás en X, cada vez que el usuario pulse la tecla avanzará Y distancia hacia donde haya pulsado

No se si me explico
Si, eso es lo que queremos pero los métodos que encontramos o teletransportan al personaje o no lo mueven.
Dake2414 está desconectado   Responder Con Cita
Viejo 02-may-2019, 15:53   #8
Icarus
Francotirador
 
Avatar de Icarus
 
Sep 2009 | 1.411 Mens.
Lugar: Galicia

Seat Leon FR

Cita:
Originalmente Escrito por Dake2414 Ver Mensaje
Si, eso es lo que queremos pero los métodos que encontramos o teletransportan al personaje o no lo mueven.
Hay una función que te lo hace, creo que era esta:

MoveTowards(origen, destino, velocidad);

Unity MoveTowards

De todas formas hay varias formas de hacerlo

Icarus está desconectado   Responder Con Cita
Viejo 08-may-2019, 12:20   #9
heckler_
ForoCoches: Miembro
 
Avatar de heckler_
 
Feb 2012 | 118 Mens.
Cita:
Originalmente Escrito por Dake2414 Ver Mensaje
Hola buenas, gracias por responder. El problema viene de que no queremos que se mueva mientras se presione el botón sino una vez presione el botón se mueva cierta distancia y luego pare, nose si me explico.
Para hacer eso podeis implementar una corutina que alimente un valor de desplazamiento durante x segundos.
Saludos
heckler_ está desconectado   Responder Con Cita
Viejo 08-may-2019, 13:08   #10
Navis
ForoCoches: Miembro
 
Avatar de Navis
 
Mar 2015 | 5.805 Mens.

Mazda 3 120 G

Pon tu código y te guiamos por el buen camino. Usar coroutines es una chapuza en el 99% de los casos.
Navis está desconectado   Responder Con Cita
Viejo 08-may-2019, 18:26   #11
Dake2414
ForoCoches: Miembro
 
Avatar de Dake2414
 
Nov 2016 | 443 Mens.
Lugar: Barcelona

Ibiza

Cita:
Originalmente Escrito por Icarus Ver Mensaje
¿En qué eje se desvía? ¿En el X? ¿Es en 2D o 3D? ¿Podrías poner la parte del código de la corutina?
El movimiento horizontal lo tenemos puesto en el eje Z.


Cita:
Originalmente Escrito por Navis Ver Mensaje
Pon tu código y te guiamos por el buen camino. Usar coroutines es una chapuza en el 99% de los casos.

Código:
           

 GetComponent<Rigidbody>().velocity = new Vector3(speed.x, speed.y, horizVel);


if ((http://Input.GetKeyDown(moveL)|| http://Input.GetKey(KeyCode.LeftArrow)) && laneNum >1 && canMove && !isDead){
  canMove = false;
  horizVel = 2.2f;
   laneNum--;
   StartCoroutine(stopSlide());
 }


 if((http://Input.GetKeyDown(moveR) || http://Input.GetKey(KeyCode.RightArrow)) && laneNum <3 && canMove && !isDead){
  canMove = false;
  horizVel = -2.2f;
  laneNum++;
  StartCoroutine(stopSlide());
}

    IEnumerator stopSlide(){
        yield return new WaitForSeconds(.5f);
        horizVel = 0;
        canMove = true;
    }
Dake2414 está desconectado   Responder Con Cita


Respuesta

Regresar   Inicio | ForoCoches > Zona General > Electrónica / Informática

Regresar Amazon.es

    - Electrónica
    - Informática
    - VideoJuegos
    - Libros
    - Bricolaje y Herramientas
Regresar eBay.es

    - Motor
    - Informática y Tablets
    - Móviles y Telefonía
    - VideoJuegos
    - Deportes
Regresar  PCComponentes.com

    - Componentes
    - Periféricos
    - Ordenadores
    - Smartphones
    - Audio/Foto/Video

Regresar  Tiendas Chinas:

    - GearBest
    - BangGood
Herramientas


 [ VERSIÓN MÓVIL ]
Info Legal | Privacidad | Cookies | Notificaciones | Normas de uso | Publicidad | Updates | Stats | Ayuda | Invitaciones | Contacto