Noticias

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

ayuda con un script de gravedad y altura

Iniciado por Lucky-chan, Febrero 26, 2017, 08:50:19 PM

Tema anterior - Siguiente tema
Febrero 26, 2017, 08:50:19 PM Ultima modificación: Febrero 27, 2017, 10:24:26 PM por pioj
amm pues 
 
veran mi personaje camina normalmente y todo eso >.< pero si se sube a lugares de mas del eje Y 0 queda flotando hay hasta que deje de presionar la tecla de caminar podrian decirme como arreglar esto?
 
agregare la script que ya he hecho
 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class playermovement : MonoBehaviour { 
    public float speed = 10.0F; //Velocidad de movimiento
    public float rotationSpeed = 100.0F; //Velocidad de rotación
    void Update() {
        transform.Translate(, , Input.GetAxis("Vertical") * speed * Time.deltaTime);
        transform.Rotate(, Input.GetAxis("Horizontal") * rotationSpeed * Time.deltaTime , );
    }
        
}

 
ya c que no es el lugar adecuado para preguntar pero no podía ponerlo en la parte de ayuda 
 
EDITO:
 
lo k quiero es que mi personaje no vuele cada vez que camina :v

Creo que lo solucione, lo que pasa es que cuando sube se 'cambian' los ejes y por eso no avanza sino que da vueltas ya que avanza por el ejeZ la solución es que desde el Rigidbody del player pongas un valor de 1000 en Drag(la 2da variable pública) y solucionado creo que te refieres a eso.... o no?

amm si es eso ;P
 
probare a ver que tal me sale e,e
 
gracias! 

Febrero 26, 2017, 10:11:29 PM #3 Ultima modificación: Febrero 26, 2017, 10:12:08 PM por lightbug
Hola, primero nunca vi a nadie poner "Aiuda", me duelen los ojos todavia, segundo te falta brindar mas informacion, no sabemos si es un rigidbody o no. Si es un rigidbody olvidate de moverlo por transforms (o translate o lo que sea) usa mas vale addforce o velocity. Para arrancar esta bien pero lo ideal es usar un charactercontroller.
 
Suponiendo que tenes un rigidbody, queda flotando, otra vez porque con los transforms impones la posicion final, una vez que soltas la tecla las fisicas ganan terreno y hacen sus calculos, el transform determina las ultimas transformaciones antes de ser renderizado. Las fisicas determinan los posiciones/rotaciones que seran pasadas al transform.

Cita de: lightbug date=1488143489Hola, primero nunca vi a nadie poner "Aiuda", me duelen los ojos todavia.
   


Jajajajaja...
 
Cita de: lightbug date=1488143489No sabemos si es un rigidbody o no. Si es un rigidbody olvidate de moverlo por transforms (o translate o lo que sea) usa mas vale addforce o velocity. Para arrancar esta bien pero lo ideal es usar un charactercontroller.
   


En un proyecto(el de las pijamas) de Unity lo que usan para mover al player es rigidbody.moveposition y recién me entero que el charactercontroller sustituye al rigidbody.. creo, por lo que lei el rigidbody se usa para fisicas más realistas y el charactercontroller para algo 'irreal' .
 
 

Cita de: ytinU date=1488144589Jajajajaja...
   
   
      En un proyecto(el de las pijamas) de Unity lo que usan para mover al player es rigidbody.moveposition y recién me entero que el charactercontroller sustituye al rigidbody.. creo, por lo que lei el rigidbody se usa para fisicas más realistas y el charactercontroller para algo 'irreal' .
   
   
       
   


Claro rigidbody.movePosition es como un analogo al Translate "mas o menos". Para mi usar rigidbody en personajes es un terrible error, a la larga te das cuenta de esto, si te fijas en tutoriales e incluso en libros muy conocidos lo usan, pero en los juegos ni lo usan por varios motivos/problemas (rampas, escalones, irregularidades del terreno, etc). ES comun pensar que un player es un rigidbody porque uno lo asocia a la realidad pero los juegos no deben ser reales, el jugador debe estar super controlado, igual podes darle esos efectos reales que tiene cualquier rigidbody dinamico con las ventajas del character Controller. Claro que utiliza fisicas para la deteccion, tambien es mas heavy, pero el beneficio justifica el costo.

Cita de: ytinU date=1488144589En un proyecto(el de las pijamas) de Unity lo que usan para mover al player es rigidbody.moveposition y recién me entero que el charactercontroller sustituye al rigidbody.. creo, por lo que lei el rigidbody se usa para fisicas más realistas y el charactercontroller para algo 'irreal' .
   


Hola @ytinU
 
En teoria el rigidbody es para objetos no animados que se mueven por fuerzas externas al propio objeto, por mencionar un ejemplo muy utilizado podria ser un proyectil, y el charactercontroller es para objetos animados como puede ser un personaje.
 
Tanto el rigidbody como el charactercontroller tienen un comportamiento realista, pero cada uno en su tema. Y los dos utilizan fisicas, solo que el rigidbody para el tema fuerzas y el charactercontroller para el tema detecciones (es un componente que hereda de collider).
 
P.D. el charactercontroller tambien tiene su funcion Move.
 
Un saludo

Cita de: lightbug date=1488145669Claro rigidbody.movePosition es como un analogo al Translate "mas o menos". Para mi usar rigidbody en personajes es un terrible error, a la larga te das cuenta de esto, si te fijas en tutoriales e incluso en libros muy conocidos lo usan, pero en los juegos ni lo usan por varios motivos/problemas (rampas, escalones, irregularidades del terreno, etc). ES comun pensar que un player es un rigidbody porque uno lo asocia a la realidad pero los juegos no deben ser reales, el jugador debe estar super controlado, igual podes darle esos efectos reales que tiene cualquier rigidbody dinamico con las ventajas del character Controller. Claro que utiliza fisicas para la deteccion, tambien es mas heavy, pero el beneficio justifica el costo.
   


 
 
Cita de: Arthure date=1488145782Hola @ytinU
   
   
      En teoria el rigidbody es para objetos no animados que se mueven por fuerzas externas al propio objeto, por mencionar un ejemplo muy utilizado podria ser un proyectil, y el charactercontroller es para objetos animados como puede ser un personaje.
   
   
      Tanto el rigidbody como el charactercontroller tienen un comportamiento realista, pero cada uno en su tema. Y los dos utilizan fisicas, solo que el rigidbody para el tema fuerzas y el charactercontroller para el tema detecciones (es un componente que hereda de collider).
   
   
      P.D. el charactercontroller tambien tiene su funcion Move.
   
   
      Un saludo
   


Ahh.. Muchas gracias me quedo mucho más claro :D.

Febrero 26, 2017, 11:16:26 PM #8 Ultima modificación: Febrero 26, 2017, 11:59:21 PM por Lucky-chan
ok entonces en lugar de usar un rigid body uso un character controller? :U
 

 
Cita de: lightbug date=1488143489Hola, primero nunca vi a nadie poner "Aiuda", me duelen los ojos todavia, segundo te falta brindar mas informacion, no sabemos si es un rigidbody o no. Si es un rigidbody olvidate de moverlo por transforms (o translate o lo que sea) usa mas vale addforce o velocity. Para arrancar esta bien pero lo ideal es usar un charactercontroller.
   
   
      Suponiendo que tenes un rigidbody, queda flotando, otra vez porque con los transforms impones la posicion final, una vez que soltas la tecla las fisicas ganan terreno y hacen sus calculos, el transform determina las ultimas transformaciones antes de ser renderizado. Las fisicas determinan los posiciones/rotaciones que seran pasadas al transform.
   


amm ok
 
use el chara controller... y sigue sucediendo lo mismo (x supuesto que quite el rigid body vdd :P)
 
 
 

Febrero 27, 2017, 12:01:12 AM #9 Ultima modificación: Febrero 27, 2017, 12:02:11 AM por lightbug
PAra tener un comportamiento natural o real con el CC tenes que sumar todas las "fuerzas" que sufre el gameObject, tambien la gravedad, hay una funcion que se llama "Simple" que es como "Move" pero te agrega gravedad automaticamente, no te recomiendo usarla, perdes control. Mira esto deberia ser un characterController super ultra basico:
 

using UnityEngine;
using System.Collections;
public class Player_Movements : Monobehaviour {
private float walkSpeed;
private float jumpFactor;
private Vector3 moveVector;
private Vector3 vertical;   
private CharacterController controller;
void Start()
{
   walkSpeed = 4;
   jumpFactor = 5;
   vertical = Physics.gravity;
   controller = GetComponent<CharacterController> ();
}
void Update () {
   
   moveVector = (transform.forward * Input.GetAxisRaw ("Vertical") +
      transform.right * Input.GetAxisRaw ("Horizontal"))
      * walkSpeed * Time.unscaledDeltaTime;
 
   if (!controller.isGrounded)
      vertical += Physics.gravity * Time.unscaledDeltaTime;
   else       
      vertical = 2 * Physics.gravity * Time.unscaledDeltaTime;          
   controller.Move (moveVector + (vertical * Time.unscaledDeltaTime));   
}

}

 
Borre un monton de cosas de un script viejo asi que no se si anda tal cual, pero la idea es fabricarte la gravedad(vertical) y tus movimientos horizontales tambien. POr eso lo que decia arriba que te permite controlar al 100% el personaje.
 
EDIT:
 
tambien hubiera ayudado que subas el codigo, asi adivinando no te podemos decir que estas haciendo mal

Febrero 27, 2017, 12:53:05 AM #10 Ultima modificación: Febrero 27, 2017, 10:25:39 PM por pioj
Cita de: lightbug date=1488150072PAra tener un comportamiento natural o real con el CC tenes que sumar todas las "fuerzas" que sufre el gameObject, tambien la gravedad, hay una funcion que se llama "Simple" que es como "Move" pero te agrega gravedad automaticamente, no te recomiendo usarla, perdes control. Mira esto deberia ser un characterController super ultra basico:
   
   

using UnityEngine;
using System.Collections;
public class Player_Movements : Monobehaviour {
private float walkSpeed;
private float jumpFactor;
private Vector3 moveVector;
private Vector3 vertical;   
private CharacterController controller;
void Start()
{
   walkSpeed = 4;
   jumpFactor = 5;
   vertical = Physics.gravity;
   controller = GetComponent<CharacterController> ();
}
void Update () {
   
   moveVector = (transform.forward * Input.GetAxisRaw ("Vertical") +
      transform.right * Input.GetAxisRaw ("Horizontal"))
      * walkSpeed * Time.unscaledDeltaTime;
 
   if (!controller.isGrounded)
      vertical += Physics.gravity * Time.unscaledDeltaTime;
   else       
      vertical = 2 * Physics.gravity * Time.unscaledDeltaTime;          
   controller.Move (moveVector + (vertical * Time.unscaledDeltaTime));   
}

}

   
      Borre un monton de cosas de un script viejo asi que no se si anda tal cual, pero la idea es fabricarte la gravedad(vertical) y tus movimientos horizontales tambien. POr eso lo que decia arriba que te permite controlar al 100% el personaje.
   
   
      EDIT:
   
   
      tambien hubiera ayudado que subas el codigo, asi adivinando no te podemos decir que estas haciendo mal
   


muy importante ese detalle :u 
 
esta es la script que ya había hecho
 

    public float speed = 10.0F; //Velocidad de movimiento
    public float rotationSpeed = 100.0F; //Velocidad de rotación
    void fixedupdate()     {  }
    void Update() {
        transform.Translate(, , Input.GetAxis("Vertical") * speed * Time.deltaTime);
        transform.Rotate(, Input.GetAxis("Horizontal") * rotationSpeed * Time.deltaTime , );
    }
  }

 
 

Etiquetas: