Como faço para que meu personagem deslize pelas encostas altas?

9

Atualmente, estou trabalhando no movimento do meu personagem no Unity3D . Consegui fazê-lo mover-se relativamente ao cursor do mouse. Defino um limite de inclinação de 45 °, que não permite que o personagem suba as montanhas em graus mais altos. Mas ele ainda pode pular eles.

Como faço para fazê-lo deslizar novamente quando ele pulou em lugares com inclinação muito alta?

Desde já, obrigado.

edit: snippet de código do meu movimento básico. using 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
fonte
Precisa de mais informações: você está usando a física? Essas pistas estão usando o sistema do terreno ou algo mais? Que componente ou componentes estão controlando seu personagem? Este é um jogo 2D ou 3D?
Kylotan
Você quer dizer deslizar quando o jogador tenta pular, ou quando ele completa um salto e atinge a ladeira?
tyjkenn
@tyjkenn Quero dizer quando ele completa o salto. Como em Super Mario 64. Quando ele cai no chão, e esse terreno é muito alto, ele deve deslizar para um ponto em que o ângulo seja igual ao decliveLimit.
21412 Keinabel
@ Kylotan bem, eu sou um novato na Unity. Então, eu tento dar uma resposta da melhor maneira possível. Eu criei um personagem com o controlador de personagem - sem corpo rígido. Eu o fiz se mover quando uma tecla é pressionada e o fiz caminhar relativamente ao cursor. Criei um terreno e usei o botão (oh meu, isso deve parecer estúpido) para criar algumas montanhas. Este será um jogo em 3D com aparência e estilo de câmera como o WarCraft III.
21412 Keinabel

Respostas:

1

Você está travando quando o solo é atingido está errado, você simplesmente para o movimento vertical, mas é assim que um golpe no solo funciona quando o solo é plano.

O que você deve fazer é projetar moveDirectionna superfície atingida, que lhe dará o novo moveDirection. Se sua biblioteca tiver uma função para projetar um vetor em um plano ou superfície, é isso que você deve usar. Caso contrário, você deve subtrair moveDirectiona projeção da superfície normal dela moveDirectionmesma.

aaaaaaaaaaaa
fonte
existem jogos que usam o mesmo comportamento, por exemplo. skyrim, use exatamente o mesmo método para frear. o problema é que o personagem pode pular mesmo que não esteja no campo de bandeira.
Ali1S232
0

basta verificar antes de pular se o personagem está de pé no chão, quero dizer, se ele não está em uma inclinação alta. e deixar qualquer outra coisa para o mecanismo de física.

com base no código que você forneceu, posso ver onde está o problema:

de acordo com a referência de script do Unity , CharacterController.isGroundedsó retornará se o personagem estiver tocando o chão. não verifica se há slopelimit. depois de uma pequena pesquisa, o FPSWalkerEnhanced parece ser algo que resolve o seu problema.

Ali1S232
fonte
Bem, eu não verificar se o personagem é aterrado antes de cada movimento.
keinabel
@keinabel, então ele não deveria ser capaz de pular. a única maneira de subir as encostas usando salto é se ele pode pular mesmo que não esteja em terreno sólido. Quero dizer, é como você verifica se ele não consegue subir as encostas. se ele não puder andar em pelo menos uma direção devido à inclinação, ele não deve ser capaz de pular.
Ali1S232
ajudaria se eu adicionasse meu 'código de movimento' à minha postagem?
21412 Keinabel
Eu acho que poderia apontar diretamente para o problema.
Ali1S232