TGViewer
Moth Moth @namlessmoth · 44 subscribers
Post #312 219
Код первой попытки: https://github.com/NoNameDeleted/CubesExplosion/tree/848d6855dd3a92080ca250b3d9b2f4d5f39c41e9

Комментарий ментора по первой попытке:
1) стр 82 и 23 - магические числа

2) следует разделять ответственности, не засовывайте всю логику в один класс, вынесите логику применения силы, а также логику создания как в фабричных паттернах, в отдельные классы Exploader и Spawner, и эти компоненты должны быть не обязательно на кубах, можно и следует их держать отдельно от кубов


Моё мнение по каждому пункту:
1) После долгого перерыва забыл, что нужно перепроверять код на магические числа, исправил быстро
2) У меня изначально получился небольшой класс в котором было всего два метода собственно спавн мини кубиков и взрыв и я подумал что не стоит его дробить на столько чтобы в каждом компоненте было по одному методу, но оказывается стоило

Код второй попытки: https://github.com/NoNameDeleted/CubesExplosion/tree/4596e4cffe8bad91549bb6daa86605455b2fc71b

Комментарий ментора по второй попытке:
Доработать

1. newObject.GetComponent<Renderer>() - один объект не знает, какие могут быть компоненты у другого. Стоит или проверить наличие, или пусть второй сам найдет и сохранит у себя. А дальше или сам делает нужные действия с компонентом, или вернет его по запросу.

2. Instantiate(template - создавайте не по GameObject, а сразу по нужному компоненту и обращайтесь к его новому методу Init, чтобы задать все нужные данные.

3. for (int i = 0; i < UnityEngine.Random.Range(minCubeParts, maxCubeParts + 1); i++) - некорректное использование Random.Range - на каждой новой итерации цикла будет получено новое число. Сначала получите число в переменную и уже используйте переменную.


Мой мысли:
1 и 2) Это тот самый знаменитый паттерн "фабрика" котрый я честно пытался загуглить и понять, но в инете какая-то супер сложная схема и мутные непонятные примеры. Так что ментору пришлось напрямую говорить мне что и как написать. В этом наверное и есть его задача и теперь я понял как это работает. Всё равно бы я сам не додумался что можно сделать метод Init в самом кубе чтобы он как бы сам себя задавал параметры - меньший размер и рандомный цвет. И ещё я думал что GameObject.Instantiate работает только с самим GameObjecт'ом и даже не думал, что можно с помощью этого метода создавать объект любого класса например Cube в моём случае. В такие моменты вспоминаю о том как же всё таки хорошо что я учусь не сам, а с ментором))
3) Эту ошибку с рандомом я даже не заметил, потому что даже в таком неверном виде технически она работала правильно и спавнила от 2 до 6 кубов как и должна. Это скорее просто невнимательность связанная с долгим перерывом на два месяца.

И финальная попытка которую приняли с небольшими замечаниями: https://github.com/NoNameDeleted/CubesExplosion

Комментарий ментора:
1) шанс деления куба следует хранить в классе Cube, спавнер должен только создавать
2) даже развёрнутым свойствам следует устанавливать приватный set, все изменения данных следует проводить в методах


Моё мнение:
1) Это скорее стилистическое субъективное замечание
2) А вот про это я не совсем понял, ведь если всем свойствам ставить приватный set, то по сути их вообще нельзя менять извне, но это как то бессмысленно зачем они тогда вообще нужны можно тогда просто писать геттеры и сеттеры для каждого свойства и это же кринж (кто делал игры в Gdevelop поймут о чём я🙃) может быть он имел ввиду конкретно мой случай, а не вобщем, но всё равно странно. Есть же даже отдельное понятие как "контрактное программирование" акцент в котором как раз делается на проверки передаваемых значений через контракты (проверки) в публичных сеттерах у свойств, ну да ладно
  • 🔥 3
More from @namlessmoth
  1. Mar 7, 2026Как сломать босса одним прокачанным навыком Причём первую заратану я победил точно так же,…
  2. Mar 3, 2026Наиграл уже 150+ часов и даже не прошел половину игры Мне капец как не везёт почти в каждо…
  3. Feb 17, 2026Один месяц подписки на впн Вдруг кому надо https://t.me/gruVPNbot?start=g_UZhunlWNfFC_2127…
  4. Feb 16, 2026оставлю тут, чтобы не потерять вам смотреть нельзя, это только для меня
  5. Feb 13, 2026Вчера сделал всего три задания и все три оказались не правильными 1) Задание: Проведите ре…
  6. Feb 12, 2026Оказалось что всё-таки можно сдавать несколько заданий за один раз. Я вчера сдал 7 заданий…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →