En este momento estás viendo Cómo moverse y saltar en Unity

 – Unity

Cómo moverse y saltar en Unity – Unity

Cómo moverse y saltar en Unity

– UnityAssets3Free

bienvenido , por aqui jorge y esta vez os traigo
esta nueva pregunta

Estoy haciendo un juego de disparos en primera persona y actualmente estoy trabajando en saltar. Estoy usando la animación para saltar, ya que he luchado con la gravedad antes. Sin embargo, mi problema es que mi jugador no puede moverse si mi secuencia de comandos de salto está adjunta al jugador y al movimiento. Sin embargo, sé que no tiene nada que ver con los scripts ya que ambos funcionan pero no simultáneamente.

Creo que tiene algo que ver con la animación. Hay 3 partes en la animación, Base, Correr y Saltar. Si el jugador se está moviendo, la animación de carrera está activa, si el jugador ha presionado la barra espaciadora, la animación de salto está activa. Se da prioridad a la animación de salto.

¿Hay alguna razón por la que el jugador no pueda moverse y saltar?

Aquí están los códigos y el controlador de animación:

animación y salto

public class Jump : MonoBehaviour

    public bool run;
    public float speed;
    public GameObject player;
    public Animator dgbanim;
    public bool jump;
    public float rejump;
    public float rejumper;
    // Start is called before the first frame update
    void Start()
    
        speed = 50;
        run = false;
        jump = false;
        rejumper = 0;
        rejump = 0;

    

    // Update is called once per frame
    void Update()
    

    private void OnCollisionEnter(Collision collision)
    
        //if (collision.gameObject.tag != "EnemyBullets")  jump = true; rejump = 0; 
        if (collision.gameObject.tag != "EnemyBullets")  jump = false; 

    

Movimienot

public class Movement : MonoBehaviour

    public GameObject player;
    public float speed;
    // Start is called before the first frame update
    void Start()
    
        speed = 50;
    

    // Update is called once per frame
    void Update()
    
        player.transform.Translate(Input.GetAxis("Horizontal") * speed * Time.deltaTime, 0, Input.GetAxis("Vertical") * speed * Time.deltaTime);
    

2 respuestas 2

Parece que su animador ha marcado ‘aplicar movimiento raíz’ y obtiene movimiento de animaciones en lugar de código, intente desmarcarlo.

La animación puede controlar algunas propiedades de un GameObject, como la posición. Si intenta editar la posición de un GameObject en una secuencia de comandos, pero una animación controla la posición, la animación sobrescribirá los cambios de posición de la secuencia de comandos.

Para ver si este es el problema, puede abrir la ventana de animación y seleccionar su reproductor. Si la posición del jugador (en el inspector) es roja, entonces la animación lo está controlando.

Conozco 2 formas de arreglar esto:

Método 1 (no recomendado): edite la animación para mover el hueso de la raíz en lugar del jugador

La mayoría de los modelos de personajes tienen un GameObject llamado «Armadura» o «raíz» como niño. La posición de tu personaje no debe estar en la animación. Si necesita mover el personaje hacia arriba en su animación, puede animar GameObject «Armadura» o «raíz». En la captura de pantalla a continuación, observe que en la ventana de animación no ve «PlayerPref: position», sino «Armadura: position». Esto permite que mi script de movimiento mueva PlayerPref sin que la animación sobrescriba la posición.

Método 2 (recomendado): Usa el motor de física para saltar

En tu animación, no hagas saltar al jugador. En su lugar, haz que el jugador «salte en su lugar», es decir, tal vez mueva los brazos hacia arriba como si estuviera saltando, pero en realidad no se mueva hacia arriba. Al igual que con el Método 1, su animación no debe definir la posición del jugador. La forma más fácil de hacer esto es hacer clic en «jugador: posición» en la ventana de animación y presionar eliminar.

Agrega un Rigidbody a tu personaje. En tu guión:

private Rigidbody rig;
...
void Start()
    rig = GetComponent<Rigidbody>();
...

En su secuencia de comandos, cuando activa el salto, puede agregar rig.AddForce(jumpPower * transform.up);. Esto hará que el sistema de física maneje el salto. Si el jugador está saltando pero hay algo arriba, el motor de física detendrá al jugador. Con animación, el jugador saltará a través de cualquier obstáculo.

nota: si aun no se resuelve tu pregunta por favor dejar un comentario y pronto lo podremos de nuevo , muchas gracias

sin mas,espero que te halla servido

Deja una respuesta