127 lines
4.2 KiB
C#
127 lines
4.2 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEditor;
|
|
using UnityEditor.Timeline;
|
|
using UnityEngine.Serialization;
|
|
using UnityEngine.Timeline;
|
|
using UnityEngine.UIElements;
|
|
#if !UNITY_2020_2_OR_NEWER
|
|
using L10n = UnityEditor.Timeline.L10n;
|
|
#endif
|
|
|
|
/// <summary>
|
|
/// Store the settings for Timeline that will be stored with the Unity Project.
|
|
/// </summary>
|
|
[FilePath("ProjectSettings/TimelineSettings.asset", FilePathAttribute.Location.ProjectFolder)]
|
|
public class TimelineProjectSettings : ScriptableSingleton<TimelineProjectSettings>
|
|
{
|
|
/// <summary>
|
|
/// Define the default framerate when a Timeline asset is created.
|
|
/// </summary>
|
|
[HideInInspector, Obsolete("assetDefaultFramerate has been deprecated. Use defaultFrameRate instead.")]
|
|
public float assetDefaultFramerate = (float)TimelineAsset.EditorSettings.kDefaultFrameRate;
|
|
|
|
[SerializeField, FrameRateField, FormerlySerializedAs("assetDefaultFramerate")]
|
|
private double m_DefaultFrameRate = TimelineAsset.EditorSettings.kDefaultFrameRate;
|
|
/// <summary>
|
|
/// Defines the default frame rate when a Timeline asset is created from the project window.
|
|
/// </summary>
|
|
|
|
public double defaultFrameRate
|
|
{
|
|
#pragma warning disable 0618
|
|
get
|
|
{
|
|
if (m_DefaultFrameRate != assetDefaultFramerate)
|
|
{
|
|
return assetDefaultFramerate;
|
|
}
|
|
return m_DefaultFrameRate;
|
|
}
|
|
set
|
|
{
|
|
m_DefaultFrameRate = value;
|
|
assetDefaultFramerate = (float)value;
|
|
}
|
|
#pragma warning restore 0618
|
|
}
|
|
|
|
void OnDisable()
|
|
{
|
|
Save();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Save the timeline project settings file in the project directory.
|
|
/// </summary>
|
|
public void Save()
|
|
{
|
|
Save(true);
|
|
}
|
|
|
|
internal SerializedObject GetSerializedObject()
|
|
{
|
|
return new SerializedObject(this);
|
|
}
|
|
|
|
private void OnValidate()
|
|
{
|
|
#pragma warning disable 0618
|
|
assetDefaultFramerate = (float)m_DefaultFrameRate;
|
|
#pragma warning restore 0618
|
|
}
|
|
}
|
|
|
|
class TimelineProjectSettingsProvider : SettingsProvider
|
|
{
|
|
SerializedObject m_SerializedObject;
|
|
SerializedProperty m_Framerate;
|
|
|
|
private class Styles
|
|
{
|
|
public static readonly GUIContent DefaultFramerateLabel = L10n.TextContent("Default frame rate", "The default frame rate for new Timeline assets.");
|
|
public static readonly GUIContent TimelineAssetLabel = L10n.TextContent("Timeline Asset", "");
|
|
public static readonly string WarningString = L10n.Tr("Locking playback cannot be enabled for this frame rate.");
|
|
}
|
|
|
|
public TimelineProjectSettingsProvider(string path, SettingsScope scopes, IEnumerable<string> keywords = null)
|
|
: base(path, scopes, keywords) { }
|
|
|
|
public override void OnActivate(string searchContext, VisualElement rootElement)
|
|
{
|
|
TimelineProjectSettings.instance.Save();
|
|
m_SerializedObject = TimelineProjectSettings.instance.GetSerializedObject();
|
|
m_Framerate = m_SerializedObject.FindProperty("m_DefaultFrameRate");
|
|
}
|
|
|
|
public override void OnGUI(string searchContext)
|
|
{
|
|
using (new SettingsWindow.GUIScope())
|
|
{
|
|
m_SerializedObject.Update();
|
|
|
|
EditorGUILayout.LabelField(Styles.TimelineAssetLabel, EditorStyles.boldLabel);
|
|
EditorGUI.BeginChangeCheck();
|
|
m_Framerate.doubleValue = FrameRateDrawer.FrameRateField(m_Framerate.doubleValue, Styles.DefaultFramerateLabel,
|
|
EditorGUILayout.GetControlRect(), out bool frameRateIsValid);
|
|
if (EditorGUI.EndChangeCheck())
|
|
{
|
|
m_SerializedObject.ApplyModifiedProperties();
|
|
TimelineProjectSettings.instance.Save();
|
|
}
|
|
#if TIMELINE_FRAMEACCURATE
|
|
if (!frameRateIsValid && TimelinePreferences.instance.playbackLockedToFrame)
|
|
EditorGUILayout.HelpBox(Styles.WarningString, MessageType.Warning);
|
|
#endif
|
|
}
|
|
}
|
|
|
|
[SettingsProvider]
|
|
public static SettingsProvider CreateTimelineProjectSettingProvider()
|
|
{
|
|
var provider = new TimelineProjectSettingsProvider("Project/Timeline", SettingsScope.Project, GetSearchKeywordsFromGUIContentProperties<Styles>());
|
|
return provider;
|
|
}
|
|
}
|