Перейти до основного вмісту

Меню команд

Перейдіть на сторінку або пошукайте в каталозі

Потрібен Unity 2020.3 або новіший · Безкоштовно

Getly Publisher for Unity

Пакет для редактора Unity. Він перевіряє теку з ресурсами, яку ви збираєтеся продавати, а потім надсилає картку як чернетку, і ви не виходите з редактора. Він безкоштовний і є першим товаром, який Getly опублікував для себе.

Проблема, виміряна

.unitypackage непрозорий до моменту імпорту, а це водночас момент, коли вже пізно. Цей інструмент існує заради однієї конкретної невдачі: покупець відкриває демо-сцену, і кожен обʼєкт показує «Missing (Mono Script)», бо автор тестував у єдиному проєкті, де ці скрипти випадково були. Коли ми починали, на Getly було 55 файлів .unitypackage у 9 магазинах, і жоден із них ніколи нічим не перевірявся.

Кожне рішення і чого воно коштувало

01

Перевірка виконується двічі, і вирішує лише одна половина

Чому

Усередині редактора вона бачить те, чого не бачить жоден сервер: чи справді розвʼязується GUID скрипта в префабі, які налаштування імпорту в текстури, як компілятор читає файл. Але вона працює на комп’ютері продавця, у пакеті, який він може редагувати. Довіряти її звіту означало б, що бар’єр це те, що скаже копія нашого коду на чужому комп’ютері. Тож редактор радить, а Getly, прочитавши вивантажені байти, вирішує.

Чого це коштувало

Дві реалізації тих самих правил, двома мовами, які можуть розійтися. Згенерований каталог і тест, що падає при розбіжності, це ціна за те, щоб тримати їх чесними.

02

Шість перевірок блокують публікацію. Десять не блокують ніколи.

Чому

Блокувальна перевірка означає, що покупець отримує зламане; попередження означає, що ресурс працює і міг би бути кращим. Додати до списку блокувань це вирішити відмовляти більшій кількості продавців, тому це робиться свідомо, і список тримається на шести. Продавець, який знає свій ресурс краще за наші правила, все одно має мати змогу його опублікувати.

Чого це коштувало

П’ять із шести сервер знаходить сам. Шоста, префаб, що вказує на скрипт, якого немає в пакеті, з якої й починається весь цей інструмент, потребує редактора, бо розвʼязати GUID може лише Unity. Продавець, який обирає шлях без встановлення, отримує інші п’ять, але не цю, і ми краще скажемо про це, ніж дозволимо шляху натякати на інше.

03

Бар’єр дивиться лише на розширення файлу і більше ні на що

Чому

Перевірка Unity це розширення й нічого більше, тому вона може відхилити лише .unitypackage і нічого іншого: усі картки, що існували на момент її запуску, залишилися недоторканими, і ніхто, хто продавав не Unity, не мав вивчати нового нашого правила. Вона вже не весь бар’єр, бо перевірка Blender, що з’явилася пізніше, мусить відкривати архіви, але частина для Unity, як і раніше, торкається лише Unity.

Чого це коштувало

Ресурс Unity, доставлений усередині .zip, не охоплений. Ми погодилися на це, а не дозволили бар’єру почати мати думку про сотні архівів, які він не має права судити.

04

Задовольнити його можна, нічого не встановлюючи

Чому

Бар’єр спрацьовує, коли товар виходить у продаж, а в продавців були опубліковані ресурси Unity задовго до появи інструмента. Зробити встановлення єдиним шляхом означало б, що продавець, який торгує вже місяцями, мусить завантажити пакет для редактора, щоб опублікувати оновлення. Тому та сама перевірка запускається зі сторінки редагування товару.

Чого це коштувало

Дві точки входу до того самого ядра і кнопка, охоплення якої треба тримати в ногу з бар’єром, у чому ми раз помилилися, а тепер для цього є тест.

05

API-ключ живе в налаштуваннях редактора, ніколи не в проєкті

Чому

Ключ, що лежить поруч із вашою роботою, це ключ, який ви зрештою експортуєте в пакет і продасте. Налаштування редактора лежать поза текою, яку ви пакуєте, тож вони не можуть випадково поїхати разом із ресурсом.

Чого це коштувало

Налаштування редактора привʼязані до комп’ютера та користувача ОС, а не до проєкту, і ключ лежить там відкрито. Продавець на другому комп’ютері входить заново, а будь-хто з цим обліковим записом ОС увійде як цей магазин. Ми обрали це замість облікових даних, які можна експортувати всередині пакета і продати.

У чому ми спершу помилилися

Це виявили до того, як їх побачив будь-який покупець, і лише тому ми можемо про це написати. Вони тут, бо рішення вище вчать менше, ніж помилки.

Ми написали

«Кожен ресурс Unity на Getly перевіряється, перш ніж він може вийти в продаж.»

Правда

Неправда, і ми написали це на сторінці, весь аргумент якої в тому, що ми щось перевіряємо. Бар’єр спрацьовує на переході в статус «опубліковано», тож 55 файлів .unitypackage, які вже були прикріплені в каталозі, ніколи не читалися. Ми переписали це на «відтепер» до запуску й додали окремий лічильник для тих, що справді прочитані: 1 на сьогодні.

Для вашої картки

Абсолютні слова (кожен, завжди, повністю, гарантовано) це місце, де опис найімовірніше бреше, і саме їх покупцеві найлегше спростувати. Кажіть те, що правда про наступний продаж, а не те, що вам хотілося б бачити правдою про всі.

Ми написали

Перевірка, що позначила нашу власну документацію.

Правда

Перевірка абсолютних шляхів спрацювала на файл, що пояснює перевірку абсолютних шляхів, бо в цьому файлі є приклад шляху. Вона спрацювала б на будь-який README, що радить продавцеві прибрати шляхи /Users/…. Три виправлення: шаблон тепер вимагає сегмент користувача і щось після нього, прозові файли виключено, а формулювання більше не містить повного шляху.

Для вашої картки

Перевіряйте свій товар на тому, на чому його найімовірніше використовуватимуть, а не на тому, чим ви його створили. Наш знайшов власну інструкцію.

Ми написали

Попередження про порожні теки, яке оцінювало не те.

Правда

Воно дивилося на файлову систему. Тека з одним лише .gitkeep не порожня на диску, а в проєкт покупця потрапляє порожньою, бо експортер Unity цього файлу не переносить. Джерелом істини мало бути те, що створює експортер, а не те, що продавець бачить у Finder.

Для вашої картки

Перевіряйте те, що отримує покупець, а не те, що є у вас. Ваша тека, ваш проєкт і ваш диск це речі, яких завантаження не несе.

Чого він не робить

  • Це не сканер шкідливих програм. Макрос усередині справжнього документа проходить, його ніхто не торкається.
  • Він не оцінює, чи хороший ваш ресурс. Лише чи він доходить робочим.
  • Він лише для Unity. Є версія для Blender; для Unreal, Photoshop чи Cinema 4D нічого немає.
  • Пакети понад 150 МБ записуються як неперевірені й усе одно можуть бути опубліковані. Відмовити продавцеві через наше власне обмеження означало б брати з нього плату за наше обмеження.

Як ми самі в цьому переконалися

Тестові файли створила Unity, а не ми

Кожен тестовий пакет створив сам експортер Unity у режимі без інтерфейсу. Весь ризик читача формату в тому, що формат не такий, як ви припустили, а тестовий файл, зібраний вручну, кодує це припущення двічі замість того, щоб один раз його перевірити.

Стенд, який встановлює його і натискає кнопки

Скрипт створює проєкт, компілює інструмент, запускає валідатор і завершується з ненульовим кодом, якщо результати змінюються. Юніт-тести читають справжні експортовані пакети; стенд покриває те, чого юніт-тест не бачить: що це компілюється і що натискання кнопки робить те, що підказує читання коду.

Чистий тестовий файл важливіший за зламаний

Легко довести, що перевірка ловить ваду, і легко забути довести, що вона мовчить на якісній роботі. Валідатор, що спрацьовує на добре зроблений ресурс, привчає продавців його ігнорувати, а це гірше, ніж взагалі не мати валідатора.

Сама картка товару

Опис починається з того, чого він не дає статися

Не з того, що це за інструмент, а з того, що з вами буде без нього. Перший абзац це історія про «Missing (Mono Script)», бо саме це речення впізнає видавець Unity. Потім повний список того, що блокує публікацію, і прямо про те, чого він не робить.

Обкладинка в розмірі мініатюри каже, що це за річ

Перша версія була нашим маскотом, а це чесно і нічого не каже покупцеві: це та сама картинка на кожній сторінці цього сайту. Та, що на картці зараз, малює сам товар: пакет, який оглядають, зі словом, виведеним від руки, а не відтвореним логотипом, бо відтворювати чужий товарний знак у згенерованій графіці це і юридичне питання, і гарантоване спотворення.

Він безкоштовний, і ним нічого не продається

Брати гроші за те, що робить чужі ресурси придатними до продажу, означало б брати гроші за нашу власну планку якості. Це також вхідні двері: інструмент для нас цінніший встановленим, ніж проданим.

Один файл, який замінюється, а не накопичується

Кожен випуск замінює попереднє завантаження, а не додає версію, між якими ніхто не хоче вибирати. Покупець отримує актуальну збірку, і немає сторінки, на якій йому довелося б гадати, яка з них актуальна.

Він пройшов нашу власну перевірку, і наша власна перевірка його відхилила

Публікація запускає ту саму перевірку, яку проходить кожен продавець: виключити з неї нашу власну картку було б найменш виправданим, що ми могли зробити. Вона повернула одну консультативну знахідку: немає демо-сцени, а в інструмента для редактора її й не буває. Ми залишили знахідку як є, а не додали виняток для себе.