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

Реализация Стрельбы

В данной статье мы рассмотрим реализацию стрельбы наего персонажа. В данный статье мы рассмотрим самый простой способ для того, чтобы Вам было легче усвоить данный материал.

Создание пули

Первым делом нам необходимо создать префаб пули. Обязательно добавьте к нему компонент Rigidbody2d. А в поле Body Type данного компонента, укажите значение Kinematic - чтобы на пулю не дейстовала гравитация.

Теперь создаём для префаба нашей пули новый компонет(скрипт C#), и назовём его, например, Bullet. Суть работы данного скрипта должен состоять в том, чтобы наша пуля летела с определённой скоростью и в определённом направлении, ровно 3 секунды. После чего, пуля исчезает. Давайте это реализуем в нашем скрипте:

using UnityEngine;

public class Bullet : MonoBehaviour
{
    public float timeDestroy = 3f;
    public float speed = 3f;
    public Rigidbody2D rb;

    void Start()
    {
        rb = GetComponent<Rigidbody2D>();

        Invoke("DestroyBullet", timeDestroy);
        rb.velocity = transform.top * speed;
    }

    void DestroyBullet()
    {
        Destroy(this.gameObject);
    }
}

Давайте разберём данный код:

  • В строке #5 мы объявили переменную timeDestroy, для того, чтобы указать время жизни данной пули. Это не обязательно, но желательно.
  • В строке #6 мы объявили переменную speed, для указании скорости нашей пули.
  • А в строке #7 мы объявили переменную rb, которая будет хранить ссылку на компонент Rigidbody2D, чтобы потом с помощью неё задать движение нашей пули.
  • В строке #11 мы присвоили переменной rb, ссылку на компонент Rigidbody2D.
  • В строке #13 указываем, что спустя 3 секунды(timeDestroy), у нас запустится метод DestroyBullet(), который с помощью метода Destroy() уничтожит наш объект пули.
  • Ну а в строке #14, с помощью метода velocity(), задаём силу движения нашей пули, направленный вверх. Направление полёта пули Вы можете изменить, прописав вместо top, одно из следующих свойств: right, left, bottom.

Выстрел

Пуля готова, теперь нам нужно при каком-либо событии, например при клике мышью, создавать эту пулю на игровой сцене. Для этого создадим скрипт C# для нашего персонажа. Скрипт назовём, например Player. Присвоим его объекту персонажа, и впишем в данный скрипт следующее содержимое:

using UnityEngine;

public class Player : MonoBehaviour
{
    public GameObject bullet;

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Mouse0))
        {
            Instantiate(bullet, transform.position, Quaternion.identity);
        }
    }
}

Обратите внимание, что в строке #5 мы объявили переменную bullet, которая будет хранить ссылку на наш префаб пули, для того, чтобы с помощью метода Instantiate в строке #11, мы на основе этого префаба создавали пулю на игровой сцене.

Важно: Не забудьте через Unity перетащить префаб пули в поле bullet, компонента Player, который находится у объекта вашего персонажа.

На этом всё! Надеюсь объяснил максимально понятно. Если было что-то не понятно, пишите в комментариях. Отвечу всем :)

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

Комментарии

1
Labulay 1 год назад

В первом классе Bullet, можно не вводить дополнительный метод DestroyBullet(), и тем самым немного сократить до такого состояния:


using UnityEngine;

public class Bullet : MonoBehaviour
{
    public float timeDestroy = 3f;
    public float speed = 3f;
    public Rigidbody2D rb;

    void Start()
    {
        rb = GetComponent<Rigidbody2D>();

        Destroy(this.gameObject, timeDestroy);
        rb.velocity = transform.top * speed;
    }
}

В самом методе Destroy(), вторым параметром можно указать время, через которое объект будет уничтожен.
Так будет проще и правильнее)

Гости не могут оставлять комментарии. Войдите на Сайт или Зарегистрируйтесь