Açıklama Yok
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.

TimelineProjectSettings.cs 4.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. using System;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEditor;
  5. using UnityEditor.Timeline;
  6. using UnityEngine.Serialization;
  7. using UnityEngine.Timeline;
  8. using UnityEngine.UIElements;
  9. #if !UNITY_2020_2_OR_NEWER
  10. using L10n = UnityEditor.Timeline.L10n;
  11. #endif
  12. /// <summary>
  13. /// Store the settings for Timeline that will be stored with the Unity Project.
  14. /// </summary>
  15. [FilePath("ProjectSettings/TimelineSettings.asset", FilePathAttribute.Location.ProjectFolder)]
  16. public class TimelineProjectSettings : ScriptableSingleton<TimelineProjectSettings>
  17. {
  18. /// <summary>
  19. /// Define the default framerate when a Timeline asset is created.
  20. /// </summary>
  21. [HideInInspector, Obsolete("assetDefaultFramerate has been deprecated. Use defaultFrameRate instead.")]
  22. public float assetDefaultFramerate = (float)TimelineAsset.EditorSettings.kDefaultFrameRate;
  23. [SerializeField, FrameRateField, FormerlySerializedAs("assetDefaultFramerate")]
  24. private double m_DefaultFrameRate = TimelineAsset.EditorSettings.kDefaultFrameRate;
  25. /// <summary>
  26. /// Defines the default frame rate when a Timeline asset is created from the project window.
  27. /// </summary>
  28. public double defaultFrameRate
  29. {
  30. #pragma warning disable 0618
  31. get
  32. {
  33. if (m_DefaultFrameRate != assetDefaultFramerate)
  34. {
  35. return assetDefaultFramerate;
  36. }
  37. return m_DefaultFrameRate;
  38. }
  39. set
  40. {
  41. m_DefaultFrameRate = value;
  42. assetDefaultFramerate = (float)value;
  43. }
  44. #pragma warning restore 0618
  45. }
  46. void OnDisable()
  47. {
  48. Save();
  49. }
  50. /// <summary>
  51. /// Save the timeline project settings file in the project directory.
  52. /// </summary>
  53. public void Save()
  54. {
  55. Save(true);
  56. }
  57. internal SerializedObject GetSerializedObject()
  58. {
  59. return new SerializedObject(this);
  60. }
  61. private void OnValidate()
  62. {
  63. #pragma warning disable 0618
  64. assetDefaultFramerate = (float)m_DefaultFrameRate;
  65. #pragma warning restore 0618
  66. }
  67. }
  68. class TimelineProjectSettingsProvider : SettingsProvider
  69. {
  70. SerializedObject m_SerializedObject;
  71. SerializedProperty m_Framerate;
  72. private class Styles
  73. {
  74. public static readonly GUIContent DefaultFramerateLabel = L10n.TextContent("Default frame rate", "The default frame rate for new Timeline assets.");
  75. public static readonly GUIContent TimelineAssetLabel = L10n.TextContent("Timeline Asset", "");
  76. public static readonly string WarningString = L10n.Tr("Locking playback cannot be enabled for this frame rate.");
  77. }
  78. public TimelineProjectSettingsProvider(string path, SettingsScope scopes, IEnumerable<string> keywords = null)
  79. : base(path, scopes, keywords) { }
  80. public override void OnActivate(string searchContext, VisualElement rootElement)
  81. {
  82. TimelineProjectSettings.instance.Save();
  83. m_SerializedObject = TimelineProjectSettings.instance.GetSerializedObject();
  84. m_Framerate = m_SerializedObject.FindProperty("m_DefaultFrameRate");
  85. }
  86. public override void OnGUI(string searchContext)
  87. {
  88. using (new SettingsWindow.GUIScope())
  89. {
  90. m_SerializedObject.Update();
  91. EditorGUILayout.LabelField(Styles.TimelineAssetLabel, EditorStyles.boldLabel);
  92. EditorGUI.BeginChangeCheck();
  93. m_Framerate.doubleValue = FrameRateDrawer.FrameRateField(m_Framerate.doubleValue, Styles.DefaultFramerateLabel,
  94. EditorGUILayout.GetControlRect(), out bool frameRateIsValid);
  95. if (EditorGUI.EndChangeCheck())
  96. {
  97. m_SerializedObject.ApplyModifiedProperties();
  98. TimelineProjectSettings.instance.Save();
  99. }
  100. #if TIMELINE_FRAMEACCURATE
  101. if (!frameRateIsValid && TimelinePreferences.instance.playbackLockedToFrame)
  102. EditorGUILayout.HelpBox(Styles.WarningString, MessageType.Warning);
  103. #endif
  104. }
  105. }
  106. [SettingsProvider]
  107. public static SettingsProvider CreateTimelineProjectSettingProvider()
  108. {
  109. var provider = new TimelineProjectSettingsProvider("Project/Timeline", SettingsScope.Project, GetSearchKeywordsFromGUIContentProperties<Styles>());
  110. return provider;
  111. }
  112. }