Стрельба, перезарядка, разброс пуль [2D]

Скрипт оружия для двухмерного платформера. В наличии два режима стрельбы, префабом или рейкастом, первый вариант подойдет для, например, плазменного оружия, а второй вариант для обычного пистолета или автомата. Есть учет количества патронов и перезарядка, как вручную, так и автоматически, если магазин пустой, а игрок нажимает клавишу выстрела. Кроме этого, мы добавили возможность настроить разброс пуль и добавили настройки скорострельности. Плюс, оружие может выстреливать сразу несколько пуль/рейкастов одновременно. Таким образом, данный скрипт можно настроить как: пистолет, автомат, дробовик и т.п.

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

Для взаимодействия с объектом, куда попадает пуля:

using System.Collections;
using UnityEngine;

public class Weapon2DTarget : MonoBehaviour {

	public void DoAction(float damage)
	{
		// делаем что-нибудь...
	}
}

Если в объект попал префаб или луч, выполняется этот метод, в нем мы можем делать всё что угодно. То бишь, этот простенький скрипт, мы добавляем на вражеских ботов и т.п.

Теперь, сделаем префаб пули:

using System.Collections;
using UnityEngine;

public class Weapon2DBullet : MonoBehaviour {

	[SerializeField] private float damage = 15;

	void Start()
	{
		Destroy(gameObject, 10);
	}

	void OnTriggerEnter2D(Collider2D coll)
	{
		if(!coll.isTrigger)
		{
			Weapon2DTarget target = coll.GetComponent<Weapon2DTarget>();
			if(target != null) target.DoAction(damage);
			Destroy(gameObject);
		}
	}
}

Стрельба, перезарядка, разброс пуль [2D]

На префабе должен быть коллайдер в режиме триггера и риджитбоди с отключенной гравитацией.

Важно! Скрипт Weapon2D.cs управляет вращением оружия по оси Z, можно указать торс персонажа или только модель оружия. И еще скрипт управляет разворотом персонажа, так как это напрямую зависит от положения курсора. Поэтому если в вашем скрипте персонажа есть функция разворота, ее необходимо отключить.

Скачать все скрипты и демо проект:
https://www.patreon.com/posts/strelba-razbros-23168875
Тестировалось на: Unity 2017.1.1

Комментариев 12

Онлайн
Light 22 февраля 2019
TitoZ, по ссылке на Патреоне.
Офлайн
TitoZ 22 февраля 2019
А где основной скрипт?
Онлайн
Light 21 июля 2018
alowp, попробуй добавить проверку, когда ПКМ не нажата.

Заменить:

timeout = Mathf.Infinity;

На:

timeout += Time.deltaTime;
if (timeout > fireRate)
{
    timeout = Mathf.Infinity;
}
Офлайн
alowp 21 июля 2018
P3LM3N,
стрельба правой кнопкой мыши. всё работает

Столкнулся с такой проблемой... В скрипте можно выставлять скорострельность. И всё было бы замечательно, но если выставить маленькую скорострельность, то просто кликая на мышку как можно быстрее, ты стреляешь чаще чем выставленная скорострельность...
Офлайн
P3LM3N 12 апреля 2018
загрузил демо, но персонаж не стреляет
Онлайн
Light 13 ноября 2017
TeDj, это инструмент для редактора, чтобы быстро "рисовать" игровую карту.
Офлайн
TEEAAA 2 ноября 2017
а как на андроид?
Офлайн
TeDj 21 октября 2017
Добрый день!
Скажите, пожалуйста, в новой версии 2017.2.0 добавили Tileset. Можно ли его использовать для match3? Просто раньше сетку создавали с помощью скрипта и добавляли элементы префабами. А с новым Tileset'ом , если смотреть оптимистично, дело было бы проще. В инете пока нет такой информации
Онлайн
Light 10 октября 2017
igor1906, ну это обычные 2д ритжитбоди объекты, думаю лучше всего сделать пул из 10-15 элементов, и прогонять их циклом во время стрельбы.
Офлайн
igor1906 10 октября 2017
А подскажите пожалуйста как сделать гильзы при стрельбе?
Офлайн
SlavaXD 7 октября 2017
зато можно загрузить проект на движок и посмотреть
Офлайн
и ни какого видео((((
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
  • Яндекс.Метрика