Войти
UnityФорумПрограммирование

C# в Unity. С чего начать?

Страницы: 1 2 3 Следующая »
#0
14:14, 5 июля 2021

Всем доброго времени суток, форумчане.
Мне 29 лет, работаю в гос учреждении, не программист от слова совсем.
Хочу стать человеком-оркестром и начать делать свои игры на юнити.
До этого не кодил вообще, только по урокам из ютуб, но знаний оттуда подчерпнуть не удалось, ибо все подается хаотично или по крупицам.
В связи с чем вопрос!
С чего начать изучать юнити, если я хочу сам программировать?
Книг по С# много, но все ли они подходят конкретно под юнити? не хотелось бы погрязнуть в трясине коддинга, через N-е количество времени поняв, что я изучаю не то направление.
То есть как вы изучали/изучаете С# для юнити? Какие книги или курсы изучали?
Заранее спасибо за советы, всем здоровья!


#1
15:31, 5 июля 2021

IvanBoykov01
> Книг по С# много, но все ли они подходят конкретно под юнити? не хотелось бы
> погрязнуть в трясине коддинга, через N-е количество времени поняв, что я изучаю
> не то направление.
Книг много и прочитать придется много. Можешь начать с Шилдта он староват и простоват, но зато это настоящий учебник.

Но вообще не советую связываться с статически типизированными языками типо шарпа. Там мало знать сам язык и его либы, что само по себе займет много времени.

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

Но если ты прям хочешь быть тру кодером, то это единственный путь.

Если же тебя больше привлекает сама разработка по себе. Лучше взять что нибудь динамическое: JS, LUA, Python.

Да и вообще не замахиваться на движки с начала, а взять моды или UGC.

Время от начала обучения до первого геймплея там ниже, прям сильно ниже, а это место где многие выгорают. Все таки разработка игр - это очень специфичный процесс. Заодно поймешь надо оно тебе или нет и выше шанс получить хоть какой то результат.

#2
(Правка: 16:13) 16:12, 5 июля 2021

qGrin
Спасибо за развернутый ответ.
Но отсюда вытекает несколько вопросов.
1. Стоит ли тратить время на моды или UGC (изучая иные ЯПы), если я хочу сделать небольшой проект в юнити, потом проект побольше, большой и т.д.? И все это не денег ради, но мечты для, всегда мечтал делать игры, а не работать непонятно на кого и зачем.
2. Можно ли изучая тот же JS с уклоном на игры, потом уйти в другие сферы? И можно ли вообще чисто на JS сделать полноценную игру и в какой среде разработки?

Но вообще не советую связываться с статически типизированными языками типо шарпа

3. Но именно такой язык поддерживает юнити, самая популярная среда разработки инди игр, почему бы тогда не погрязнуть с головой все таки в шарп?
#3
16:38, 5 июля 2021

Мое маленькое ИМХО
шарп довольно популярен не только в gamedev если устанешь есть шанс уйти
на фулстек или на микросервисы есть хорошие вакансии именно по шарпу
Тем более для себя все же лучше понять что такое ООП и др приколюшки чем
"быдлокодить" на JS
Насчет игр все же сначала лучше изучить сам язык и начинать делать свою "змейку"
именно основывая на языке а не на визуальном программировании которые можно эту змейку
построить если скачать какой нить мод это для геймдизигнеров

#4
17:54, 5 июля 2021

DanQuimby
Спасибо за Ваше мнение.
Тем не менее, Вы бы с чего начали все таки если выбор пал бы на шарп?

#5
19:56, 5 июля 2021

IvanBoykov01
> 1. Стоит ли тратить время на моды или UGC (изучая иные ЯПы), если я хочу
> сделать небольшой проект в юнити, потом проект побольше, большой и т.д.? И все
> это не денег ради, но мечты для, всегда мечтал делать игры, а не работать
> непонятно на кого и зачем.
Стоит. Если ты не "пришел-поковырял-забил".

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

Ты решил, что юнити, но это "пальцем в небо". Я тоже 8 лет назад начал с юнити, в итоге чем только не позанимался, а сейчас в Анриле и посматриваю на мод сцену(гмод2/кор).

Изначально ты делаешь не игру. Ты делаешь прототип или демо-версию. Моды хотя и не обладают всеми возможностями движков, но позволяют довольно много и на старте скорее всего возможностей хватит. Стартовать с ними проще, небольшие прототипы делать тоже проще. Если отыщешь "нужную формулу" или поймешь, что мод тебя сильно ограничивает, то пойдешь дальше.

IvanBoykov01
> 2. Можно ли изучая тот же JS с уклоном на игры, потом уйти в другие сферы?
Конечно, JS сейчас вообще везде пихают. Но в любом случае, если захочешь работать кодером придется учить несколько ЯПов.

IvanBoykov01
> И можно ли вообще чисто на JS сделать полноценную игру и в какой среде
> разработки?
Babylon.js, Three.js. В анриле есть Unreal.js. Да поди что и к юнити можно что то подключить(мне там не зачем я хз =)

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

IvanBoykov01
> 3. Но именно такой язык поддерживает юнити, самая популярная среда разработки
> инди игр, почему бы тогда не погрязнуть с головой все таки в шарп?
С чего вдруг самая?
Ну я уже в первом посте объяснил проблемы статической типизации. Но опять же мб это твой путь, тут я хз.

DanQuimby
> Тем более для себя все же лучше понять что такое ООП и др приколюшки чем
> "быдлокодить" на JS
Быдлокодить можно и на С++, только на JS ты стартанешь через месяцок, а на шарпе меяцев через шесть.

#6
(Правка: 2:20) 2:17, 6 июля 2021

IvanBoykov01
> С чего начать изучать юнити, если я хочу сам программировать?

Поскольку «не программист от слова совсем», то, я думаю, с собственно программирования, не залезая сильно в Unity.

> Книг по С# много, но все ли они подходят конкретно под юнити? не хотелось бы
> погрязнуть в трясине коддинга, через N-е количество времени поняв, что я изучаю
> не то направление.

Советовать не буду, не в курсе книг. Замечу только, что тут надо будет как бы три отдельных навыка получить:

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

2. Научиться конкретному языку программирования и знать его базовые библиотеки. Научиться излагать свои мысли на этом языке. По аналогии с естественными языками ― выучить их грамматику и базовую лексику.

3. Выучить предметную область, т.е. о чём и какими терминами ты на этом языке будешь говорить (Unity, MonoGame, WinForms, WPF, ASP.NET...) Аналогия ― выучить физику, математику или биологию.

Навык программирования более-менее универсален. Язык C# в Unity тот же самый, что и вне Unity. Библиотеки функций, которые придётся использовать, какие-то общие, какие-то отличаются. Для всех новичков неочевидная проблема понять, где проходит граница между изучаемым языком и доступными для использования библиотеками.

#7
(Правка: 16:00) 3:42, 6 июля 2021

IvanBoykov01
Я сначал изучал 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# здесь вообще будет мелочью в итоге. Я вот сейчас даже иногда жалею что слишком сильно ушел в некрестовый кодинг (на самом деле нет, т.к. мне нравится и за это хорошо платят, но понимаю что это фактически предательство мечты о разработке игр).

#8
3:43, 6 июля 2021

IvanBoykov01
> C# С чего начать?
писать программы которые что то делают, научиться гуглить и искать ответы, научиться исправлять ошибки в программах.
Этого тебе наверное на год хватит

#9
9:55, 6 июля 2021

kkolyan
> В топку ООП
золотые слова

#10
(Правка: 10:12) 9:57, 6 июля 2021

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

Помню фри версию GM 5.1 чтоли(2004 год?), с кучей ограничений, там еще нельзя было спрайт повернуть вокруг своей оси! И накрылась моя "демка" с хот ситом и 2 самолетиками воющими друг против друга =(

Ну кстати к модами и UGC(роблокс/кор) можно добавить и вот такие вещи как GMS, Construct, Stencyl(жив еще?). Все зависит от выбранного жанра. И да вполне не зашкварно стартовать с них. Только выбрать тот чья экосистема максимально близка к идеи игры.

Вот я перед тем как стартануть с Юнити, разбирал альтернативы, мб полезно будет:
https://docs.google.com/document/d/1-nVKA6z0cOtLcD2-N4QaxaCZoKPXW… t?usp=sharing

#11
(Правка: 19:17) 19:13, 6 июля 2021

IvanBoykov01
Начиная почти с нуля, чтобы стать программистом уйдет несколько лет полного увлеченного погружения, с программированием даже во сне. Готов в к такому? И через несколько лет ты не будешь суперспецом, а только достигнешь минимального уровня, за который согласны платить. В этой профессии очень не быстрый старт.

Язык программирования выучить можно относительно быстро, научиться его не во вред себе использовать многократно сложнее.

#12
11:06, 7 июля 2021

kkolyan
> Я вот сейчас даже иногда жалею что слишком сильно ушел в некрестовый кодинг (на
> самом деле нет, т.к. мне нравится и за это хорошо платят, но понимаю что это
> фактически предательство мечты о разработке игр).
У меня отличие, что я крестами и не занимался считай, занимался другим. Но по сути один в один.

#13
(Правка: 22:09) 17:18, 7 июля 2021

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

PS: хотя я ярый противник визуальных скриптов для игровой логики, поэтому только код, а в редактор выводить только конфигурируемые параметры.

#14
18:50, 14 авг. 2021

kkolyan
> 2. Путь геймдев-универсала.
>
> "Учить" язык только по ошибкам компилятора, примерам из документации и
> StackOverflow. В топку ООП. В топку Шилдта. Вот реально, забудьте. оно не нужно
> - это пустая трата времени в этом сценарии. Рассматривайте C# просто как
> временный инструмент, решающий проблемы здесь и сейчас
> Да, вам придется освоить базовые программерские навыки - понимать что такое
> переменная, чем она отличается от поля и тому подобное. Но не надо лезть в
> архитектуру и пытаться все запилить красиво.
> Делайте все тупо на куче простеньких MonoBehaviour. Т.е. просто открываете
Вот спасибо вам огромнейшее!!! То что искал. Немного досадно что уже запилил тему рядом в тупыми вопросами. Но не ожидал, такой прекрасный пинок, мотиватор, психотерапевтатор, найти в разделе программирование.
Спасибо!

Страницы: 1 2 3 Следующая »
UnityФорумПрограммирование