Как стать автором
Обновить

Комментарии 36

Привет. А в итоге, что за игра-то? Понял, что это 2d что-то, но не более.
Хабр не любит пиара — и конкретизация нашей игры пост богаче не сделает (:

Я думаю, ссылка в комментарии, да еще и по просьбе двух людей (а я тоже хочу) — это святое! За такое Хабр не обидется.


Ссылку, ссылку!

Виталий, это низко.

Спасибо за пост, выцепил для себя пару полезных советов! Сам сейчас нахожусь в ситуации, когда программировать вроде как умею, а опыта в Enterprise-разработке нет, и тоже потихоньку пилю свою игру на Юнити.
P.S. Присоединяюсь к требующим ссылку на игру))
Наверное, мы уже достаточно глубоко в ветке комментов и сюда никто не залезет? Наш дебютный проект — store.steampowered.com/app/375560/DungeonRift
Ну вот, а в чём проблема?)) Многие непонятно почему так боятся 'случайного пиара", что усердно добавляют в текст конструкции вроде «одна хорошая компания», «магазин на букву А», «известная игра про футбол» и так далее. А в чём проблема назвать полностью? Что плохого в том, чтобы вольно или невольно пропиарить то, что лично ты считаешь хорошим?
Пару раз видел когда это приводило к всплескам ярости «Хабр не для рекламы!» и занижению как статьи так и кармы. Я не очень в восторге от такой перспективы, так что если счастливее меня прямые упоминания не сделают — постараюсь их избежать (:

Классическая ошибка. В PullRandomFromList вы зря передаёте List как ref.
Ref нужен, если вы хотите иметь возможность заставить аргумент начать показывать на другой лист. А возможность поменять лист у вас и так есть.

В первом методе можно принимать не List, а IReadOnlyList. Так вы сможете передать туда не только List, но и все, что поддерживает этот интерфейс

Благодарю, исправлюсь (:
Все верно. А еще было бы лучше и удобнее оформить эти методы как extension, что бы вызывать таким образом: ExampleClass a = list.GetRandomFromList();
Не написали ИМХО одну важную вещь про крайнюю полезность SerializedObject, с помощью него можно реализовывать логику объекта для которого не всегда требуются GameObject'ы, например предметы инвентаря.
Дааа, самому бы сначала не полениться и разобраться со ScriptableObject до конца т.т
А то, в принципе-то, необходимости в них нет, они просто делают удобнее, поэтому как до некритичной темы я постоянно ленюсь до них добраться. Так что это ошибка новичка, которую я делаю всё время (:
Спасибо, нашел несколько полезных советов для себя)
Объединяйте однотипные спрайты (а тем более отдельные спрайты одной анимации) в общую картинку

Вот это скорее вредный совет, с атласами, сделанными вручную сложнее работать (удалять, изменять и добавлять элементы). В Unity есть очень удобный SpritePacker, который за разработчика это все делает, причем обычно оптимальнее. В 2017 его еще улучшили, но я пока еще последнюю версию толком не трогал.
впрочем, имеет смысл по возможности вообще избегать публичных полей, это плохая практика

Про это стоило бы подробнее рассказать, а то регулярно так делают. В том числе и в вашем коде это есть) Вместо таких полей лучше использовать свойства
Умный термин — Interface segregation principle.

ISP про другое. Тут умный термин — Single responsibility principle из того же SOLID
SRP я упоминаю чуть ниже (:
Да, но ведь он там не к месту :) И где Liskov substitution principle?
Я за туториал вида “Делаем игрушку для хакатона за сутки с нуля”.
Очень хочется определиться с начальным уровнем аудитории. Это кто-то, понимающий хоть что-то в программировании и ему не надо будет объяснять что такое класс или условный оператор, или это человек, впервые севший за компьютер? Пока не могу однозначно решить.
Это кто-то, понимающий хоть что-то в программировании и ему не надо будет объяснять что такое класс или условный оператор

Однозначно для таких. Первых лучше отдельно хоть чуток подружить с программированием, после чего уже переходить к шагу «делаем игру» :-)
подпишусь на тутор.
особенно хотелось бы про
Избегайте GameObject.Find()

т.е. да, я создаю SceneController, и у всех создаваемых объектов в старте идет "пропиши себя в SceneController", а потом, если надо обратиться из перчатки левой руки в ножик правой руки, то иду в голову и, по путям, через точку, -> в ножик другой руки.
public class LeftHandGlove: MonoBehaviour { <-- скрипт на объекте
...
void Start()
{
GameObject _app = GameObject.Find("_app"); // DontDestroyOnLoad() persistent
MHead = _app.GetComponent(); // взяли голову из persist
MHead.LeftGlove = this.gameObject; // <-- Self Binding to ManHead


далее его можем модифицировать из других объектов (скриптов) в виде:

(...)      MHead.LeftGlove.GetComponent<LeftScript>().MyState = 200;
т.е.:
(controler 3D object ->) на нем Controller script -> Totem_3D_object -> и его Script -> и в нем public переменная
Тутор нужен, потому что «с разбегу» трудно понять где графический объект, а где его скриптовый компонент (или еще хуже, несколько атачнутых скриптов)" и как их искать без Find()-a… даже на (не суперовую) конструкцию выше — у меня ушло больше года.
Простите, но:
удобнее воспользоваться встроенной утилитой утилитой SpritePacker.
Благодарю, я иногда дно (:
Зачем хранить в памяти все текста на всех языках в рантайме? Проще подгружать 1 язык, при смене — подгружать следующий. В примерах Unity есть урок как сделать локализацию.
Это такое весьма абстрактное «проще». Имплементировать это может быть чуть-чуть сложнее, а экономия памяти будет сколько, сотня-другая килобайт? При том, сколько памяти занимают игры на Unity сами собой это абсолютно не принципиальная разница.

Но да, так, конечно, делать правильнее.
От проекта зависит. У нас в одном проекте локализации всех текстов и квестов 1 мб (русский и основные европейские языки). Причем менеджер локализаций написан 1 раз давно и кочует из проекта в проект.
Всё хорошо в Unity кроме её веса. Собрал на ней пару безделушек-паззлов и забросил. Присматриваюсь к Godot.
Там нужно очень досконально смотреть настройки. Порой снятие одной галочки урезает по 30-40% от общего веса игры.
Это да, но сама среда очень громоздкая. Около гига сама Unity без никто. Godot — 40 мегабайт. Шаблоны экспорта под все платформы оптом — чуть более двухсот мегабайт. Для 2D-игрушек — самое оно.
А Вы не путаете Юнити с Анрилом или Краем? Там да, на Анриле чистый билд, без ничего, весит пару сотен Мб, на Крае и того больше. А на Юнити многие делают мобильные игры весом меньше 50 Мб. Я сейчас заканчиваю игру (не мобильную) на Юнити, весит около 400 Мб, из них 3/4 — вес JPEG-спрайтов. Где там «Около гига сама Unity без никто.», если честно, непонятно.
Мне кажется, Bookvarenko говорит про гигайбайт веса САМОГО Юнити. Среды разработки. Что, кажется, правда — у меня сейчас со всеми модулями папка с редактором (без Mono) весит 6 с небольшим гигабайт.

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

А мои собранные на Юнити игры весят по 25-30 мегов на мобилки и 400 под десктоп (со всеми ресурсами).

Так что я не совсем могу понять эту претензию (:
А, точно. Действительно, я неверно понял Bookvarenko. Он имел ввиду сам редактор, а я почему-то решил, что речь о весе билда игры. Вопрос снят :)
НЛО прилетело и опубликовало эту надпись здесь
Зарегистрируйтесь на Хабре, чтобы оставить комментарий