Як змусити мого персонажа ковзати по схилах високих кутів?


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);
    }
}

Вам потрібна додаткова інформація: ви використовуєте фізику? Ці схили використовують систему місцевості чи щось інше? Який компонент чи компоненти керують вашим персонажем? Це 2D або 3D гра?
Килотан

Ви маєте на увазі слайд, коли гравець намагається стрибнути, або коли він виконує стрибок і б'є по схилу?
tyjkenn

@tyjkenn я маю на увазі, коли він завершує стрибок. Як у Супер Маріо 64. Коли він приземляється на землю, а ця земля занадто висококутна, він повинен ковзати донизу до точки, кут якої дорівнює куту схилу.
keinabel

@Kylotan добре, я зовсім новачок у Unity. Отже, я намагаюся дати відповідь так добре, наскільки я можу. Я створив персонаж за допомогою контролера символів - немає жорсткого корпусу. Я змусив його рухатись, коли натискається клавіша, і я змусив його ходити відносно курсору. Я створив місцевість і за допомогою кнопки (ой, це має звучати нерозумно) я створив гори. Це буде 3D-гра з виглядом та стилем камери, як WarCraft III.
keinabel

Відповіді:


1

Ваше гальмування при ударі об землю неправильне, ви просто зупиняєте вертикальний рух, але так працює удар по землі, коли земля рівна.

Що вам слід зробити, це спроектувати moveDirectionна уражену поверхню, що дасть вам нове moveDirection. Якщо у вашій бібліотеці є функція проектування вектора на площину чи поверхню, це те, що вам слід використовувати. Якщо ні, то слід відняти moveDirectionпроекцію на поверхню від норми від moveDirectionсамої себе.


Є ігри, які використовують таку саму поведінку, наприклад. Skyrim, використовуйте точно такий же метод для гальмування. проблема полягає в тому, що характер може стрибати, навіть якщо він не знаходиться на майданчику прапора.
Ali1S232

0

просто перевірте перед стрибком, чи персонаж стоїть на землі, я маю на увазі, якщо він не на високому кутовому схилі. і залиште все інше на двигуні фізики.

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

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


Ну, я б перевірити, заземлений чи символ перед кожним кроком.
keinabel

@keinabel тоді він не міг стрибати. єдиний спосіб, коли він може рухатися по схилах за допомогою стрибків, це якщо він може стрибати, навіть якщо він не знаходиться на твердій землі. Я маю на увазі, це так само, як ви перевіряєте, чи не може він піднятися по схилах. якщо він не може ходити хоча б в одному напрямку через схил, він взагалі не повинен мати можливості стрибати.
Ali1S232

Чи допоможе це, якщо я додати до свого допису свій "код руху"?
keinabel

Я думаю, міг би прямо вказати на проблему.
Ali1S232
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.