Comment faire glisser mon personnage sur des pentes à angle élevé?

9

Je travaille actuellement sur le mouvement de mon personnage dans Unity3D . J'ai réussi à le faire bouger relativement au curseur de la souris. J'ai défini une limite de pente de 45 °, ce qui ne permet pas au personnage de gravir les montagnes à des degrés plus élevés. Mais il peut toujours les sauter.

Comment puis-je le faire redescendre quand il a sauté à des endroits avec une pente trop élevée?

Merci d'avance.

edit: extrait de code de mon mouvement de base. en utilisant UnityEngine; using 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
la source
Besoin de plus d'informations: utilisez-vous la physique? Ces pentes utilisent-elles le système de terrain ou autre chose? Quel composant ou composants contrôlent votre personnage? S'agit-il d'un jeu 2D ou 3D?
Kylotan
Voulez-vous dire glisser lorsque le joueur tente de sauter, ou quand il termine un saut et frappe la pente?
tyjkenn
@tyjkenn Je veux dire quand il termine le saut. Comme dans Super Mario 64. Lorsqu'il atterrit sur le sol, et que ce sol est trop haut, il doit glisser jusqu'à un point où l'angle est égal à la pente Limite.
keinabel
@Kylotan bien, je suis un débutant pour Unity. Donc, j'essaie de donner une réponse aussi bonne que possible. J'ai créé un personnage avec le contrôleur de personnage - pas de corps rigide. Je l'ai fait bouger quand une touche est enfoncée et je l'ai fait marcher relativement au curseur. J'ai créé un terrain et utilisé le bouton (oh mon Dieu, cela doit paraître stupide) pour créer des montagnes. Ce sera un jeu 3D avec un look et un style d'appareil photo comme WarCraft III.
keinabel

Réponses:

1

Votre freinage lorsque le sol est touché est incorrect, vous arrêtez simplement le mouvement vertical, mais c'est uniquement ainsi que fonctionne un coup au sol lorsque le sol est plat.

Ce que vous devez faire, c'est projeter moveDirectionsur la surface qui est touchée, cela vous donnera le nouveau moveDirection. Si votre bibliothèque a une fonction pour projeter un vecteur sur un plan ou une surface, c'est ce que vous devez utiliser. Sinon, vous devez soustraire moveDirectionla projection de la normale de la surface à moveDirectionelle-même.

aaaaaaaaaaaa
la source
il existe des jeux qui utilisent le même comportement, par exemple. skyrim, utilisez exactement la même méthode pour le freinage. le problème est que le personnage peut sauter même s'il n'est pas sur un drapeau.
Ali1S232
0

vérifiez juste avant de sauter si le personnage se tient sur un sol, je veux dire s'il n'est pas sur une pente élevée. et laisser quoi que ce soit d'autre au moteur physique.

sur la base du code que vous avez fourni, je peux voir où est le problème:

selon la référence du script Unity , CharacterController.isGroundedne revient que si le personnage touche le sol. il ne vérifie pas la slopelimit. après une petite recherche, FPSWalkerEnhanced semble être quelque chose qui résout votre problème.

Ali1S232
la source
Eh bien, je ne vérifie si le caractère est mis à la terre avant chaque mouvement.
keinabel
@keinabel alors il ne devrait pas être capable de sauter. la seule façon dont il peut gravir les pentes en utilisant le saut est s'il peut sauter même s'il n'est pas sur un sol solide. Je veux dire, c'est juste comme vous vérifiez s'il ne peut pas monter les pentes. s'il ne peut pas marcher dans au moins une direction en raison de la pente, il ne devrait pas du tout pouvoir sauter.
Ali1S232
cela aiderait-il, si j'ajoute mon «code de mouvement» à mon message?
keinabel
Je suppose que je pourrais pointer directement le problème.
Ali1S232