И снова хочу в геймдев

Да-да, это очередной пост "я_хачу_в_геймдев_памагите!", но прошу не сильно минусить и не хейтить, т. к. это не просто порыв души, а настоянный в 3 месяца порыв души.
Мне потребовалось это время, чтобы структурировать свои вопросы и избежать в посте выражение той попоболи, которую испытываю. Насколько это получилось — судить вам, но на мой взгляд, очень плохо.
Итак, исходные данные такие же как и у многих, кто писал подобные посты: 35+ лет, кризис среднего возраста, имеющаяся карьера не приносит радости и вообще всегда хотел в компутеры. Более того, через год-два будет необходима профессия, где возможна удаленная работа.

Осознав всё это, взялся за учёбу, а именно ulearn. me, курс Unity junior programmer на coursera, курсы от самого Unity, пара учебников по Unity. И на всех этих ресурсах я столкнулся с одной и той же проблемой: основы рассказываются очень подробно, всё понятно, но в какой-то момент вещание начинается как будто на другом языке. Чаще всего это происходит после ознакомления с основами ООП. Лучше всего моё обучение иллюстрирует эта боянистая картинка:

И снова хочу в геймдев

Ладно, подумал я, нет ничего лучше, чем практика. Немного умею в Blender, и при этом совсем не умею в 2D графику, поэтому будем пилить 3D проект. Начал за здравие: амбиции, интерес, глаза горят, руки делают! Но очень быстро попал в цикл между 2 и 3 этапом модели Келли-Конора:

Взято отсюда https://www.youtube.com/watch?v=E8kgNpaXntU
Взято отсюда https://www.youtube.com/watch?v=E8kgNpaXntU

На 3 этапе цикла, в точке момента отчаяния, я дважды застрял на 2-3 недели, когда вообще не включал Unity. Причиной этому становился скрипт, который по всем правилам должен работать, но не работает. Боюсь, что сейчас могу застрять на нём в очередной раз, поэтому и решил обратиться сюда за помощью. А нужна мне помощь, потому что:

- скрипт работает как и задумывалось на 10 объектах в сцене. На 11-м объекте работает через. .опу. Причину за три месяца я так и не нашёл, плюнул, просто принял за должное, что это баг и он будет жить;

- успокоился после предыдущего пункта, продолжил работу. В сцене две коробки, по щелчку одна должна уехать влево, вторая вправо. С левой скрипт сработал, правая улетела на 100 метров. Скрипт один, объекты идентичны. Ладно, второй баг, пусть живет;

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

- везде вижу, что использовать Find или ещё хуже FindObjectsWithTag — есть неправильно и не богоугодно. Но нигде не нашёл инфы какие же альтернативы использовать, если объекты взаимосвязаны. Я стараюсь избегать этих вещей, но не везде получается;

- в коде некоторые строки прямо режут глаз, вот прям чувствую, что это не надо так делать, но червячок разгильдяйства успокаивает меня;

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

- ещё десяток вопросов менее масштабных: что лучше использовать анимацию готовую или скрипт для движения некоторых объектов? Два скрипта с OnMouseDown на одном объекте — совсем зашквар или норм? и т. д. и т. п.

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

Весь мой проект, хотя хотел сделать образцовым. 
Весь мой проект, хотя хотел сделать образцовым. 

А теперь, собственно говоря, цель моего поста: помогите! Помогите советом. Я бы пошёл на курсы, где дадут структурированные знания, где после основ ООП дадут несколько упражнений, чтобы набить руку на их использование, где потом помогут изучить некоторые паттерны с практикой, но у меня сложилось впечатление, что таких курсов попросту нет. Я нашёл, что с этого года даже в РАНХиГС есть программа по разработке игр, даже готов был отвалить немалые деньги за обучение, но почитал программу и понял, что не сильно-то она отличается от прочих инфоцыган (курс 3D моделирования 2 недели, ну-ну) .

Я готов читать учебные материалы, но они у меня не откладываются без практики от слова совсем. Про основы ООП я прочитал в 5 источниках, их полезность я вроде осознал, но так и не понял толком как их применять (чисто с точки зрения C#).

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

И второй вопрос: есть ли возможность сейчас куда-то устроиться типа практикантом, грубо говоря, "за еду"? Есть ли у компаний интерес "вырастить" сотрудника под себя?

P. S. ещё в отчаяние вгоняют вакансии на HH, например, сегодня встретил вакансию на ЗП до 50 000 руб. с требованием знаний DK FaceBook, Appmetrica, OneSignal, TikTok, AppsFlyer. Опыт работы с WebView, Unity 3D, языки программирования: C#, xcode, а я из этих слов только Unity 3D и С# знаю.

P. P. S. разумеется, читал посты на этом ресурсе, но и по ним остались вопросы, например:

- прошёл практически тот же путь, что и автор этого поста, но на вопросы интервью, которые привёл автор, ответить не могу;

- смогу выполнить тестовые задания из этого поста, чтобы они работали, но не смогу соблюсти все требования к коду (некоторые мне просто непонятны: да, могу загуглить, чтобы понять их суть, но пока не хочу, т. к. пытаюсь честно оценить свои знания).

88
58 комментариев

В общем, буду рад любым советамПисать в правильный подсайт и не ловить минусы за то, что пишешь в неправильный

6

За совет спасибо. Пардон, что не туда, это мой первый пост и всех подсайтов не знаю. Есть ли возможность перенести уже готовый пост, не подскажешь?

1

Комментарий недоступен

3

Комментарий недоступен

1

Как чел который имеет 7+ опыта в программировании и поработал на юньке около года скажу так - по хорошему забей хер. Я хз кто нужен в геймдев конторах и откуда они собираются находить этих гениев. Всем нужен рукастый сеньор на зарплату мидла который им сделает красиво, без онбординга погрузится в проект (а лучше потащит его на своем горбу) и по возможности будет еще модельки в свободное (от основной работы) время для проекта моделить и читать постановки от геймдиза телепатически. Т.е. наверное есть хорошие конторы, но они ищут только очень скиловых работяг и скорее всего не с улицы, а по знакомству. Например с моим опытом они мне просто не отвечали на письма (5 лет пыходжса в ерп, 1 год юньки, год шарпов), т.е. им тупо не интересно возиться с челом которого надо хоть как-то доучивать. Возможно там все отюривается на уровне ХРюши которая такая "надо 3 года юнити, тут 1 год, не подходит".

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

По твоим вопросам:
1. Первое что надо делать чтобы стать программистом понимающим что происходит в проекте - думать за машину. Например у тебя есть твой скрипт который на 11 элементе ведет себя не правильно. Что надо сделать? В голове прогнать весь процесс для 10 элементов и на 11 у тебя должно придти озарение "ага, у меня здесь асинхронно запускается для каждого таймер который делает проверку больше ли ИДшник суности чем 10, а у меня 11, получается вот этот кусок не запускается". Т.е. в голове у тебя строится вся информационная структура актуальная для текущей задачи и удерживается пока ты ее не решишь. Это как раз и есть та причина почему програмистов не стоит отвелкать. Как на картинке https://cs9.pikabu.ru/post_img/big/2018/03/08/11/1520532613119352287.jpg

2. Возможно проблема не в твоем скрипте непосредственно, а в том что ты запускаешь силами юнити или происходит фоном. Изучи основной порядок выполнения разных моментов в юнити. https://docs.unity3d.com/ru/2019.4/Manual/ExecutionOrder.html

3. По поводу поиска сущностей на лету - не делай так. Попробуй вникнуть в концепцию DI (в юнити это делает сторонний плагин Zenject) https://www.youtube.com/watch?v=IS2YUIb_w_M
Если надо делать это не на ходу и не хочешь зенджект - делай публичные поля и перетаскивай объекты через редактор. Если надо хранить коллекцию созданных на лету объектов - в каком нибудь создающем объекте ххрани их список. На крайняк поиск делай только на Start() или Awake(), но каких-то объектов может не найти, т.к. создаются просыпаются они не одномоментно.

4. Так же поизучай концепцию Action/Event/Delegate, именно C#. UnityEvents используй непосредственно для встроенных штук, типа интерфейса. Для остального лучше используй шарповое.

Успехов.

3