Избегайте падения с края - PullRequest
       1

Избегайте падения с края

0 голосов
/ 04 сентября 2018

Я пытаюсь сделать простую FPS-игру в Unity3d, где персонаж не может упасть с платформы, если он не спрыгнет с нее, уход должен быть невозможным. Я сделал скрипт для объектов, которые находятся на движущейся платформе:

public GameObject Player;

private void OnTriggerEnter(Collider other)
{
    if (other.gameObject == Player)
    {
        Player.transform.parent = transform;
    }
}

private void OnTriggerExit(Collider other)
{
    if (other.gameObject == Player)
    {
        Player.transform.parent = null;
    }
}

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

Ответы [ 3 ]

0 голосов
/ 04 сентября 2018

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

Добавьте небольшой коллайдер в каждый угол или середину каждой стороны нижней части объекта вашего игрока. Игрок может двигаться только в направлении A, если коллайдеры на стороне A игрока находятся в контакте с землей. Это означает, что при приближении к уступу ближайшая к уступу сторона теряет контакт с землей, что предотвращает дальнейшее движение в этом направлении.

Если игрок прыгает, тогда разрешите движение во всех направлениях независимо от контакта с коллайдером.

Вам придется поиграться с положением этих коллайдеров и тем, в каких направлениях вы разрешаете движение, но для меня это простой, но эффективный подход.

0 голосов
/ 05 сентября 2018

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

0 голосов
/ 04 сентября 2018

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

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

Например,

if((transform.position + transform.forward * walkingSpeed * time.deltatime).x > maxX || < minX || .y > maxY || .y << minY)
    //Deny the move
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...