Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Все Гайды Мой Кабинет

Способы изменения направления гравитации

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

Первый Способ

Первый способ изменения гравитации самый простой. Он изменяется через глобальные настройки физики. Для этого необходимо открыть окно Project Settings, с помощью вкладки File - Project Settings.... Далее выбираем физику(2д или 3д), и в поле Gravity изменяем числовые значения для осей.

Напрмиер, если необходимо сделать так, чтобы гравитация была направленна вверх по оси Y, то для Y необходимо удалить знак "минус", и указать значение 9.81. Если необходимо, чтобы гравитация была направлен вправо, то значение 9.81 нужно установить для X, а для Y указать значение 0. И так далее.

Эти значения можно комбинировать, указывая значения одновременно в двух полях, и для X и для Y, таким образом, гравитация будет работать одновременно по двум осям, то-есть по диагоналям.

Второй Способ

Данный способ уже посложнее, поскольку использует скрипт, но при этом он более функционален. В нём мы будем вращать ВСЕ наши игровые объекты, в том числе и камеру, под заданным градусом. По факту, направление гравитации в игровом мире не изменится, но для игрока будет выглядеть так, как будто произошла смена направления гравитации.

Чтобы не вращать все наши объекты, нам необходимо создать новый пустой игровой объект, назовём его Wrap, и вложим в него ВСЕ наши объекты, в том числе и персонажа, и камеры, и освещения(если есть), и тд. В окне Hierarchy это будет выглядеть примерно так.

Ну а сейчас создадим C# скрипт, через который мы будем вращать объект Wrap, а с ним автоматически будут вращаться и все вложенные объекты. Назовём данный скрипт Gravity, и заранее присвоим его объекту Wrap.

Впишем в скрипт следующее содержимое.

using UnityEngine;

public class Gravity : MonoBehaviour
{
    public float radius = 180;

    private void Start()
    {
        rotateGravity();
    }

    public void rotateGravity()
    {
        Vector3 rotate = transform.eulerAngles;
        rotate.z = radius;
        transform.rotation = Quaternion.Euler(rotate);
    }
}

Обратите внимание, что в строке #5 мы установили угол изменения гравитации в 180 градусов. Данное значение можно изменять динамически во время игры, тем самым в реальном времени будет изменятся направление гравитации, в зависимости от значения radius. Это очень большой плюс данного способа изменения гравитации.

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

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

На этом всё. Если вы знаете ещё интересные способы изменения гравитации, пишите эти способы в комментариях. Обязательно прочитаю, и возможно, дополню данную статью.

Вы можете отблагодарить автора донатом. ₽ Спасибо

Комментарии

0
Будьте первым, кто оставит комментарий к этому посту
Гости не могут оставлять комментарии. Войдите на Сайт или Зарегистрируйтесь