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

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

Приветствую начинающих разработчиков. Сегодня мы снова будем изменять физику. На этот раз научимся изменять силу гравитации глобально, то-есть для всех объектов. А так же научимся изменять силу гравитации локально для конкретных объектов. Изменять гравитацию так же будем как через скрипты, так и через окна Unity.

Глобальное изменение гравитации

За глобальное изменение гравитации в 2д и в 3д мирах отвечают разные классы физики:

Все эти настройки можно изменить во вкладке Edit - Project Settings....

После чего откроется окно Project Settings. В правой стороне выберите физику, которую хотите отредактировать, 2д или 3д. После чего, в самой первой строке, в поле Gravity указываете значения гравитации для каждой оси.

Изменять эти значения так же можно и через скрипт. Например, следующий скрипт при старте игры устанавливает гравитацию на 19,6 м/c2 для 2д физики.

using UnityEngine;

public class Gravity : MonoBehaviour
{
    void Start()
    {
        Physics2D.gravity = new Vector2(0, -19.6f);
    }
}

Локальное изменение гравитации

Бывают случаи, когда нам нужно изменить силу гравитации конкретного объекта, не затрагивая при этом глобальное изменение гравитации. Если речь идёт о 2д играх, то нам необходимо изменить свойство gravityScale в компоненте Rigidbody 2D.

Его так же можно изменить и через скрипт:

using UnityEngine;

public class Gravity : MonoBehaviour
{
    public Rigidbody2D rigidbody;

    void Start()
    {
        rigidbody = GetComponent<Rigidbody2D>();
        rigidbody .gravityScale = 19.6f;
    }
}

С играми формата 3д всё немного тяжелее, поскольку в компоненте Rigidbody нет свойства gravityScale, а значит нельзя напрямую реглировать уровень гравитации. Поэтому приходиться создавать её иммитацию через AddForce() или drag.

Пример иммитации гравитации с помощью AddForce:

using UnityEngine;

public class Example : MonoBehaviour
{
    public Rigidbody rb;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
        rb.AddForce(0, 0, 2.0f, ForceMode.Impulse);
    }
}

Пример иммитации гравитации с помощью drag:

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour
{
    public Rigidbody rb;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
    }

    void Update()
    {
        if (Input.GetButton("Space"))
            rb.drag = 20;
    }
}

На этом всё. Если кто знает, как ещё можно установить силу гравитации для конкретного объекта в 3д физике, то пишите в комментариях. Ну и не забывайте ставить лайки :)

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

Комментарии

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