В данной статье мы рассмотрим реализацию стрельбы наего персонажа. В данный статье мы рассмотрим самый простой способ для того, чтобы Вам было легче усвоить данный материал.
Создание пули
Первым делом нам необходимо создать префаб пули. Обязательно добавьте к нему компонент 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, который находится у объекта вашего персонажа.
На этом всё! Надеюсь объяснил максимально понятно. Если было что-то не понятно, пишите в комментариях. Отвечу всем :)
В первом классе Bullet, можно не вводить дополнительный метод DestroyBullet(), и тем самым немного сократить до такого состояния:
В самом методе Destroy(), вторым параметром можно указать время, через которое объект будет уничтожен.
Так будет проще и правильнее)