Показать сообщение отдельно
Старый 28.05.2016, 18:34   #5
Nex
Гигант индустрии
 
Аватар для Nex
 
Регистрация: 13.09.2008
Сообщений: 2,893
Написано 1,185 полезных сообщений
(для 3,298 пользователей)
Ответ: Система оружия

Сообщение от ant0N Посмотреть сообщение
не, я наверное неправильно задал вопрос.
Меня интересует реализация системы оружия в коде (абстрактный пример). Т.е как правильно написать базовую систему, чтобы она получилась простой и гибкой.
Создать класс болванки и потом только подменять модель оружия и параметры?
Тебе уже написали способы аля контра и аля борделенд/фаллаут4/прочий_рпг_шутер.

Если по говнокоду, то создаешь класс Weapon и в нем описываешь все возможные варианты оружия. Далее если ты на Unity3d можно при помощи enum задавать допустим тип "пуль" - пуля, лазер, ракета, гранаты. Добавляешь методы Fire(), Reload(), Drop(), etc.

Можно более правильно. Создаешь базовый класс Weapon и описываешь общие методы и поля у всего оружия (например скорость перезарядки, урон, ссылка на модельку/анимацию). Далее для каждого типа оружия/стрельбы (обычное, лазерное, ракетницы, гранотометы) создаешь свой класс, перезаписываешь базовые методы override Fire, Reload, Drop, etc., в которых уточняешь конкретные тонкости для данного типа оружия/стрельбы (например если пули, то пули летят прямо и может быть имеют некоторую скорость полета. Если лазер, то моментальный урон после выстрела. Если гранатомет, то гранаты вылетают по некоторой траектории., etc).

Далее в скрипте игрока делаешь поле public Weapon weapon. И тебе будут доступны методы weapon.Fire(), weapon.Reload(), weapon.Drop(), etc не зависимо каким способом сделал. Вызывая эти методы оружие будет стрелять, перезаряжаться, падать, etc.

Если бы ты уточнил что ты именно хочешь от системы оружия, то можно было бы конкретней написать абстрактный код. А так возможных способов создания мильен.

В любом случае должен быть некий класс WeaponManager например, который будет при старте загружать конфиг оружия из файлов.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
ant0N (28.05.2016)