Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kkolyan/fb0f94f52262fe73ca29df17a0eb9ed6 to your computer and use it in GitHub Desktop.
Save kkolyan/fb0f94f52262fe73ca29df17a0eb9ed6 to your computer and use it in GitHub Desktop.

https://gamedev.ru/unity/forum/?id=262090 (C# в Unity. С чего начать?) Всем доброго времени суток, форумчане. Мне 29 лет, работаю в гос учреждении, не программист от слова совсем. Хочу стать человеком-оркестром и начать делать свои игры на юнити. До этого не кодил вообще, только по урокам из ютуб, но знаний оттуда подчерпнуть не удалось, ибо все подается хаотично или по крупицам. В связи с чем вопрос! С чего начать изучать юнити, если я хочу сам программировать? Книг по С# много, но все ли они подходят конкретно под юнити? не хотелось бы погрязнуть в трясине коддинга, через N-е количество времени поняв, что я изучаю не то направление. То есть как вы изучали/изучаете С# для юнити? Какие книги или курсы изучали? Заранее спасибо за советы, всем здоровья!

Я сначал изучал GML (язык, встроенный в Game Maker, тогда еще без приставки Studio) по хелп файлу со словарем.

Затем после пары-тройки лет ковыряния этого замечательного инструмента пробовал Python на Panda3D. базовый Python после ковыряний в GML дался довольно легко поле прочтения 5 страниц на intuit.ru. Но с Panda3D не задалось - это 3D, т.е. чтобы сделать что-то сложнее куба ездящего по тиррейну - надо моделить, а у меня с этим тогда было намного хуже, чем с 2D артом.

Затем через некоторое время (спустя 3-4 года после начала экспериментов с Game Maker) познакомился с "настоящими программистами" (не из геймдева), которые пишут на PHP и Java и стал учить Java по книжке Хорстманна. Книжка была безумно интересная - после опыта с GML было все понятно с полустрочки, а примеры аналогий с C/C++/C# откладывались в памяти, потом позволяя без страха лазить и в эти языки. Через год Java стала моим вторым родным языком и я перешел работать из McDonalds в аутсорсинг софта для американских стартапов java-джуном. А в рамках хобби Game Maker был навсегда брошен и я стал экспериментировать с играми на jMonkeyEngine.

Не прошло и года, как я прознал про Unity (это была 4 версия) и это были ворота в мир настоящих игр. Зная Java, писать на C# не составляет вообще никаких проблем. хотя нет, есть 1 проблема - в шарпе было очень плохо с IDE по сравнению с Java, а к хорошему привыкаешь быстро. Rider еще не было, а ReSharper безбожно тормозил (и кроме своей стоимости еще требовал купить Visual Studio). Но вполне терпимо (сжимая зубы кодил в MonoDevelop), учитывая что получаешь взамен.

Профессиональным разработчиком игр я так и не стал (разве что на игровом бэкенде поработал) - меня затянуло в ынтерпрайз. Но свободное время часто посвящаю как раз таки геймдев-человек-оркестровству, особенно последние пару лет.

В общем, что я могу сказать. Роль ЯП в разработке игр не так велика, как это было во времена Кармака и как все еще оно остается в проф сегменте для мобилок и топовых немобильных. Сразу оговорюсь - да, в проф мобилках и в немобилках с хай-энд графикой, нужен нормальный программист (причем для немобилок это все еще обычно C++, а не C#). Нормальный программист и человек-оркестр в одном лице - это очень много лет самоотдачи, включая "лучшие года". Вы таким стать уже не успеете. Выбирайте - либо нормальным программистом (может быть успеете), либо оркестром.

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

В общем, я вижу 2 взаимоисключающих сценария для вас:

===

  1. Путь хорошего программиста

На этом пути будьте готовы, что сами вы так никакой более игры сложнее змейки сделать в одиночку не сможете, хотя и будете чувствовать могущество сделать это. Хороший программист - это важная роль в проекте, а не человек-оркестр.

Выбрать ЯП, и не обязательно шарп. Выучив Java, имхо, у вас в голове сформируется гораздо более толковый нравственный каркас. Но при этом, у вас не будет НИКАКИХ проблем писать на C# для Unity. Не надо бояться на этом этапе "выучить не то" - между изучением всех популярных промышленных языков дичайшая синергия.

А далее просто досконально осваивать этот ЯП. Читайте хорошую основательную книжку по основам. Не "40 советов для чайников", а именно учебник. Не трогать движок пока, а начинать делать сначала консольные программы, потом либо GUI, либо веб, либо игры на примитивных функциях отрисовки. И лишь потом, когда сам язык станет литься из ваших пальцев (вполне возможно, вы к тому моменту уже смените работу и станете джуном прогером или QA автоматизатором), уже можно... да вы сами уже будете ориентироваться в том, что вам можно и нужно. До этапа, когда новый ЯП будет литься из ваших пальцев (по внутренним ощущениям), должно пройти год-два, не больше. Если не успеете - значит не ваше.

1Б. Если за пару месяцев C#/Java для вас все еще кажется сложным и вы начинаете прокрастинировать его, но при этом все еще верны пути "стать хорошим программистом", то советую переключиться временно на языки с более щадящим порогом вхождения. Например попишите полгодика-год игры на Lua (Love2d, Defold). Да, язык казуальный, но опыт программировная на нем сделает очень многие вещи в C#/Java гораздо более понятными.

(Про кресты пока забудьте - вам уже поздно. А если у вас талант и лично вам - не поздно, то изучение сперва C#/java никак вам не помешает, а лишь послужит трамплином)

=== 2. Путь геймдев-универсала.

"Учить" язык только по ошибкам компилятора, примерам из документации и StackOverflow. В топку ООП. В топку Шилдта. Вот реально, забудьте. оно не нужно - это пустая трата времени в этом сценарии. Рассматривайте C# просто как временный инструмент, решающий проблемы здесь и сейчас Да, вам придется освоить базовые программерские навыки - понимать что такое переменная, чем она отличается от поля и тому подобное. Но не надо лезть в архитектуру и пытаться все запилить красиво. Делайте все тупо на куче простеньких MonoBehaviour. Т.е. просто открываете Unity, создаете куб (как создавать куб - надо понять самому, ковыряя менюшки, доки и гугол - это основной навык). Накидываете на этот куб скрипт. И просто пытаетесь в этом скрипте что-то сделать с кодом - поменять по кнопке текстуру или сдвинуть его. Внимательно читаете ошибки компилтора в консоли редактора - это ваш основной учитель програмимрования, сравниваете с примерами построчно. В итоге, ваше куб будет вас слушаться - ездить по полю. Если все компилится, но куб не слушается - обмазываете код Debug.Log. В итоге и другие кубы будут пулыяться в вас еще другими кубами. Никаких абстракций - просто маленькие скриптики, которые вы вешаете на кубы, которые делают самым тупым способом то, что вы хотите. Вместо кубов можно сразу ассеты какиенить скачать - как хотите.

Через полгода вы уже освоите "скриптовый C#". И этого знания языка вам будет достаточно для инди-игр - да, посмотрев на ваш код, скажут "фууу, лютое говнище!" (и будут правы), но в отличие от этих чистюль-синьёров, вы будете делать игры, а не воображаемые замки в облаках. Хотя, конечно, за полгода умение сформулировать воображаемую игровую логику в виде кода только начнет появляться и будет улучшаться с практикой. Но в основном, вам нужно осваивать другие (не связанные с кодом напрямую) вещи: как и зачем запекать свет, как импортить модели, как блендить анимации, зачем нужны разные виды шейдеров (пока просто выбирать из готовых и копипастить из инета те которых "из коробки" нет). В общем, вы должны ориентироваться в том кол-ве галочек и ползунков которое есть в редакторе и понимать какие из них нужны для вашей игры.

И это сценарий, когда лично вы только составляете сцену и скриптуете ее. А весь арт берете из ассет стора. Даже в такой формуле, непосредственно кодинга будет не так много. А если вы еще и моделить будете сами... ковыряние в C# здесь вообще будет мелочью в итоге. Я вот сейчас даже иногда жалею что слишком сильно ушел в некрестовый кодинг (на самом деле нет, т.к. мне нравится и за это хорошо платят, но понимаю что это фактически предательство мечты о разработке игр).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment