/Sprite-Pivot-Aligner-Utility

Little UnityEditor Utility for group aligning sprite pivots

Primary LanguageC#

Небольшой самопальный велосипед на двух педальных приводах.

Как так вышло:

В работе над проектом мы с художником столкнулись с проблемой: импортированный из фотошопа PSB с анимированным персонажем, хоть и приходит в Юнити уже порезанный на спрайты, а эти спрайты даже располагаются в правильных позициях, однако если перетащить файл на сцену, всё же обладает фатальным недостатком: разные автоопределенные размеры спрайтов и несовпадающие пивоты - при замене в SpriteRenderer спрайт одной и той же части пляшет только так. Конечно, можно морочиться и всегда распределять спрайты по гриду, а потом ручками резать это дело в Sprite editor... или можно написать свою утилиту, которая просто пофиксит проблемы с пивотами.

Когда может пригодиться:

Если есть спрайты, которым нужно выставить пивоты так, чтобы они сохраняли определенное положение в пространстве при замене их в SpriteRenderer. Вполне возможно, что вам тоже нужно импортнуть файл PSD/PSB. Или, может, так получилось, что в раскадровке спрайты разных размеров?

Как этим пользоваться:

  1. Перетащите на сцену по отдельности (в случае с PSD/PSB - нужно с проставленной в настройках ипорта галкой "Use Layer Grouping" перетащить всю группу) спрайты, которые будут сменяться в SpriteRenderer.
  2. Разместите их так, как они должны располагаться при смене друг друга
  3. Перетащите на сцену префаб SpritePivotAligner, выберите его и зафиксируйте окно инспектора
  4. В поле Aligner перетащите SpriteRenderer со спрайтом, относительно которого будете позиционировать
  5. Выберите все остальные SpriteRenderer и нажмите у скрипта SpritePivotAligner в окне инспектора кнопку Set Selected Transforms
  6. После этого жмите кнопку Format pivots. Если выбран Edit Mode - Metadata (по умолчанию), нажмите Ctrl+R, чтобы обновились настройки импорта

Немного технических подробностей:

Утилита работает в двух режимах редактирования (Edit Mode) : через прямое редактирование метафайлов с настройками импорта и через взаимодействие с классом Texture Importer. Второй способ определённо более корректный, но проблема в том, что PSDImporter это ни разу не TextureImporter, так что работать с ним вторым способом не выйдет. Можно ли было сделать всё единообразно и по-человечески? Полагаю, да. Если вы знаете, как у PSDImporter вытянуть и перезаписать информацию о содержащихся в нём спрайтах или если существует утилита, способная решить описанные задачи лучше, чем эта - пожалуйста, напишите Issue, ну а пока всё сделано так, как сделано.