Noticias

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

¿Por que se mueve diferente al tutorial?

Iniciado por Arsen, Abril 30, 2017, 01:30:48 AM

Tema anterior - Siguiente tema
Abril 30, 2017, 01:30:48 AM Ultima modificación: Abril 30, 2017, 01:09:33 PM por pioj
Hola buenas tardes, me encuentro realizando los tutoriales de la pagina ofical de Unity, (Vídeo del tutorial en el segundo de referencia) (Link al tutorial completo)
Mi problema es que inserto el código tal y como me aparece en la pagina (Adaptado para unity 5):
 

using UnityEngine;
using System.Collections;
public class Mover : MonoBehaviour
{
    public float speed;
    void Start ()
    {
         rb = GetComponent<Rigidbody>();
         rb.velocity = transform.forward * speed;
    }
}


Pero no obtengo los mismos resultados, mi objeto de láser tiene otro tipo de movimiento,
como si estuviese en bajos frames:(Vídeo a mis resultados)
De antemano muchas gracias.

 


Que pasaria si haces esto
 

rb.velocity = transform.forward * speed;

 
 
 
------>
 
 
 

rb.velocity = transform.forward * speed * Time.deltaTime;

Abril 30, 2017, 07:44:46 AM #2 Ultima modificación: Abril 30, 2017, 07:46:49 AM por lightbug
 
 
Cita de: Gastonspas date=1493530924Que pasaria si haces esto
   
   

rb.velocity = transform.forward * speed;

   
       
   
   
      ------>
   
   
       
   
   

rb.velocity = transform.forward * speed * Time.deltaTime;



Nada, solo la haria mucho mas pequeña porque el codigo no es dependiente del tiempo y él lo usa en Start
 
@Arsen postea tus opciones de Physics, estan en edit/projects/Physics o algo parecido. Quizas los steps esten mal?

Mayo 01, 2017, 08:40:43 AM #3 Ultima modificación: Mayo 01, 2017, 08:43:23 AM por Arsen
@Gastonspas: Si coloco Time.deltaTime, el láser no se mueve.
 
@lightbug, muy bien estos son los parámetros, no se si tenga que configurar algo, pero desde que instale unity no he modificado nada de allí :

 
 

Tambien puedes ponerlo de esta forma: transform.position += Vector3.up * speed * Time.delta.time
 
puedes cambiar el Vector3 por Vector3.right, Vector3.left o Vector3.down para cambiar la direccion

Cita de: Moand date=1493644570Tambien puedes ponerlo de esta forma: transform.position += Vector3.up * speed * Time.delta.time
   
   
      puedes cambiar el Vector3 por Vector3.right, Vector3.left o Vector3.down para cambiar la direccion
   


Si es en el Update si, es mas yo no usaria jamas un rigidbody con velocity para algo tan simple como mover algo para adelante, usaria puros transforms como decis y el rigidbody lo haria kinematico.
 
@Arsen podes subir mas info, el rigidbody, el transform completo (no se si podria ser algo con las escalas ...?). Las opciones de Physics las tengo igual.
 
En fin, la verdad no tengo ni idea porque se le mueve asi, pense que habia alguna opcion de steps de simulacion o algun threshold de algo.

Mayo 02, 2017, 06:31:33 AM #6 Ultima modificación: Mayo 02, 2017, 08:43:21 AM por pioj
Muy interesante.  
 
@Moand Use la forma que me compartiste, solo que cambie Up por Forward, y ¡funciono! con Up el problema que me daba era que al estar el eje Y arriba las figuras desaparecían. Al final el script quedo de esta forma:
 
 

{
    public float speed;
    void Update()
    {
        transform.position += Vector3.forward * speed * Time.deltaTime;
    }
}

 
@lightbug Mas adelante en el tutorial, se menciona de usar el mismo código que mueve el láser, para mover los asteroides, pero con los modelos de los asteroides el problema no existió, me dio curiosidad y realice un ejercicio donde colocaba el script para distintos objetos.
Parece ser que el problema solo existe para los Quads.
anexo el vídeo donde de izquierda a derecha se encuentra:
Quad-Planar-Esfera-nave(jugador no se mueve) sobre la nave esta el laser hecho por un Quad-nave como objeto-asteroide como objeto-Cubo.

Como verán los únicos que me dan problemas son los quads, anexo las características de los 2 Quads, y la esfera. No se si el problema se deba a algún cambio con las funciones de unity del tutorial al mio.
En la imagen se encuentran de izquiereda a derecha:
Esfera-Láser-Quad.
Muchas gracias por su ayuda, ¡Saludos!
 

Lo he probado exactamente como viene en el tutorial y tambien he probado a poner los gameobject como tu los tienes y me funciona perfectamente con velocity.
 
Creo que el problema esta en el Time Scale. Al usar velocity con el time scale reducido me ha dado la sensacion de que el movimiento no era limpio, sin embargo, al usar transform con el time scale reducido no da esa sensacion y eso puede que te haya confundido cuando te di esa posible solucion.
 
Prueba a modificar Edit > Project Settings > Time de esta forma:
 

 
Si no es ese el problema no sabria decirte que mas podria ser.

@Moand Creo que no me di a entender bien, pero cuando me diste la primera posible solución funciono perfectamente, solo cambie Up por Forward por que con Up los objetos se elevaban, no avanzaban.

No hacia falta mencionarlo pero preferí hacerlo por si alguien terminaba en mi publicación buscando alguna solución a algún problema similar. 

¡Muchas gracias de nuevo por tu ayuda! .

@Arsen  gracias a ti, es un placer tratar con personas como tu

Etiquetas: