Jak sprawić, by moja postać zjeżdżała ze zboczy o wysokich kątach?

9

Obecnie pracuję nad ruchem mojej postaci w Unity3D . Udało mi się zmusić go do przesunięcia się względem kursora myszy. Ustawiłem granicę nachylenia 45 °, która nie pozwala postaci chodzić po górach z wyższymi stopniami. Ale wciąż może je podskoczyć.

Jak mogę sprawić, by znów zsunął się, gdy skakał w miejsca o zbyt dużym nachyleniu?

Z góry dziękuję.

edit: Fragment kodu mojego podstawowego ruchu. 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
źródło
Potrzebujesz więcej informacji: czy korzystasz z fizyki? Czy te stoki korzystają z systemu terenu, czy czegoś innego? Jaki komponent lub komponenty kontrolują twoją postać? Czy to jest gra 2D czy 3D?
Kylotan,
Czy masz na myśli poślizg, gdy gracz próbuje skoczyć, czy kiedy ukończy on skok i uderzy w zbocze?
tyjkenn
@tyjkenn Mam na myśli, kiedy ukończy skok. Jak w Super Mario 64. Kiedy wyląduje na ziemi, a ta ziemia jest zbyt wysoko nachylona, ​​powinien zjechać w dół do punktu, w którym kąt jest równy granicy nachylenia.
keinabel
@ Kylotan, jestem całkiem nowy dla Unity. Staram się więc udzielić możliwie najlepszej odpowiedzi. Stworzyłem postać z kontrolerem postaci - bez sztywnego ciała. Zmusiłem go do ruchu po naciśnięciu klawisza i zmusiłem go, by podszedł do kursora. Stworzyłem teren i użyłem przycisku (och, to musi brzmieć głupio), aby stworzyć góry. Będzie to gra 3D o wyglądzie i stylu kamery, jak WarCraft III.
keinabel

Odpowiedzi:

1

Hamowanie po uderzeniu w ziemię jest nieprawidłowe, po prostu zatrzymujesz ruch pionowy, ale tak działa uderzenie w ziemię, gdy ziemia jest płaska.

Co powinieneś zrobić, to rzutować moveDirectionna uderzoną powierzchnię, która da ci nową moveDirection. Jeśli twoja biblioteka ma funkcję rzutowania wektora na płaszczyznę lub powierzchnię, to właśnie powinieneś użyć. Jeśli nie, należy odjąć moveDirectionrzut na normalną powierzchnię od moveDirectionsiebie.

aaaaaaaaaaaa
źródło
istnieją gry, które zachowują się tak samo, np. skyrim, użyj dokładnie tej samej metody hamowania. Problem polega na tym, że postać może skakać, nawet jeśli nie znajduje się na ziemi pod flagą.
Ali1S232,
0

po prostu sprawdź przed skokiem, czy postać stoi na ziemi, to znaczy, jeśli nie znajduje się na pochyłym zboczu. i wszystko inne pozostaw silnikowi fizyki.

na podstawie podanego przez ciebie kodu widzę, gdzie jest problem:

według Unity odniesienia skryptu , CharacterController.isGroundedwraca tylko jeśli postać jest dotykania ziemi. nie sprawdza slopelimit. po krótkich poszukiwaniach FPSWalkerEnhanced wydaje się być czymś, co rozwiązuje problem.

Ali1S232
źródło
Cóż, ja nie sprawdzić, czy znak jest uziemiony przed każdym ruchem.
keinabel
@keinabel to nie powinien być w stanie skakać. jedynym sposobem, w jaki może poruszać się po zboczach za pomocą skoków, jest to, że potrafi skakać, nawet jeśli nie jest na twardym podłożu. Mam na myśli to, że sprawdzasz, czy nie może chodzić po zboczach. jeśli nie może chodzić w co najmniej jednym kierunku ze względu na zbocze, nie powinien być w stanie w ogóle skoczyć.
Ali1S232,
czy to pomogłoby, jeśli dodam mój „kod ruchu” do mojego postu?
keinabel
Myślę, że mógłbym wprost wskazać na problem.
Ali1S232,