Files
.vs
Assets
Library
APIUpdater
Artifacts
Bee
BuildPlayerData
PackageCache
com.unity.collab-proxy@2.5.2
com.unity.editorcoroutines@1.0.0
com.unity.ext.nunit@1.0.6
com.unity.feature.development@1.0.1
com.unity.ide.rider@3.0.31
com.unity.ide.visualstudio@2.0.22
com.unity.ide.vscode@1.2.5
com.unity.modules.ai@1.0.0
com.unity.modules.androidjni@1.0.0
com.unity.modules.animation@1.0.0
com.unity.modules.assetbundle@1.0.0
com.unity.modules.audio@1.0.0
com.unity.modules.cloth@1.0.0
com.unity.modules.director@1.0.0
com.unity.modules.imageconversion@1.0.0
com.unity.modules.imgui@1.0.0
com.unity.modules.jsonserialize@1.0.0
com.unity.modules.particlesystem@1.0.0
com.unity.modules.physics2d@1.0.0
com.unity.modules.physics@1.0.0
com.unity.modules.screencapture@1.0.0
com.unity.modules.subsystems@1.0.0
com.unity.modules.terrain@1.0.0
com.unity.modules.terrainphysics@1.0.0
com.unity.modules.tilemap@1.0.0
com.unity.modules.ui@1.0.0
com.unity.modules.uielements@1.0.0
com.unity.modules.umbra@1.0.0
com.unity.modules.unityanalytics@1.0.0
com.unity.modules.unitywebrequest@1.0.0
com.unity.modules.unitywebrequestassetbundle@1.0.0
com.unity.modules.unitywebrequestaudio@1.0.0
com.unity.modules.unitywebrequesttexture@1.0.0
com.unity.modules.unitywebrequestwww@1.0.0
com.unity.modules.vehicles@1.0.0
com.unity.modules.video@1.0.0
com.unity.modules.vr@1.0.0
com.unity.modules.wind@1.0.0
com.unity.modules.xr@1.0.0
com.unity.performance.profile-analyzer@1.2.2
com.unity.settings-manager@2.0.1
com.unity.test-framework@1.1.33
com.unity.testtools.codecoverage@1.2.6
com.unity.textmeshpro@3.0.6
com.unity.timeline@1.7.6
DocCodeExamples
Documentation~
Editor
Actions
Activation
Analytics
Animation
Attributes
Audio
ControlTrack
CustomEditors
Extensions
Items
Localization
Manipulators
Playables
Properties
Recording
Signals
State
StyleSheets
Undo
Utilities
Window
Modes
ViewModel
ScriptableObjectViewPrefs.cs
ScriptableObjectViewPrefs.cs.meta
TimelineAssetViewModel.cs
TimelineAssetViewModel.cs.meta
TimelineAssetViewModel_versions.cs
TimelineAssetViewModel_versions.cs.meta
TimelineWindowViewPrefs.cs
TimelineWindowViewPrefs.cs.meta
Modes.meta
OverlayDrawer.cs
OverlayDrawer.cs.meta
PlaybackScroller.cs
PlaybackScroller.cs.meta
SequenceContext.cs
SequenceContext.cs.meta
TimelineEditorWindow.cs
TimelineEditorWindow.cs.meta
TimelineMarkerHeaderGUI.cs
TimelineMarkerHeaderGUI.cs.meta
TimelineNavigator.cs
TimelineNavigator.cs.meta
TimelinePlaybackControls.cs
TimelinePlaybackControls.cs.meta
TimelineWindow.cs
TimelineWindow.cs.meta
TimelineWindowAnalytics.cs
TimelineWindowAnalytics.cs.meta
TimelineWindowTimeControl.cs
TimelineWindowTimeControl.cs.meta
TimelineWindow_ActiveTimeline.cs
TimelineWindow_ActiveTimeline.cs.meta
TimelineWindow_Breadcrumbs.cs
TimelineWindow_Breadcrumbs.cs.meta
TimelineWindow_Duration.cs
TimelineWindow_Duration.cs.meta
TimelineWindow_EditorCallbacks.cs
TimelineWindow_EditorCallbacks.cs.meta
TimelineWindow_Gui.cs
TimelineWindow_Gui.cs.meta
TimelineWindow_HeaderGui.cs
TimelineWindow_HeaderGui.cs.meta
TimelineWindow_Manipulators.cs
TimelineWindow_Manipulators.cs.meta
TimelineWindow_Navigator.cs
TimelineWindow_Navigator.cs.meta
TimelineWindow_PlayRange.cs
TimelineWindow_PlayRange.cs.meta
TimelineWindow_PlayableLookup.cs
TimelineWindow_PlayableLookup.cs.meta
TimelineWindow_PlaybackControls.cs
TimelineWindow_PlaybackControls.cs.meta
TimelineWindow_PreviewPlayMode.cs
TimelineWindow_PreviewPlayMode.cs.meta
TimelineWindow_Selection.cs
TimelineWindow_Selection.cs.meta
TimelineWindow_StateChange.cs
TimelineWindow_StateChange.cs.meta
TimelineWindow_TimeArea.cs
TimelineWindow_TimeArea.cs.meta
TimelineWindow_TimeCursor.cs
TimelineWindow_TimeCursor.cs.meta
TimelineWindow_TrackGui.cs
TimelineWindow_TrackGui.cs.meta
ViewModel.meta
WindowConstants.cs
WindowConstants.cs.meta
inspectors
treeview
Actions.meta
Activation.meta
Analytics.meta
Animation.meta
Attributes.meta
Audio.meta
ControlTrack.meta
CurveEditUtility.cs
CurveEditUtility.cs.meta
CustomEditors.meta
DirectorNamedColor.cs
DirectorNamedColor.cs.meta
DirectorStyles.cs
DirectorStyles.cs.meta
Extensions.meta
Items.meta
Localization.meta
Manipulators.meta
MenuPriority.cs
MenuPriority.cs.meta
Playables.meta
Properties.meta
Recording.meta
Shortcuts.cs
Shortcuts.cs.meta
Signals.meta
State.meta
StyleSheets.meta
TimelineEditor.cs
TimelineEditor.cs.meta
TimelineHelpers.cs
TimelineHelpers.cs.meta
TimelineSelection.cs
TimelineSelection.cs.meta
TimelineUtility.cs
TimelineUtility.cs.meta
Tooltip.cs
Tooltip.cs.meta
Trackhead.cs
Trackhead.cs.meta
Undo.meta
Unity.Timeline.Editor.asmdef
Unity.Timeline.Editor.asmdef.meta
UnityEditorInternals.cs
UnityEditorInternals.cs.meta
Utilities.meta
Window.meta
inspectors.meta
treeview.meta
Runtime
Samples~
.signature
CHANGELOG.md
CHANGELOG.md.meta
DocCodeExamples.meta
Editor.meta
LICENSE.md
LICENSE.md.meta
README.md
README.md.meta
Runtime.meta
ValidationExceptions.json
ValidationExceptions.json.meta
package.json
package.json.meta
com.unity.ugui@1.0.0
com.unity.visualscripting@1.9.4
PackageManager
PlayModeViewStates
PlayerDataCache
ScriptAssemblies
Search
ShaderCache
SplashScreenCache
StateCache
UIElements
AnnotationManager
ArtifactDB
ArtifactDB-lock
BuildPlayer.prefs
BuildSettings.asset
EditorOnlyScriptingSettings.json
EditorOnlyVirtualTextureState.json
EditorSnapSettings.asset
EditorUserBuildSettings.asset
InspectorExpandedItems.asset
LastBuild.buildreport
LastSceneManagerSetup.txt
LibraryFormatVersion.txt
MonoManager.asset
SceneVisibilityState.asset
ScriptMapper
ShaderCache.db
SourceAssetDB
SourceAssetDB-lock
SpriteAtlasDatabase.asset
Style.catalog
expandedItems
ilpp.pid
Logs
Packages
ProjectSettings
UserSettings
obj
.vsconfig
Assembly-CSharp.Player.csproj
Assembly-CSharp.csproj
TM1.sln
Unity.CollabProxy.Editor.csproj
Unity.EditorCoroutines.Editor.csproj
Unity.Performance.Profile-Analyzer.Editor.csproj
Unity.PlasticSCM.Editor.csproj
Unity.Rider.Editor.csproj
Unity.Settings.Editor.csproj
Unity.TestTools.CodeCoverage.Editor.OpenCover.Model.csproj
Unity.TestTools.CodeCoverage.Editor.OpenCover.Mono.Reflection.csproj
Unity.TestTools.CodeCoverage.Editor.csproj
Unity.TextMeshPro.Editor.csproj
Unity.TextMeshPro.Player.csproj
Unity.TextMeshPro.csproj
Unity.Timeline.Editor.csproj
Unity.Timeline.Player.csproj
Unity.Timeline.csproj
Unity.VSCode.Editor.csproj
Unity.VisualScripting.Core.Editor.csproj
Unity.VisualScripting.Core.Player.csproj
Unity.VisualScripting.Core.csproj
Unity.VisualScripting.Flow.Editor.csproj
Unity.VisualScripting.Flow.Player.csproj
Unity.VisualScripting.Flow.csproj
Unity.VisualScripting.SettingsProvider.Editor.csproj
Unity.VisualScripting.Shared.Editor.csproj
Unity.VisualScripting.State.Editor.csproj
Unity.VisualScripting.State.Player.csproj
Unity.VisualScripting.State.csproj
Unity.VisualStudio.Editor.csproj
UnityEditor.TestRunner.csproj
UnityEditor.UI.csproj
UnityEngine.TestRunner.Player.csproj
UnityEngine.TestRunner.csproj
UnityEngine.UI.Player.csproj
UnityEngine.UI.csproj

120 lines
3.5 KiB
C#
Raw Permalink Normal View History

2025-01-17 13:10:20 +01:00
using System;
using System.IO;
using UnityEditorInternal;
using UnityEngine;
using UnityObject = UnityEngine.Object;
namespace UnityEditor.Timeline
{
class ScriptableObjectViewPrefs<TViewModel> : IDisposable where TViewModel : ScriptableObject
{
const string k_DefaultFilePath = "Library/";
const string k_Extension = ".pref";
readonly string m_RelativePath;
readonly string m_AbsolutePath;
readonly string m_FileName;
ScriptableObject m_Asset;
TViewModel m_ViewModel;
bool isSavable
{
get
{
return m_Asset != null &&
m_ViewModel != null &&
!string.IsNullOrEmpty(m_FileName);
}
}
public ScriptableObjectViewPrefs(ScriptableObject asset, string relativeSavePath)
{
m_Asset = asset;
m_RelativePath = string.IsNullOrEmpty(relativeSavePath) ? k_DefaultFilePath : relativeSavePath;
if (!m_RelativePath.EndsWith("/", StringComparison.Ordinal))
m_RelativePath += "/";
m_AbsolutePath = Application.dataPath + "/../" + m_RelativePath;
var assetKey = GetAssetKey(asset);
m_FileName = string.IsNullOrEmpty(assetKey) ? string.Empty : assetKey + k_Extension;
}
public TViewModel viewModel
{
get
{
if (m_ViewModel == null)
{
if (m_Asset == null)
m_ViewModel = CreateViewModel();
else
m_ViewModel = LoadViewModel() ?? CreateViewModel();
}
return m_ViewModel;
}
}
public void Save()
{
if (!isSavable)
return;
// make sure the path exists or file write will fail
if (!Directory.Exists(m_AbsolutePath))
Directory.CreateDirectory(m_AbsolutePath);
const bool saveAsText = true;
InternalEditorUtility.SaveToSerializedFileAndForget(new UnityObject[] { m_ViewModel }, m_RelativePath + m_FileName, saveAsText);
}
public void DeleteFile()
{
if (!isSavable)
return;
var path = m_AbsolutePath + m_FileName;
if (!File.Exists(path))
return;
File.Delete(path);
}
public void Dispose()
{
if (m_ViewModel != null)
UnityObject.DestroyImmediate(m_ViewModel);
m_Asset = null;
}
public static TViewModel CreateViewModel()
{
var model = ScriptableObject.CreateInstance<TViewModel>();
model.hideFlags |= HideFlags.HideAndDontSave;
return model;
}
TViewModel LoadViewModel()
{
if (string.IsNullOrEmpty(m_FileName))
return null;
var objects = InternalEditorUtility.LoadSerializedFileAndForget(m_RelativePath + m_FileName);
if (objects.Length <= 0 || objects[0] == null)
return null;
var model = (TViewModel)objects[0];
model.hideFlags |= HideFlags.HideAndDontSave;
return model;
}
static string GetAssetKey(UnityObject asset)
{
return asset == null ? string.Empty : AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(asset));
}
}
}