RecorderControllerSettingsPreset.cs 3.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. using System.Collections.Generic;
  2. using UnityEditor.Presets;
  3. using UnityEngine;
  4. namespace UnityEditor.Recorder
  5. {
  6. /// <summary>
  7. /// Class that models a Recorder List (a stack of preset Recorder Settings instances) that you can save and load for reuse into a Recorder Window.
  8. /// </summary>
  9. public class RecorderControllerSettingsPreset : ScriptableObject
  10. {
  11. [SerializeField] Preset m_Model;
  12. [SerializeField] List<Preset> m_RecorderPresets = new List<Preset>();
  13. internal Preset model
  14. {
  15. get { return m_Model; }
  16. }
  17. internal Preset[] recorderPresets
  18. {
  19. get { return m_RecorderPresets.ToArray(); }
  20. }
  21. /// <summary>
  22. /// Saves the specified Recorder List to a file on disk. Note that this method doesn't save Scene references (such as a GameObject reference in Animation Recorder Settings).
  23. /// </summary>
  24. /// <param name="model">The Recorder List to save.</param>
  25. /// <param name="path">The path on disk where to save the Recorder List. You must specify a path relative to the project.</param>
  26. public static void SaveAtPath(RecorderControllerSettings model, string path)
  27. {
  28. var data = CreateInstance<RecorderControllerSettingsPreset>();
  29. var copy = Instantiate(model);
  30. copy.name = model.name;
  31. // TODO Remove this once there's an official way to exclude some field from being save into presets
  32. copy.ClearRecorderSettings(); // Do not save asset references in the preset.
  33. var p = new Preset(copy) { name = model.name };
  34. data.m_Model = p;
  35. foreach (var recorder in model.RecorderSettings)
  36. {
  37. var rp = new Preset(recorder) { name = recorder.name };
  38. data.m_RecorderPresets.Add(rp);
  39. }
  40. //var preset = new Preset(data);
  41. //AssetDatabase.CreateAsset(preset, "Assets/test.preset");
  42. var preset = data; //new Preset(data);
  43. AssetDatabase.CreateAsset(preset, path); //AssetDatabase.CreateAsset(preset, "Assets/test.preset");
  44. foreach (var rp in data.m_RecorderPresets)
  45. AddHiddenObjectToAsset(rp, preset);
  46. AddHiddenObjectToAsset(p, preset);
  47. AssetDatabase.SaveAssets();
  48. AssetDatabase.Refresh();
  49. }
  50. /// <summary>
  51. /// Applies the current Recorder List to the specified RecorderControllerSettings instance.
  52. /// </summary>
  53. /// <param name="prefs">The RecorderControllerSettings instance to apply the Recorder List to.</param>
  54. public void ApplyTo(RecorderControllerSettings prefs)
  55. {
  56. prefs.ReleaseRecorderSettings();
  57. m_Model.ApplyTo(prefs);
  58. foreach (var rp in m_RecorderPresets)
  59. {
  60. var r = (RecorderSettings) CreateFromPreset(rp);
  61. r.name = rp.name;
  62. prefs.AddRecorderSettings(r);
  63. }
  64. prefs.Save();
  65. }
  66. static ScriptableObject CreateFromPreset(Preset preset)
  67. {
  68. var instance = CreateInstance(preset.GetTargetFullTypeName());
  69. preset.ApplyTo(instance);
  70. return instance;
  71. }
  72. static void AddHiddenObjectToAsset(UnityEngine.Object objectToAdd, UnityEngine.Object assetObject)
  73. {
  74. objectToAdd.hideFlags |= HideFlags.HideInHierarchy;
  75. AssetDatabase.AddObjectToAsset(objectToAdd, assetObject);
  76. }
  77. }
  78. }