Самые глупые 4 ошибки в Unity, после которых ты не сможешь выпустить игру. #2

  Рет қаралды 56,266

Роман Сакутин

Роман Сакутин

4 жыл бұрын

Разобрали 4 ошибки которые значительно попортят вам в жизнь. А какие ошибки знаете вы?
БОРИС (Бесплатное Обучение Разработка Игр) - ijunior.ru/boris/promo01?...
C# Light. С нуля до первой зарплаты - ijunior.ru/csharp-light?...
МОЯ КНИГА - csharpbook.sakutin.ru
ГРУППА КАНАЛА - holymonkey
ШКОЛА ПРОГРАММИРОВАНИЯ ЯЮНИОР - holymonkey_sandbox
Я В VK - rsakutin
INSTA - / sakutinhuytin
ЧАТ В ТЕЛЕГЕ - t.me/csharp_faggots_fan_club

Пікірлер: 72
@Nikolai2033
@Nikolai2033 3 жыл бұрын
Дружище, сделай видос, как организовать общую структуру проекта в юнити. Имею ввиду кодовую базу. Я начинал учить юнити, ещё больше года назад, сейчас впервые устроился и несколько месяцев работаю в net core приложении, буквально только прошёл испытательный срок. В enterprise очень много разговоров о правильной архитектуре приложений, о чём я раньше задумывался, но даже не знал, как сформулировать эту проблему. А как проектировать в юнити?
@user-ww8uq6dl2u
@user-ww8uq6dl2u 4 жыл бұрын
вот лучше так, чем разбор кода без показухи. лукаса в студию!
@BelladonGameDeverUA
@BelladonGameDeverUA 4 жыл бұрын
Блин, уже пятый раз это слышу и все равно многие до сих пор так делают. И не только новички. Очень полезное видео. Спасибо.
@unitynavigator3328
@unitynavigator3328 4 жыл бұрын
Я один жду, что русским игроделам откроют Data Oriented Design парадигму и ECS? На каждой конференции уже лет 5 хвалят, юнити свой движок перепиливает под ecs, а ру игроделов до сих пор пичкают ООП...
@user-ff8sh4ow2t
@user-ff8sh4ow2t 2 жыл бұрын
Я из за этих ошибок похоронил свой самый масштабный проект😓
@bendon2502
@bendon2502 Жыл бұрын
Тоже самое ет пз
@roman1324
@roman1324 4 жыл бұрын
1:17 вариант Good - не совсем гуд,- два раза делаешь одну и туже операцию. Лучше сделать один раз и получить ссылку и если ссылка не null , то с ней работать.
@rsakutin
@rsakutin 4 жыл бұрын
В данном случае всё конечно же сокращается и вовсе до: GetComponent()?.ApplyDamage(100);
@roman1324
@roman1324 4 жыл бұрын
@@rsakutin , да но оператор "?" это прикрывашка (не панацея) багов по сути =)
@rsakutin
@rsakutin 4 жыл бұрын
@@roman1324 А проверка на null в ифе?
@roman1324
@roman1324 4 жыл бұрын
@@rsakutin а проверка в if нет, потому что есть else. Я просто видел паровозы из "?" и при не срабатывании хз на чем там прервалось.
@kandreyk9159
@kandreyk9159 4 жыл бұрын
@@roman1324 паровозы нарушают Закон Деметры, так что ? не виноват
@jesusdarkjewel9456
@jesusdarkjewel9456 4 жыл бұрын
Жги!
@user-jw6kw9km3s
@user-jw6kw9km3s 7 ай бұрын
Привет!Можешь ответить,ты не знаешь почему в юнити 3д при запуске проекта,то у меня качество ухудшаеться,даже пиксели видно,ты не щнаешь почему?или так должно быть?
@positive6092
@positive6092 2 жыл бұрын
Роман ,если можешь сними видео по настройке юнити для работы ,java,sdk,ndk,я только начал учить с# и юнити ,что бы я не сделал каждый новый проект или просто через какое то время вылезает куча ошибок не билдится и тд
@valerysemenkin6024
@valerysemenkin6024 2 жыл бұрын
Спасибо, Рома❤❤❤
@ellgood_aka_rusni_pizda
@ellgood_aka_rusni_pizda 4 жыл бұрын
Дядя, сколько ты месяцев программируешь? Твой Кот на уровне Высоцкого!
@rsakutin
@rsakutin 4 жыл бұрын
84 с перерывами
@killerferplay614
@killerferplay614 3 жыл бұрын
84 чего?
@user-cx1vt1kp1j
@user-cx1vt1kp1j 4 жыл бұрын
По поводу отписки в OnDisable: Был недавно такой случай что в OnDisable объект на котором был эвент был уже уничтожен при выходе их сцены. В таком я применил ScriptOrderExecte, как по мне такой выход мне кажется костыльным, хоть и сами юнитеки это позволяют сделать, поэтому стараюсь его избегать при не обходимости. Но в данной ситуации я к соеления другого решения не нашел.
@shitposting_box
@shitposting_box 3 жыл бұрын
Я пишу отписку от событий в OnDestroy, поскольку некоторые объекты в сцене деактивируются походу игры и активируются заново, а это лишняя подписка-отписка
@user-cx1vt1kp1j
@user-cx1vt1kp1j 3 жыл бұрын
@@shitposting_box нее, у меня тут другая ситуация, у меня объект на который я был подписан был уже уничтожен, когда я пытался от него отписаться в OnDisable. А вот по водо отписки в OnDestroy тут разные ситуации могут быть. Например если у тебя объект из пула подписывается на OnEnable а отписывается в OnDisable. Так будет правильнее, чем когда он будет отписываться только при уничтожении. Это плохо когда у тебя следующая ситуация - объект не отписавшись ушёл в пулл и его не видно на сцене. И вдруг происходит событие, и оно происходит столько раз, сколько обектов на него подписано. Например игрок может получить больше очков чем на данный момент на сцене есть. Это косяк.
@shitposting_box
@shitposting_box 3 жыл бұрын
@@user-cx1vt1kp1j, похоже, ты открыл мне глаза на один из багов в моем проекте. Я все время путаюсь с объектами, что они выполняют, а что нет, когда деактивированы
@Anton-ny6tx
@Anton-ny6tx Жыл бұрын
Видос старый и тд. Но все же умудрился сунуть игрока в хелсбар, как зависимость. 👍
@kawaikami
@kawaikami 4 жыл бұрын
Роман, расскажи пожалуйста про MonoBehavior скрипты. Насколько их много в продакшине? Я использую другой подход, хотя повидал такое, где на каждом объекте по несколько скриптов. (даже б*ть скрипт для сортировки тех самых скриптов висел, и это не смешно). Поэтому, хочу узнать твоё мнение. p.s. Camera.main = плохо, а теги вы (↓) юзаете, как же так :)
@ewgenybelkov2948
@ewgenybelkov2948 4 жыл бұрын
И я видел какой-то видос, где автор рассказывал свою методику работы без mono_behavior. Там была стратегия синглтонов. P.S. - где-то видел негативный комментарий про синглтоны.
@user-ou1ni8cm5m
@user-ou1ni8cm5m 4 жыл бұрын
Понравилась фишка с вэйпоинтами, а я как дурак всё время держал индекс точки куда двигается объект. Оказалось, что можно сделать намного проще. Почему я раньше до такого не додумался? )))
@RomanMurnik
@RomanMurnik 4 жыл бұрын
Рома, ты ошибся вроде. GC потрет обьект если даже есть на него подписки, а ссылок на обьект не будет.
@rsakutin
@rsakutin 4 жыл бұрын
Там обратная ситуация возникает когда не удаляется обьект на который ссылка. Косноязычно описал немного. Кейс: есть некий статический/глоабльный сервис, например подключение к серверу который живет между сценами. На его событие подписался компоненте сцены. При переходе между сценами обьекты которые подписывались останутся и активно будут плеваться ошибками
@voxcake
@voxcake 4 жыл бұрын
Первая и самая главная ошибка - не юзать метод getcomponent в рантайме. вторая ошибка плодить монобехи, пренебрегая использованием ioc, в следствии чего поддержка нормального проекта будет невозможна из-за большой связанности. Узнал себя? Ставь лайк)
@kawaikami
@kawaikami 4 жыл бұрын
тсс!.. не подсказывай им, иначе нормально код ещё писать научаться.
@voxcake
@voxcake 4 жыл бұрын
@@kawaikami я не им, а Роме подсказал)
@user-id1mn7rq5h
@user-id1mn7rq5h 4 жыл бұрын
Можно ссыль про использование ioc c примерами в юнити? Заранее спс
@clydewarrior2255
@clydewarrior2255 Жыл бұрын
Что такое ioc?
@Talmagett
@Talmagett 3 жыл бұрын
3 часть?
@user-mc5de1lg1p
@user-mc5de1lg1p Жыл бұрын
Роман Сакутин, подскажи название проги в который ты на видео пишешь код. знаю поздновато но мне это нужно ну или ещё кто если смотрит видос из 2022 года подскажите ребят!
@miligrim7293
@miligrim7293 Жыл бұрын
Visual studio
@DrTressi
@DrTressi 3 жыл бұрын
Ром, а если у нас стоит бежит и стреляет из автоматов группа игроков? На нужно во-первых, проверить поверхность под ногами каждого, чтобы проиграть правильный звук, во вторых проверить поверхность куда рейкастнул выстрел каждого, чтобы нарисовать правильную декаль и сплеш. В этом случае кол-во GetComponent в кадре будет превышать показатель FPS. Не находишь ли ты это не очень хорошим решением? Может предложишь шуструю реализацию без тегов и имён GO?
@DrTressi
@DrTressi 3 жыл бұрын
@@vatyunga школьники?
@user-zy3xy2xj3o
@user-zy3xy2xj3o Жыл бұрын
помогите пж, что делать если в Game не виден спрайт хотя на сцене он есть
@CutAviator
@CutAviator 2 жыл бұрын
у ошибка CS1525 пишет типо неизвестный символ public и void хотя в прошлом скрипте юнька их воспринимала нормально
@fomgleb
@fomgleb 2 жыл бұрын
Не пойму, как мне найти Player через EnemyMovement? Я тут вижу только FindObjectOfType().transform. А так можно?
@alexanderayvazov7762
@alexanderayvazov7762 2 жыл бұрын
Можно просто по наименованию "Find" писать
@alex_konor2197
@alex_konor2197 Жыл бұрын
Сисшаэрп, пиЭнДжи, ДжЕйПэдж
@-NoName_Artemii
@-NoName_Artemii Жыл бұрын
Существует ли какая-то особая разница между использованием Start и Awake ?
@legotechnicbuilderua7692
@legotechnicbuilderua7692 Жыл бұрын
Awake вызывается перед Start'ом. Если скрипты не противоречат друг другу и не используют переменные, которые изменяются во время выполнения других таких же методов, то разницы никакой. Надеюсь, что понятно объяснил.
@user-gg1wk1fx4b
@user-gg1wk1fx4b 6 ай бұрын
Иногда роляет когда например ты получаешь в Awake компонент, а в Start подписываешь событие с этого компонента, допустим сам компонент появляется на сцене только в Awake тогда если в нем и подписывать его может тупо не быть, поэтому лучше это делать позже в Start
@sanja_dron4512
@sanja_dron4512 2 жыл бұрын
У меня проблема в то, что когда я два раза нажимаю на ошибку у меня открывается все это в блокноте, изминить как то это можно?
@diveloper3580
@diveloper3580 2 жыл бұрын
Найди любой скрипт в проводнике (не в unity), нажми на него правой кнопкой мыши > открыть с помощью > другое > выбираешь нужное приложение и ставишь галочку "всегда использовать это приложения для открытия файлов .cs", и теперь все будет норм работать
@sardorbekmamadaliyev4683
@sardorbekmamadaliyev4683 2 жыл бұрын
А где часть #3. На сдержат слово!
@ArmwrestlingTV
@ArmwrestlingTV 4 жыл бұрын
По поводу тегов не согласен, альтернативы просто нет. Брать компонент слишком дорого
@kbkmn
@kbkmn 4 жыл бұрын
Дорого это делать в каждом фрейме. С триггером разницы в скорости исполнения ты не заметишь. Но я бы заменил на новый TryGetComponent. Он возвращает true или false в зависимости от того есть ли компонент чтоб не делать нул чек и в out отдаёт сам компонент. Экономим один GetComponent
@rsakutin
@rsakutin 4 жыл бұрын
@@kbkmn Да, TryComponent у нас сейчас входит в стандарт. Видео к сожалению записывал на версии Unity где ещё небыло его.
@ArmwrestlingTV
@ArmwrestlingTV 4 жыл бұрын
@@kbkmn это и будет в каждом фрейме. На юнити не только три в ряд и казуалки делают. Есть довольно большие проекты, где практика заставила пожертвовать и перенести на теги. По поводу TryGetComponent - да, но не всегда реально перенести проект который уже в продакшене на новую юнити
@kbkmn
@kbkmn 4 жыл бұрын
@@ArmwrestlingTV Если вы в каждом фрейме делаете CompareTag или GetComponent, то вы точно делаете что-то не так. А что касается примера тут прямым текстом Роман сказал: "Когда вы, например, при входе в триггер или в коллизиях каких-то пытаетесь определить что за объект перед вами...". То есть мы разбираем конкретный случай где GetComponent делается не в каждом фрейме
@Freeman1852
@Freeman1852 4 жыл бұрын
Ох уж эти проблемы шарповиков, когда 1 вызов GetComponent просаживает Frame time....
@fextjd7564
@fextjd7564 Жыл бұрын
Чел подумал что записывает асмр а не видео про юнити.
@titiar1669
@titiar1669 4 жыл бұрын
где вы вабще учите эта всё
@nightkot4917
@nightkot4917 3 ай бұрын
Ошибки то детские...
@xanaramus
@xanaramus 4 жыл бұрын
Я не понимаю, нахрена все эти оболочки и лямбда выражения в тригере, если можно просто вызывать метод у класса/интерфейса? А самая главная проблема не решена - два getcomponent за триггер. Или автору не понимает как имея только gameobject, получить нужный компонент без GetCompoent вообще?
@const1988
@const1988 3 жыл бұрын
Если это возможно, то расскажите как, пожалуйста! Вот про это вопрос: "как имея только gameobject, получить нужный компонент без GetCompoent вообще".
@xanaramus
@xanaramus 3 жыл бұрын
@@const1988 Очень просто. Хранить где-то как ключ gameObject или instance id, как value - список компонентов. И получать нужный. Конечно придется все это кешировать, но если триггер очень частый, то это того стоит.
@const1988
@const1988 3 жыл бұрын
​@@xanaramus Спасибо за ответ. Есть над чем подумать.
@xanaramus
@xanaramus 3 жыл бұрын
@@DarkIllusoire Windows standalone x86_64 build using IL2CPP backend: Profiled Empty cycle: 0.00ms Profiled Field: 0.00ms Profiled Property: 0.00ms Profiled Built-in property: 1849.00ms Profiled GetComponent: 6552.00ms Profiled GetComponent: 8945.00ms Profiled Field.position: 1643.00ms Profiled Property.position: 1641.00ms Profiled Built-in Property.position: 3462.00ms
@xanaramus
@xanaramus 3 жыл бұрын
@@DarkIllusoire Если вы только начали программировать, с вами не о чем говорить. А продебажить в профайлере GetComponent, и прямую ссылку и джун может.
@rusytop4910
@rusytop4910 4 жыл бұрын
вот тут 27,4к подписчиков, где 27,4 к лайков? залайкайте видео, я продолжения хочу
Linked list (L-1) Creation of LL
5:55
Codesforscoderss
Рет қаралды 41
Неприятная Встреча На Мосту - Полярная звезда #shorts
00:59
Полярная звезда - Kuzey Yıldızı
Рет қаралды 7 МЛН
Универ. 13 лет спустя - ВСЕ СЕРИИ ПОДРЯД
9:07:11
Комедии 2023
Рет қаралды 6 МЛН
🌊Насколько Глубокий Океан ? #shorts
00:42
Избавляемся от If и Switch в коде на C#! КАК !?
14:38
Роман Сакутин
Рет қаралды 96 М.
Все СЕКРЕТЫ графики за 30 лет развития
20:23
Роман Сакутин
Рет қаралды 29 М.
ЭТИ КНИГИ СДЕЛАЮТ ИЗ ТЕБЯ ХАКЕРА
16:38