Ошибка, которая стоила мне 3 полных рабочих дня…
В начале этой недели у меня стояла задача - пофиксить вылеты, которые мы нашли во время тестов. Задача вроде бы не сильно сложная: найти причину и устранить ее. Но проблемы появились с самого начала…
Всегда перед началом выполнения какой то задачи, я простраиваю небольшой план в голове, как именно я буду ее решать. В данном случае было все достаточно просто:
1. Повторить ошибку и изучить данные, которые выдает Юнити
2. Найти причину путем несложные проставлений меток (обычно я использую обычный дебаг вывод, просто и быстро)
3. Исправить
Вот только, проблемы появились еще до 1 пункта.
Если вдруг вы работали с Photon Quantum, вы знаете ошибку расхождения состояний (Halting Error). Во время ее появления Юнити не выводит причину ошибки, а все из-за того, что расхождение состояний фиксируется в конце кадра (иногда даже через несколько кадров после совершения расхождения). Это специфика детерминированной системы)
Так вот. На самом деле я уже решал проблемы данного типа, но прикол в том, что после ошибки всегда выдавалось окно с данными, которые разошлись и я мог легко понять, в чем проблема…
В этот раз такого не было. Меня это немного напрягло
Вкратце: я фиксил реконект игроков к лобби. Так как игра у нас с закрытым лобби, реконект нужно было писать самостоятельно.
Изначально я думал что проблема в том, что я не понимаю как работает переподключение и искал проьлему там. Около 8-10 часов я рылся в коде, написанном в самом плагине, но все вроде было хорошо. Реконнект работал. Вот только через некоторое время в игре все равно появлялась эта ошибка.
* прошло 2 дня
я перепробовал все, пересмотрел всю документацию по запуску и реконекту к лобби, посмотрел гайд на их канале, и начал думать, что скорее всего проблема кроется совсем в другом.
И тут я решил проверить, если я уберу реконект и повторю все те же операции, что то поменяется? И знаете что?…
НЕТ!!! Проблема осталась. Все же ошибка происходила в другом месте…
Пошел третий день.
Я начал искать проблему в процессе игры. В начале просто проставлял дебаг выводы, но ни к чему это не привело. Всегда ошибка выводилась после всех выводов. И тут я понял, что детект ошибки не привязан к конкретному событию в коде, он всегда выводится после завершения всего кадра апдейта.
Я отчаялся. И начал комментировать весь код. Постепенно…
Раз за разом я комментировал все больше и больше кода. Но ошибка не пропадала. И вот в я наконец-то нашел строку, которая вызывает ошибку.. Это был момент освобождения массива (f.FreeList)
Но я все равно не понимал, что не так. Всегда работало, а тут вдруг перестало. По переписывался с нейронкой и пришел к выводу что при переподключении все ссылки меняются и их нужно заново инициализировать. Я поверил и переинициализировал все.
Алилуя! Заработало. Ошибки не стало. Но остался один нюанс.
Я не верил, что так топорно решать проблему - это правильное решение.
Я решил обратиться к истокам и перечитал документацию по динамическим массивам. И вдруг я нашел роковую строчку: после освобождения массива его необходимо обнулить (= default). В первый раз, когда я читал документацию, я достаточно торопился и пытался успеть сделать задачу в срок. Но в итоге, оно стоило мне очень много времени и нервов. Я 3 дня подряд ложился после 1-2 ночи (мой режим был 23-8)
Не буду подводить итоги или какую то мораль. Все и так понятно, стоило внимательно и полностью прочитать все, а потом уже приступать к реализации
#ЖизньArtemiZ
В начале этой недели у меня стояла задача - пофиксить вылеты, которые мы нашли во время тестов. Задача вроде бы не сильно сложная: найти причину и устранить ее. Но проблемы появились с самого начала…
Всегда перед началом выполнения какой то задачи, я простраиваю небольшой план в голове, как именно я буду ее решать. В данном случае было все достаточно просто:
1. Повторить ошибку и изучить данные, которые выдает Юнити
2. Найти причину путем несложные проставлений меток (обычно я использую обычный дебаг вывод, просто и быстро)
3. Исправить
Вот только, проблемы появились еще до 1 пункта.
Если вдруг вы работали с Photon Quantum, вы знаете ошибку расхождения состояний (Halting Error). Во время ее появления Юнити не выводит причину ошибки, а все из-за того, что расхождение состояний фиксируется в конце кадра (иногда даже через несколько кадров после совершения расхождения). Это специфика детерминированной системы)
Так вот. На самом деле я уже решал проблемы данного типа, но прикол в том, что после ошибки всегда выдавалось окно с данными, которые разошлись и я мог легко понять, в чем проблема…
В этот раз такого не было. Меня это немного напрягло
Вкратце: я фиксил реконект игроков к лобби. Так как игра у нас с закрытым лобби, реконект нужно было писать самостоятельно.
Изначально я думал что проблема в том, что я не понимаю как работает переподключение и искал проьлему там. Около 8-10 часов я рылся в коде, написанном в самом плагине, но все вроде было хорошо. Реконнект работал. Вот только через некоторое время в игре все равно появлялась эта ошибка.
* прошло 2 дня
я перепробовал все, пересмотрел всю документацию по запуску и реконекту к лобби, посмотрел гайд на их канале, и начал думать, что скорее всего проблема кроется совсем в другом.
И тут я решил проверить, если я уберу реконект и повторю все те же операции, что то поменяется? И знаете что?…
НЕТ!!! Проблема осталась. Все же ошибка происходила в другом месте…
Пошел третий день.
Я начал искать проблему в процессе игры. В начале просто проставлял дебаг выводы, но ни к чему это не привело. Всегда ошибка выводилась после всех выводов. И тут я понял, что детект ошибки не привязан к конкретному событию в коде, он всегда выводится после завершения всего кадра апдейта.
Я отчаялся. И начал комментировать весь код. Постепенно…
Раз за разом я комментировал все больше и больше кода. Но ошибка не пропадала. И вот в я наконец-то нашел строку, которая вызывает ошибку.. Это был момент освобождения массива (f.FreeList)
Но я все равно не понимал, что не так. Всегда работало, а тут вдруг перестало. По переписывался с нейронкой и пришел к выводу что при переподключении все ссылки меняются и их нужно заново инициализировать. Я поверил и переинициализировал все.
Алилуя! Заработало. Ошибки не стало. Но остался один нюанс.
Я не верил, что так топорно решать проблему - это правильное решение.
Я решил обратиться к истокам и перечитал документацию по динамическим массивам. И вдруг я нашел роковую строчку: после освобождения массива его необходимо обнулить (= default). В первый раз, когда я читал документацию, я достаточно торопился и пытался успеть сделать задачу в срок. Но в итоге, оно стоило мне очень много времени и нервов. Я 3 дня подряд ложился после 1-2 ночи (мой режим был 23-8)
Не буду подводить итоги или какую то мораль. Все и так понятно, стоило внимательно и полностью прочитать все, а потом уже приступать к реализации
#ЖизньArtemiZ
Я немного приболел, видимо в поликлинике недавно заразился. Вроде уже поправляюсь, но сил пока что то делать нет)
Наверное до конца года особо контента не будет, я постараюсь что нибудь выкладывать, но не обещаю.
Сейчас я готовлю идеи на следующий год.
Мы продолжим работу над авточесом, я буду скидывать вам спойлеры)
Я наконец-то подобрал для себя подходящий темп обучения, поэтому периодически буду делиться результатами.
Тень - мой пет проект, который я планирую активно развивать в следующем году. Если все пойдет по плану, то контента будет много)
Еще в планах поучаствовать в геймджемах.
В общем, идей много, все хочется сделать.
Рассказывайте свои планы в комментариях, а я пойду лечиться)
#ЖизньArtemiZ
Наверное до конца года особо контента не будет, я постараюсь что нибудь выкладывать, но не обещаю.
Сейчас я готовлю идеи на следующий год.
Мы продолжим работу над авточесом, я буду скидывать вам спойлеры)
Я наконец-то подобрал для себя подходящий темп обучения, поэтому периодически буду делиться результатами.
Тень - мой пет проект, который я планирую активно развивать в следующем году. Если все пойдет по плану, то контента будет много)
Еще в планах поучаствовать в геймджемах.
В общем, идей много, все хочется сделать.
Рассказывайте свои планы в комментариях, а я пойду лечиться)
#ЖизньArtemiZ
Моя девушка создала канал, если есть любители визуала, подпишитесь, пожалуйста:)
(Она иллюстратор, будет рисовать для моих игр, в том числе)
https://tttttt.me/nastyaschaos
#ЖизньArtemiZ
(Она иллюстратор, будет рисовать для моих игр, в том числе)
https://tttttt.me/nastyaschaos
#ЖизньArtemiZ
#Фишки - Посты с полезной информацией про Unity. Расширение, оптимизация или просто совет
#ЖизньArtemiZ - Посты с личной информацией. О том, как я стал программистом и как провожу свое время
#Спойлер - Посты - тизеры к моим текущим проектам. У меня есть как рабочие проекты, так и личные.
#Мнение - рандомный пост с моим личным мнением на ту или иную тему. Скорее всего связанную с Unity
Путеводитель для начинающего разработчика игр на Unity
Нейросети в разработке игр на Unity
Порядок расположения элементов в классе
Как я докатился до жизни такой - Пост о том, как я стал программистом
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegraph
Путеводитель для начинающего разработчика игр на Unity
Привет! 👋 Вы начинаете путь в разработке игр на Unity - одном из самых популярных движков. Эта статья станет вашим путеводителем на первые 1-2 года обучения, предоставив структурированный план, рекомендации и ресурсы для создания собственных игр. 🎮 Мы рассмотрим…
Как я докатился до жизни такой часть 1
Меня зовут - Артем. Я очень люблю игры! Особенно их создавать)
4 года мне понадобилось, чтобы пройти путь «От идеи до реализации», а точнее от желания начать создавать игры, до работы мечты!
В конце 11 класса передо мной стояла непростая задача - выбрать куда поступать. До этого я очень любил физику и писал много олимпиад по ней, но идти работать по этому направлению не было никакого желания. А хотел я делать игры…
Вот только программировать я особо не умел. Был у меня опыт написания простеньких программ на c++, но не больше «калькулятора».
Но большое желание - лучшая мотивация. За одно лето я изучил азы c# и Unity, но начался универ…
Скоро узнаете, что было дальше! А пока, пишите, как вы пришли к идее делать игры)
Продолжение
#ЖизньArtemiZ
Меня зовут - Артем. Я очень люблю игры! Особенно их создавать)
4 года мне понадобилось, чтобы пройти путь «От идеи до реализации», а точнее от желания начать создавать игры, до работы мечты!
В конце 11 класса передо мной стояла непростая задача - выбрать куда поступать. До этого я очень любил физику и писал много олимпиад по ней, но идти работать по этому направлению не было никакого желания. А хотел я делать игры…
Вот только программировать я особо не умел. Был у меня опыт написания простеньких программ на c++, но не больше «калькулятора».
Но большое желание - лучшая мотивация. За одно лето я изучил азы c# и Unity, но начался универ…
Скоро узнаете, что было дальше! А пока, пишите, как вы пришли к идее делать игры)
Продолжение
#ЖизньArtemiZ
Telegram
Готова ли Игра?
Как я докатился до жизни такой часть 2
Поступил я на направление «Программная инженерия», вроде программирование, но интереса к учебе вообще не было. Такой я человек, мне нужен результат, а теория вгоняет в депрессию:(
Первый раз я отчислился, поступил…
Поступил я на направление «Программная инженерия», вроде программирование, но интереса к учебе вообще не было. Такой я человек, мне нужен результат, а теория вгоняет в депрессию:(
Первый раз я отчислился, поступил…
Как я докатился до жизни такой часть 2
Начало истории
Поступил я на направление «Программная инженерия», вроде программирование, но интереса к учебе вообще не было. Такой я человек, мне нужен результат, а теория вгоняет в депрессию:(
Первый раз я отчислился, поступил в другой вуз, взял академ, вернулся и опять отчислился. На все это ушло 3,5 года, а прогресса в плане разработки игр почти не было. Но параллельно я проходил курс Skillbox, а потом Ромы Сакутина.
В итоге, перед зимней сессией я окончательно отчислился с пониманием, что больше не вернусь туда.
Начался период «Возьмите меня куда-нибудь»
На этот момент у меня в портфолио был всего один маленький проект - курсовая Скиллбокса и все:)
А работу искать надо...
🔥 - если ждете продолжения, чтобы я знал, что такие посты стоит иногда писать)
Продолжение
#ЖизньArtemiZ
Начало истории
Поступил я на направление «Программная инженерия», вроде программирование, но интереса к учебе вообще не было. Такой я человек, мне нужен результат, а теория вгоняет в депрессию:(
Первый раз я отчислился, поступил в другой вуз, взял академ, вернулся и опять отчислился. На все это ушло 3,5 года, а прогресса в плане разработки игр почти не было. Но параллельно я проходил курс Skillbox, а потом Ромы Сакутина.
В итоге, перед зимней сессией я окончательно отчислился с пониманием, что больше не вернусь туда.
Начался период «Возьмите меня куда-нибудь»
На этот момент у меня в портфолио был всего один маленький проект - курсовая Скиллбокса и все:)
А работу искать надо...
Продолжение
#ЖизньArtemiZ
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram
Готова ли Игра?
Как я докатился до жизни такой часть 1
Меня зовут - Артем. Я очень люблю игры! Особенно их создавать)
4 года мне понадобилось, чтобы пройти путь «От идеи до реализации», а точнее от желания начать создавать игры, до работы мечты!
В конце 11 класса передо…
Меня зовут - Артем. Я очень люблю игры! Особенно их создавать)
4 года мне понадобилось, чтобы пройти путь «От идеи до реализации», а точнее от желания начать создавать игры, до работы мечты!
В конце 11 класса передо…
Как я докатился до жизни такой часть 3
Начало истории
Естественно, с таким багажом никто брать не хотел.
В феврале я все таки нашел вакансию на ХедХантере, где я прошел собеседование и начал работать. Но было один подвох - 20к в месяц. За такие деньги в Питере хватит максимум на еду. А руководство требовало делать невыполнимые задачи.
Как вы поняли, долго я там не задержался. Через неделю уже уволился, даже не рассчитали...
Пошел дальше на hh.ru. Около недели я откликался и неожиданно меня пригласили на ПК проект в стим, еще и с очень интересной идеей!
Прошел собеседование, ответил на вопросы, и дал оценку по времени выполнения проекта - 3 месяца. Это было максимально сжатые сроки, за которые я скорее всего успел.
Но и тут оказался небольшой подвох! Меня попросили сжать сроки еще больше! Мол, 3 месяца для такого проекта слишком много... Естественно, когда ты устраиваешься на первую работу, ты готов демпинговать, лишь бы взяли. Пришлось сказать 1,5 месяца.
В итоге: за первый месяц - я не успел практически ничего. Прошло 2 месяца - я сделал меньше половины, но менеджер сказал, что дает мне еще времени. Прошло 3 месяца - я все еще делал проект...
Если вы думали, что все так просто - не переживайте, все еще впереди! Жду комментарии от вас, если хотите узнать финал истории)
Продолжение
#ЖизньArtemiZ
Начало истории
Естественно, с таким багажом никто брать не хотел.
В феврале я все таки нашел вакансию на ХедХантере, где я прошел собеседование и начал работать. Но было один подвох - 20к в месяц. За такие деньги в Питере хватит максимум на еду. А руководство требовало делать невыполнимые задачи.
Как вы поняли, долго я там не задержался. Через неделю уже уволился, даже не рассчитали...
Пошел дальше на hh.ru. Около недели я откликался и неожиданно меня пригласили на ПК проект в стим, еще и с очень интересной идеей!
Прошел собеседование, ответил на вопросы, и дал оценку по времени выполнения проекта - 3 месяца. Это было максимально сжатые сроки, за которые я скорее всего успел.
Но и тут оказался небольшой подвох! Меня попросили сжать сроки еще больше! Мол, 3 месяца для такого проекта слишком много... Естественно, когда ты устраиваешься на первую работу, ты готов демпинговать, лишь бы взяли. Пришлось сказать 1,5 месяца.
В итоге: за первый месяц - я не успел практически ничего. Прошло 2 месяца - я сделал меньше половины, но менеджер сказал, что дает мне еще времени. Прошло 3 месяца - я все еще делал проект...
Продолжение
#ЖизньArtemiZ
Telegram
Готова ли Игра?
Как я докатился до жизни такой часть 1
Меня зовут - Артем. Я очень люблю игры! Особенно их создавать)
4 года мне понадобилось, чтобы пройти путь «От идеи до реализации», а точнее от желания начать создавать игры, до работы мечты!
В конце 11 класса передо…
Меня зовут - Артем. Я очень люблю игры! Особенно их создавать)
4 года мне понадобилось, чтобы пройти путь «От идеи до реализации», а точнее от желания начать создавать игры, до работы мечты!
В конце 11 класса передо…
Как я докатился до жизни такой часть 4
Начало истории
Ах да, я же вам не рассказал еще одну деталь. Во время заключения договора на разработки игры я указывал срок работы и оплату после окончания проекта. Да - оплата была проектная, а значит чем дольше я его делал, тем меньше в месяц я бы получил. А указал я в договоре не сильно большую сумму, а за 3 месяця я скатился до уровня первой работы и даже ниже. В общем, все было ужасно, еще и сроки поджимали...
Внезапно мне предлагают пройти собеседование в зарубежный стартап. К слову, на протяжении всего времени я периодически откликался на различные вакансии. Но тут было что-то странное, мне предложили работу за рубежом с окладомв 10 раз больше!
Я думаю, вы не сомневаетесь, что я сделал: написал своему работодателю, что увольняюсь... Если бы все было так просто...
По договору, если я не сдаю работу, то обязан заплатить неустойку. Но продолжать работать мне не особо хотелось, учитывая предложение от нового работодателя.
В общем, я заплатил неустойку и, уже больше полгода, работаю в великолепном коллективе из 5 человек, с великолепными условиями. Я уже получил огромный опыт, и сейчас я могу смело назвать себя хорошим разработчиком, а не просто кодером, который только начинает изучать сферу)
#ЖизньArtemiZ
Начало истории
Ах да, я же вам не рассказал еще одну деталь. Во время заключения договора на разработки игры я указывал срок работы и оплату после окончания проекта. Да - оплата была проектная, а значит чем дольше я его делал, тем меньше в месяц я бы получил. А указал я в договоре не сильно большую сумму, а за 3 месяця я скатился до уровня первой работы и даже ниже. В общем, все было ужасно, еще и сроки поджимали...
Внезапно мне предлагают пройти собеседование в зарубежный стартап. К слову, на протяжении всего времени я периодически откликался на различные вакансии. Но тут было что-то странное, мне предложили работу за рубежом с окладом
Я думаю, вы не сомневаетесь, что я сделал: написал своему работодателю, что увольняюсь... Если бы все было так просто...
По договору, если я не сдаю работу, то обязан заплатить неустойку. Но продолжать работать мне не особо хотелось, учитывая предложение от нового работодателя.
В общем, я заплатил неустойку и, уже больше полгода, работаю в великолепном коллективе из 5 человек, с великолепными условиями. Я уже получил огромный опыт, и сейчас я могу смело назвать себя хорошим разработчиком, а не просто кодером, который только начинает изучать сферу)
#ЖизньArtemiZ
Telegram
Готова ли Игра?
Как я докатился до жизни такой часть 1
Меня зовут - Артем. Я очень люблю игры! Особенно их создавать)
4 года мне понадобилось, чтобы пройти путь «От идеи до реализации», а точнее от желания начать создавать игры, до работы мечты!
В конце 11 класса передо…
Меня зовут - Артем. Я очень люблю игры! Особенно их создавать)
4 года мне понадобилось, чтобы пройти путь «От идеи до реализации», а точнее от желания начать создавать игры, до работы мечты!
В конце 11 класса передо…