Noticias

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

Eliminar efecto deslizante en character controller

Iniciado por geniusbat, Enero 24, 2017, 01:18:35 AM

Tema anterior - Siguiente tema
Hola buenas, siempre he visto una pequeña tonteria que me saca un poco de vicio, y es que cuando first person character controller se mueve, en vez de frenarse en seco se frena como si se deslizara. ¿Hay alguna forma de quitarlo? Uso unity 5.
 
Gracias de antemano

Enero 24, 2017, 01:56:51 AM #1 Ultima modificación: Enero 24, 2017, 02:03:21 AM por lightbug
Hola, podrias subir el script completo (o los script) porque no lo tengo a mano y jamas en la vida usaria ese first person de Unity jajaj.
 
Podrias hacerte el tuyo muy facilmente si queres que solo se mueva "en seco" podes arrancar asi:
 
Pones el CharacterController (componente) y le pones un scirpt asi:
 

float walkSpeed = 4;
void Update()
{
moveVector = (transform.forward * Input.GetAxisRaw ("Vertical") +
      transform.right * Input.GetAxisRaw ("Horizontal"))
      * walkSpeed * Time.deltaTime;
controller.Move (moveVector);   
}

 
 

Cita de: lightbug date=1485219411Hola, podrias subir el script completo (o los script) porque no lo tengo a mano y jamas en la vida usaria ese first person de Unity jajaj.
   
   
      Podrias hacerte el tuyo muy facilmente si queres que solo se mueva "en seco" podes arrancar asi:
   
   
      Pones el CharacterController (componente) y le pones un scirpt asi:
   
   

float walkSpeed = 4;
void Update()
{
moveVector = (transform.forward * Input.GetAxisRaw ("Vertical") +
      transform.right * Input.GetAxisRaw ("Horizontal"))
      * walkSpeed * Time.deltaTime;
controller.Move (moveVector);   
}

   
       
   


Eso donde lo pongo? No es que sea muy bueno en programación jajaj. ¿Qué me recomiendas para crear el character controller desde cero?

Hola, ya en internet hace años hay una tendencia que es la de "Jamas usar el firstPersonController", todo el que comienza en Unity va a la carpeta y arrastra el firstpersoncontroller, despues de un tiempo se da cuenta que esto y/o aquello no anda como quiere y sale a buscar ayuda en los foros, y el ciclo sigue y sigue y seguira (probablemente) por años.
 
--> Te recomiendo hacerlo desde cero si es que estas preocupado por crear un juego a futuro, si lo que necesitas es solo algo para moverte y solo te interesa ese tipo de apps de arquitectura y visualizacion de interiores quizas puedas modificarlo, pero encontrar justo donde está lo que queres modificar te puede llevar tiempo.
 
Lo que puse arriba lo metes dentro de la clase creada cuando creas un script nuevo. y le agregas el componente a un gameObject, el codigo ese esta puesto "bien rapidito", falta definir algunas cosas. PRoba el siguiente codigo a ver si es mas o menos lo que queres.
 

[RequiereComponent(typeof(CharacterController))]
public class ... //la clase que se creo del nuevo script
{
float walkSpeed = 4;
CharacterController controller;
Vector3 moveVector;
Vector3 vertical;
void Start()
{
   controller = GetComponent<CharacterController>();
}
void Update()
{
   moveVector = (transform.forward * Input.GetAxisRaw ("Vertical") +
      transform.right * Input.GetAxisRaw ("Horizontal"))
      * walkSpeed * Time.deltaTime;
        //gravedad
        if (!controller.isGrounded)
      vertical += Physics.gravity * Time.deltaTime;
   else         
      vertical = 2 * Physics.gravity * Time.deltaTime;
      
             
   controller.Move (moveVector + vertical);
}
 
}

 
 

Cita de: lightbug date=1485298280Hola, ya en internet hace años hay una tendencia que es la de "Jamas usar el firstPersonController", todo el que comienza en Unity va a la carpeta y arrastra el firstpersoncontroller, despues de un tiempo se da cuenta que esto y/o aquello no anda como quiere y sale a buscar ayuda en los foros, y el ciclo sigue y sigue y seguira (probablemente) por años.
   
   
      --> Te recomiendo hacerlo desde cero si es que estas preocupado por crear un juego a futuro, si lo que necesitas es solo algo para moverte y solo te interesa ese tipo de apps de arquitectura y visualizacion de interiores quizas puedas modificarlo, pero encontrar justo donde está lo que queres modificar te puede llevar tiempo.
   
   
      Lo que puse arriba lo metes dentro de la clase creada cuando creas un script nuevo. y le agregas el componente a un gameObject, el codigo ese esta puesto "bien rapidito", falta definir algunas cosas. PRoba el siguiente codigo a ver si es mas o menos lo que queres.
   
   

[RequiereComponent(typeof(CharacterController))]
public class ... //la clase que se creo del nuevo script
{
float walkSpeed = 4;
CharacterController controller;
Vector3 moveVector;
Vector3 vertical;
void Start()
{
   controller = GetComponent<CharacterController>();
}
void Update()
{
   moveVector = (transform.forward * Input.GetAxisRaw ("Vertical") +
      transform.right * Input.GetAxisRaw ("Horizontal"))
      * walkSpeed * Time.deltaTime;
        //gravedad
        if (!controller.isGrounded)
      vertical += Physics.gravity * Time.deltaTime;
   else         
      vertical = 2 * Physics.gravity * Time.deltaTime;
      
             
   controller.Move (moveVector + vertical);
}
 
}

   
       
   


No me funciona el script haha, me pone que tengo que poner el ";" aunque ya esté puesto jajaja.

Cita de: geniusbat date=1485387993No me funciona el script haha, me pone que tengo que poner el ";" aunque ya esté puesto jajaja.
   


Como aunque ya este puesto? Sabes por lo menos que hace el ";", fijate donde te da el error y corregilo. Que haces paso a paso?
 
Otra cosa es que por mas que te haya pasado el script nunca copies y pegues tal cual, mas vale saca ideas del script y adaptalas a vos. Aeso lo escribi asi nomas quizas me comi algun ";" o algo mas.

Hola Geniusbat.

Creo que intentas hacer una azaña casi imposible... programar sin saber programar.

Parece que existe la idea de que se puede hacer un juego con Unity sin saber programar, usando scripts prefabricados de terceros o los que vienen con el propio Unity. Esos scripts vienen muy bien para tareas en concreto, pero rara es la vez que lo usamos sin modificarlos, como te ocurre a tí con el arrastre del controller. Al final, es mas laborioso encontrar un script que te valga que aprender a programar.
 
Te recomiendo que te leas algún libro o tutoriales por internet sobre programación en C#. Si puedes evitar Javascript, mejor. Da una falsa sensación de ser más fácil que C# y a la larga te encontrarás mas limitado. Con que tengas conocimientos básicos, sería un buen momento para hacerte los tutoriales de Unity, que se aprende mucho.
 
De todas formas, creo que tu problema con el arrastre del Character Controller es debido al valor del input del eje vertical. Usando el script que viene con Unity, sin modificarlo, puedes ir a Edit -> Poject Settings -> Input y en el eje Vertical, aumentar el valor de "Gravity", que se encarga de "Frenar" los valores de las teclas cuando sueltas la tecla de avanzar o retroceder, haciendo que se pare en seco. Si lo reduces, conseguirás un efecto de andar sobre hielo. El valor de "Gravity" se mide en metros por segundo. Por defecto, tiene un valor de frenada de 3 metros por segundo.
 
Insisto, te animo que aprendas a programar. Al principio puede parecer dificil, pero enseguida verás que es muy gratificante y podrás sacar juegos comerciales antes de lo que crees.

También nos tienes aquí en la comunidad a los "Coders" para ayudarte con tus dudas. Animo.
 
Espero haberte sido de ayuda. Un saludo.

Etiquetas: