Четверг, 28 Марта 2024, 12:41

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Организация кода в проектах (В больших и маленьких)
Организация кода в проектах
robertonoДата: Суббота, 02 Мая 2015, 21:10 | Сообщение # 1
Чокнутый Кот
Сейчас нет на сайте
Добрый вечер!

Страдаю я значит такой нехорошей болезнью, как писать очень неудобный код.

С недавнего времени начал подписывать комментарии к функциям и переменным. Это чуть улучшило читабельность моего кода, но совсем не изменило стиль к которому я привык и он мне жутко не нравится.
В общем проблема в том, что даже в простейшем Android проекте я уже сумел намудрить сложные велосипеды, построить глубокие непроходимые лабиринты, прикрутить к этому наследования классов и эвенты.. А нужно ли это?

Дело в том, что как бы я не пытался сделать код "легче", он у меня всё равно нагружается бесполезными усложнениями.
Что бы начать игру, в моем коде сначала вызывается событие на главном скрипте.
Вот ужасная схема, а это ведь всего то старт игры
1. StartGame на главном скрипте
1.1 Включить только те объекты, которые будут видимы при игре
1.2 Вызвать все нужные анимации (это вызов эвента)
1.3 Загрузить нужные объекты для игры
1.4 Остановить всякие сопрограммы (куротины)
1.5 Назначить разные переменные в кеш
1.6 Ещё и проверить не надо ли включить туториал

Некоторые подпункты могут идти ещё глубже.. А потом переходить в наследование.

И в итоге код получается очень неудобным для работы, всё становится распиханым : вызвал одну функцию, а код поработал - немного в одном скрипте, немного в другом, в третьем...
Это ужасно не удобно потом изменять, а тем более искать баги!

Как этого избегать?
Как это делается в действительно больших проектах?
Как научится писать нормальный кот код?

Дайте советы какие нибудь пожалуйста, или ссылку на статью на эту тему, например на habrahabr.

Спасибо!
happy
berilДата: Суббота, 02 Мая 2015, 21:43 | Сообщение # 2
Я не ленивый, я — энергосберегающий
Сейчас нет на сайте
Во -первых это глянь. Может очень сильно помочь (История создания Prime world)

Приемы при проектировании архитектуры игр
Добавл[furl=http://habrahabr.ru/post....шибкамияем MVP в игры на Unity3D[/furl]
SMessage — Простая и предсказуемая система событий для Unity
Введение в компонентно-ориентированный подход к программированию
Unity3D tips and tricks rus
Архитектура простой 2D игры на Unity3D. План, факт и работа над ошибками- Обрати внимание на эту статью
http://www.rivellomultimediaconsulting.com/unity3d....r-games

мелочь всякая тык

если это тебе поможет, есть еще уйма подобных статей и видео. Если интересно могу скинуть




Накодил? Убери за собой!
Инвентарь в Unity(UI)
Инвентарь в Unity(GUI)
robertonoДата: Суббота, 02 Мая 2015, 21:52 | Сообщение # 3
Чокнутый Кот
Сейчас нет на сайте
beril, Спасибо, теперь есть что почитать)
berilДата: Суббота, 02 Мая 2015, 21:58 | Сообщение # 4
Я не ленивый, я — энергосберегающий
Сейчас нет на сайте
Цитата robertono ()
beril, Спасибо, теперь есть что почитать)

это всего лишь малая часть того, что можно почитать по этой теме.




Накодил? Убери за собой!
Инвентарь в Unity(UI)
Инвентарь в Unity(GUI)
robertonoДата: Воскресенье, 03 Мая 2015, 18:39 | Сообщение # 5
Чокнутый Кот
Сейчас нет на сайте
beril, А зачем делать систему событий (там какая то ссылка их этих), если в C#есть Event (event, EventHandler, EventArgs) ?
berilДата: Понедельник, 04 Мая 2015, 00:08 | Сообщение # 6
Я не ленивый, я — энергосберегающий
Сейчас нет на сайте
Цитата robertono ()
beril, А зачем делать систему событий (там какая то ссылка их этих), если в C#есть Event (event, EventHandler, EventArgs) ?

Проще юзать ) они же и основаны на обычных событиях и делегатах. Есть CSharpMessenger r тоже удобная система событий




Накодил? Убери за собой!
Инвентарь в Unity(UI)
Инвентарь в Unity(GUI)
NEBRДата: Понедельник, 04 Мая 2015, 02:55 | Сообщение # 7
почти ветеран
Сейчас нет на сайте
Цитата robertono ()
1.5 Назначить разные переменные в кеш

Этот пункт можно вообще убрать, я юзаю этот скрипт , он позволяет вообще забыть про кеширование. Польза очевидна - экономится время и улучшается читабельность кода.
Кидаешь этот скрипт в проект (если нужно дописываешь, добавляя кеширование компонентов, которых в нем нет), наследуешь свои скрипты не от MonoBehavior, а от CachedMonoBehavior. При вызове нужного тебе компонента он ОДИН РАЗ вызывается через GetComponent и запоминается. Вообщем, рекомендую!

А по поводу организации скриптов - на меня сильно повлияла указанная выше статья про введение в компонентно ориентированный подход. Сейчас стараюсь разбивать скрипты на логические составляющие и делать отдельные компоненты (пусть даже иногда их много) - код стал намного понятнее и гибче.


King Size #Gamiron12

Сообщение отредактировал NEBR - Понедельник, 04 Мая 2015, 14:12
RangerДата: Понедельник, 04 Мая 2015, 08:51 | Сообщение # 8
почти ветеран
Сейчас нет на сайте
Не нужно без необходимости усложнять простое.
у меня обязательны главный скрипт с логикой на сопрограммах и синглтоны менеджеры.

События пользую без фанатизма, иначе запаришься потом разбираться где баг.
Они в основном повешаны на ошибки и сообщения о смертях/рождениях.. ну и на гуи.

Цитата robertono ()
С недавнего времени начал подписывать комментарии к функциям и переменным.

Я адепт секты самокомментирующегося кода.


robertonoДата: Понедельник, 04 Мая 2015, 10:58 | Сообщение # 9
Чокнутый Кот
Сейчас нет на сайте
Внезапный вопрос по C#!

Подскажите пожалуйста, всё не могу запомнить.
Эта созданная переменная (FadeColors)- просто ссылка (на GM.instance.fadecolors), верно?

Код
List<ColorVariations> FadeColors = GameManager.Instance.FadeColors;
RangerДата: Понедельник, 04 Мая 2015, 12:07 | Сообщение # 10
почти ветеран
Сейчас нет на сайте
Цитата robertono ()
верно?

верно


NEBRДата: Понедельник, 04 Мая 2015, 13:50 | Сообщение # 11
почти ветеран
Сейчас нет на сайте
Цитата Ranger ()
у меня обязательны главный скрипт с логикой на сопрограммах и синглтоны менеджеры.

Я правильно понял, сопрограммы вызываешь только в одном главном скрипте и нигде больше? State machine юзаешь? )

Добавлено (04 мая 2015, 13:50)
---------------------------------------------

Цитата Ranger ()
Я адепт секты самокомментирующегося кода.

Я тоже раньше ее придерживался, после прочтения МакКонала ))
Правильное именования методов и переменных сильно облегчает чтение ) Ты придерживаешься каких то конвенций именования или свой стиль?


King Size #Gamiron12
robertonoДата: Понедельник, 04 Мая 2015, 13:58 | Сообщение # 12
Чокнутый Кот
Сейчас нет на сайте
Я тоже стараюсь нормально называть переменные и методы. Но порой хочется увидеть русские словечки после переменной)
NEBRДата: Понедельник, 04 Мая 2015, 14:10 | Сообщение # 13
почти ветеран
Сейчас нет на сайте
Цитата robertono ()
Я тоже стараюсь нормально называть переменные и методы. Но порой хочется увидеть русские словечки после переменной)

со временем это пройдет ))
Кстати, если проект относительно большой, или твой код будет читать кто то еще, есть смысл юзать XML документацию. Может замечал когда печатаешь метод, подсказкой всплывает его комментарий - это она и есть. Перед методом (или переменной) печатаешь "///" и появляется форма, в теле которой можно оставить свои комментарии для метода и его аргументов.


King Size #Gamiron12
RangerДата: Понедельник, 04 Мая 2015, 16:03 | Сообщение # 14
почти ветеран
Сейчас нет на сайте
Цитата NEBR ()
Я правильно понял, сопрограммы вызываешь только в одном главном скрипте и нигде больше?

Нет не только. Стейт машина на сопрограммах в главном скрипте задает логику. ЧТобы не плодить флаги.
В сопрограммах стейтами можно отслеживать этапы. При желании для дебага безболезненно делать дырки куда нужно.

Цитата NEBR ()
Ты придерживаешься каких то конвенций именования или свой стиль?

да не особо: i - интерфейс. свойство с маленькой. метод с большой. is - возвращает логику..


MANMANAДата: Понедельник, 04 Мая 2015, 17:05 | Сообщение # 15
почти ветеран
Сейчас нет на сайте
f - float, d - double... конвенции, та? smile

http://www.3dbuffer.com/ Текстуры, Unity3D, Blender: Эффекты, скрипты, моделирование, текстурирование, скульптинг
VKонтакте 3Dbuffer

Последнее:

Новый раздел "Текстуры"

Как запатентовать, защитить техническое решение, игру, идею
NEBRДата: Понедельник, 04 Мая 2015, 20:14 | Сообщение # 16
почти ветеран
Сейчас нет на сайте
Цитата Ranger ()
Нет не только. Стейт машина на сопрограммах в главном скрипте задает логику. ЧТобы не плодить флаги.
В сопрограммах стейтами можно отслеживать этапы. При желании для дебага безболезненно делать дырки куда нужно.

Я делаю так же, один в один. Часто бывает что логика сильно меняется, отходит от первоначальной. В этом случае все разрастается, тут и там появляются заплатки, заглушки и код выглядит отвратительно... На рефакторинг времени иногда не хватает... Вот думал, может есть какой нибудь более удобный способ. А MVC не пробовал?

Цитата Ranger ()
да не особо: i - интерфейс. свойство с маленькой. метод с большой. is - возвращает логику..

Да, у меня также. CamelCase. Пробовал привыкнуть к именованию переменных класса начиная с "m_" или просто "_", но отказался, т.к. проекты небольшие, смысла в этом не видел. Возвращаю логику либо is, либо Get.

Добавлено (04 мая 2015, 20:14)
---------------------------------------------

Цитата MANMANA ()
f - float, d - double... конвенции, та?

Не, конвенции это некие принятые стандарты по именованию переменных.


King Size #Gamiron12
berilДата: Понедельник, 04 Мая 2015, 21:23 | Сообщение # 17
Я не ленивый, я — энергосберегающий
Сейчас нет на сайте
Соглашения по оформлению кода команды RSDN
Вот эта книга тоже очень хорошая




Накодил? Убери за собой!
Инвентарь в Unity(UI)
Инвентарь в Unity(GUI)
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Организация кода в проектах (В больших и маленьких)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг