Нема описа
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

TilePaletteSaveUtility.cs 1.9KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. using System;
  2. using UnityEngine;
  3. namespace UnityEditor.Tilemaps
  4. {
  5. internal class TilePaletteSaveUtility
  6. {
  7. private class TilePaletteSaveScope : IDisposable
  8. {
  9. private GameObject m_GameObject;
  10. public TilePaletteSaveScope(GameObject paletteInstance)
  11. {
  12. m_GameObject = paletteInstance;
  13. if (m_GameObject != null)
  14. {
  15. GridPaintingState.savingPalette = true;
  16. SetHideFlagsRecursively(paletteInstance, HideFlags.HideInHierarchy);
  17. var renderers = paletteInstance.GetComponentsInChildren<Renderer>();
  18. foreach (var renderer in renderers)
  19. renderer.gameObject.layer = 0;
  20. }
  21. }
  22. public void Dispose()
  23. {
  24. if (m_GameObject != null)
  25. {
  26. SetHideFlagsRecursively(m_GameObject, HideFlags.HideAndDontSave);
  27. GridPaintingState.savingPalette = false;
  28. }
  29. }
  30. private void SetHideFlagsRecursively(GameObject root, HideFlags flags)
  31. {
  32. root.hideFlags = flags;
  33. for (int i = 0; i < root.transform.childCount; i++)
  34. SetHideFlagsRecursively(root.transform.GetChild(i).gameObject, flags);
  35. }
  36. }
  37. public static bool SaveTilePalette(GameObject originalPalette, GameObject paletteInstance)
  38. {
  39. var path = PrefabUtility.GetPrefabAssetPathOfNearestInstanceRoot(originalPalette);
  40. if (path == null)
  41. return false;
  42. using (new TilePaletteSaveScope(paletteInstance))
  43. {
  44. PrefabUtility.SaveAsPrefabAssetAndConnect(paletteInstance, path, InteractionMode.AutomatedAction);
  45. }
  46. return true;
  47. }
  48. }
  49. }