Как заставить моего персонажа скользить вниз по наклонным склонам?

9

В настоящее время я работаю над движением моего персонажа в Unity3D . Мне удалось заставить его двигаться относительно курсора мыши. Я установил предел наклона 45 °, который не позволяет персонажу подниматься в горы с более высокими градусами. Но он все еще может подпрыгнуть их.

Как мне удается заставить его снова скользить вниз, когда он прыгает в местах с слишком высоким уклоном?

Заранее спасибо.

редактировать: фрагмент кода моего основного движения. используя UnityEngine; использование 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
источник
Нужна дополнительная информация: вы используете физику? Эти склоны используют систему местности или что-то еще? Какой компонент или компоненты управляют вашим персонажем? Это 2D или 3D игра?
Kylotan
Вы имеете в виду слайд, когда игрок пытается прыгнуть или когда он совершает прыжок и попадает на склон?
Tyjkenn
@tyjkenn Я имею в виду, когда он заканчивает прыжок. Как и в Super Mario 64. Когда он приземляется на землю, а эта земля слишком наклонная, он должен скользить вниз до точки, где угол равен наклону.
keinabel
@ Килотан, я новичок в Unity. Поэтому я стараюсь дать ответ как можно лучше. Я создал персонажа с контроллером персонажа - без твердого тела. Я заставил его двигаться, когда нажата клавиша, и заставил его идти относительно курсора. Я создал ландшафт и использовал кнопку (о, это звучит глупо), чтобы создать горы. Это будет 3D-игра с внешним видом и стилем камеры, как WarCraft III.
Кейнабель

Ответы:

1

Ваше торможение при ударе о землю - это неправильно, вы просто прекращаете вертикальное движение, но это только то, как удар по земле работает, когда земля ровная.

То, что вы должны сделать, это проецировать moveDirectionна поверхность, которая поражена, которая даст вам новое moveDirection. Если в вашей библиотеке есть функция для проекции вектора на плоскость или поверхность, это то, что вам следует использовать. Если нет, вы должны вычесть moveDirectionпроекцию на нормаль поверхности от moveDirectionсебя.

AAAAAAAAAAAA
источник
Есть игры, которые используют то же поведение, например. Скайрим, используйте точно такой же метод для торможения. проблема в том, что персонаж может прыгать, даже если он не находится на фоне флага.
Ali1S232
0

просто проверьте перед прыжком, стоит ли персонаж на земле, я имею в виду, если он не на высоком наклонном склоне. и оставьте что-нибудь еще физическому движку.

на основе предоставленного вами кода я вижу, в чем проблема:

согласно ссылке на скрипт Unity , CharacterController.isGroundedвозвращается только если персонаж касается земли. он не проверяет наличие наклона. после небольшого поиска FPSWalkerEnhanced, похоже, решает проблему.

Ali1S232
источник
Ну, я бы проверить, заземлен ли символ перед каждым шагом.
Кейнабель
@keinabel тогда он не сможет прыгнуть. единственный способ, которым он может подняться по склонам, используя прыжки, это если он может прыгать, даже если он не на твердой земле. Я имею в виду, что вы просто проверяете, не может ли он подняться по склонам. если он не может идти хотя бы в одном направлении из-за уклона, он вообще не должен прыгать.
Ali1S232
Поможет ли это, если я добавлю свой «код движения» в свой пост?
keinabel
Я думаю, мог прямо указать на проблему.
Ali1S232