¿Cómo hago para que mi personaje se deslice por pendientes inclinadas?

9

Actualmente estoy trabajando en el movimiento de mi personaje en Unity3D . Logré hacer que se moviera relativamente al cursor del mouse. Establecí un límite de pendiente de 45 °, que no permite que el personaje suba las montañas con grados más altos. Pero aún puede saltarlos.

¿Cómo logro hacer que se deslice hacia abajo nuevamente cuando saltó a lugares con pendiente demasiado alta?

Gracias por adelantado.

editar: fragmento de código de mi movimiento básico. usando UnityEngine; usando System.Collections;

public class BasicMovement : MonoBehaviour {
    private float speed;
    private float jumpSpeed;
    private float gravity;
    private float slopeLimit;
    private Vector3 moveDirection = Vector3.zero;

    void Start() 
    {
        PlayerSettings settings = GetComponent<PlayerSettings>();
        speed = settings.GetSpeed();
        jumpSpeed = settings.GetJumpSpeed();
        gravity = settings.GetGravity();
        slopeLimit = settings.GetSlopeLimit();
    }

    void Update() {
        CharacterController controller = GetComponent<CharacterController>();
        controller.slopeLimit = slopeLimit;

        if (controller.isGrounded) {
            moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
            moveDirection = transform.TransformDirection(moveDirection);
            moveDirection *= speed;

            if (Input.GetButton("Jump")) {
                moveDirection.y = jumpSpeed;
            }

        }
        moveDirection.y -= gravity * Time.deltaTime;
        controller.Move(moveDirection * Time.deltaTime);
    }
}
keinabel
fuente
Necesita más información: ¿está utilizando la física? ¿Estas pendientes utilizan el sistema de terreno o alguna otra cosa? ¿Qué componente o componentes controlan tu personaje? ¿Es este un juego en 2D o 3D?
Kylotan
¿Te refieres a deslizarte cuando el jugador intenta saltar, o cuando completa un salto y golpea la pendiente?
tyjkenn
@tyjkenn quiero decir cuando completa el salto. Como en Super Mario 64. Cuando aterriza en el suelo, y este terreno tiene un ángulo demasiado alto, debe deslizarse hacia abajo hasta un punto donde el ángulo sea igual al límite de la pendiente.
keinabel
@Kylotan bueno, soy un novato en Unity. Entonces, trato de dar una respuesta lo mejor que puedo. Creé un personaje con el controlador de personaje, sin cuerpo rígido. Lo hice mover cuando se presiona una tecla y lo hice caminar relativamente hacia el cursor. Creé un terreno y usé el botón (oh, esto tiene que sonar estúpido) para crear algunas montañas. Este será un juego en 3D con apariencia y estilo de cámara como WarCraft III.
keinabel

Respuestas:

1

Su frenado cuando se golpea el suelo es incorrecto, simplemente detiene el movimiento vertical, pero así es como funciona un golpe de suelo cuando el suelo es plano.

Lo que debe hacer es proyectar moveDirectionen la superficie que se golpea, eso le dará lo nuevo moveDirection. Si su biblioteca tiene una función para proyectar un vector en un plano o superficie, eso es lo que debe usar. Si no, debe restar moveDirectionla proyección de la superficie normal de moveDirectionsí misma.

aaaaaaaaaaaa
fuente
hay juegos que usan el mismo comportamiento, por ejemplo. Skyrim, use exactamente el mismo método para frenar. El problema es que el personaje puede saltar incluso si no está en un terreno de bandera.
Ali1S232
0

solo verifique antes de saltar si el personaje está parado en el suelo, es decir, si no está en una pendiente elevada. y dejar cualquier otra cosa al motor de física.

Según el código que proporcionó, puedo ver dónde está el problema:

de acuerdo con la referencia del script Unity , CharacterController.isGroundedsolo regresa si el personaje toca el suelo. no comprueba el slopelimit. después de buscar un poco, FPSWalkerEnhanced parece ser algo que resuelve su problema.

Ali1S232
fuente
Bueno, yo no comprobar si el personaje está conectado a tierra antes de cada movimiento.
keinabel
@keinabel, entonces no debería poder saltar. la única forma en que puede subir las laderas usando el salto es si puede saltar incluso si no está en tierra firme. Quiero decir, es justo cuando compruebas si él no puede subir las pistas. Si no puede caminar al menos en una dirección debido a la pendiente, no debería poder saltar en absoluto.
Ali1S232
¿ayudaría si agrego mi 'código de movimiento' a mi publicación?
keinabel
Supongo que podría señalar directamente el problema.
Ali1S232