Come faccio a far scivolare il mio personaggio verso il basso su pendii inclinati?


9

Attualmente sto lavorando al movimento del mio personaggio in Unity3D . Sono riuscito a farlo spostare relativamente al cursore del mouse. Ho impostato un limite di pendenza di 45 °, che non consente al personaggio di scalare le montagne con gradi più alti. Ma può ancora saltarli su.

Come riesco a farlo scivolare di nuovo giù quando salta in luoghi con pendenza troppo alta?

Grazie in anticipo.

modifica: frammento di codice del mio movimento di base. utilizzando UnityEngine; utilizzando 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);
    }
}

Hai bisogno di ulteriori informazioni: stai usando la fisica? Queste piste utilizzano il sistema del terreno o qualcos'altro? Quali componenti controllano il tuo personaggio? È un gioco 2D o 3D?
Kylotan,

Vuoi dire scivolo quando il giocatore tenta di saltare o quando completa un salto e colpisce la pendenza?
tyjkenn,

@tyjkenn intendo quando completa il salto. Come in Super Mario 64. Quando atterra a terra, e questa terra è troppo angolata, dovrebbe scivolare verso il basso fino a un punto in cui l'angolo è uguale al limite di pendenza.
keinabel,

@Kylotan, sono un principiante di Unity. Quindi, provo a dare una risposta il meglio possibile. Ho creato un personaggio con il controller del personaggio - nessun corpo rigido. L'ho fatto muovere quando viene premuto un tasto e l'ho fatto camminare relativamente al cursore. Ho creato un terreno e ho usato il pulsante (oh mio, questo deve sembrare stupido) per creare delle montagne. Questo sarà un gioco 3D con aspetto e stile della fotocamera come WarCraft III.
keinabel,

Risposte:


1

La tua frenata quando il terreno viene colpito è sbagliata, semplicemente interrompi il movimento verticale, ma è così che funziona un colpo al suolo quando il terreno è piano.

Quello che dovresti fare è proiettare moveDirectionsulla superficie colpita, che ti darà il nuovo moveDirection. Se la tua libreria ha una funzione per proiettare un vettore su un piano o una superficie che è quello che dovresti usare. Altrimenti dovresti sottrarre moveDirectionla proiezione sulla normale della superficie da moveDirectionse stessa.


ci sono giochi che usano lo stesso comportamento, ad es. skyrim, usa esattamente lo stesso metodo per frenare. il problema è che il personaggio può saltare anche se non si trova su un terreno bandiera.
Ali1S232,

0

controlla prima di saltare se il personaggio è in piedi su un terreno, voglio dire se non è su un pendio ad angolo alto. e lasciare qualsiasi altra cosa al motore fisico.

in base al codice fornito posso vedere dove si trova il problema:

secondo il riferimento allo script di Unity , CharacterController.isGroundedritorna solo se il personaggio sta toccando il suolo. non controlla lo slopelimit. dopo un po 'di ricerche FPSWalkerEnhanced sembra essere qualcosa che risolve il problema.


Beh, io non controllare se il carattere è messo a terra prima di ogni mossa.
keinabel,

@keinabel allora non dovrebbe essere in grado di saltare. l'unico modo in cui può risalire le pendenze usando il salto è se può saltare anche se non è su un terreno solido. Voglio dire, è proprio mentre controlli se non riesce a salire le piste. se non riesce a camminare almeno in una direzione a causa della pendenza, non dovrebbe essere in grado di saltare affatto.
Ali1S232

sarebbe di aiuto se aggiungessi il mio "codice di movimento" al mio post?
keinabel,

Immagino che possa indicare chiaramente il problema.
Ali1S232
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.