diff --git a/.gitignore b/.gitignore
index ddedfa1..763b287 100644
--- a/.gitignore
+++ b/.gitignore
@@ -66,3 +66,21 @@ Assets/NetCodeGenerated*
.DS_Store
RiderScriptEditorPersistedState.asset
.claude/
+
+# Console / restricted-platform settings. Unity regenerates these whenever the matching closed
+# platform module is installed (PS5, GameCore/Xbox, Switch/Kepler, QNX, EmbeddedLinux), so they vary
+# per machine and aren't needed for these cross-platform audio examples. The rest of ProjectSettings
+# is still committed.
+PS4Settings.json
+PS5Settings.json
+KeplerSettings.json
+QNXSettings.json
+EmbeddedLinuxSettings.json
+GameCore*Settings.asset
+ScarlettGame.config
+XboxOneGame.config
+
+# Regenerated by Unity on open; not committed by these examples.
+packages-lock.json
+PackageManager.policy
+ProjectAuditorSettings.asset
diff --git a/README.md b/README.md
index 5f054e5..07c9cc4 100644
--- a/README.md
+++ b/README.md
@@ -9,6 +9,7 @@ Each project is a standalone Unity project; open its folder in the required Unit
| Project | Description | Required Unity version |
| ------- | ----------- | ---------------------- |
| [Scriptable Processor Random Container](scriptable-processor-random-container) | Implements a simplified version of the Audio Random Container using nested generators. | 6.5 |
+| [Scriptable Processor Seeking](scriptable-processor-seeking) | Demonstrates sample-accurate seeking of a playing generator via `SeekMessage`, immediately or scheduled. | 6.7 |
## License
diff --git a/scriptable-processor-seeking/Assets/AudioClips.meta b/scriptable-processor-seeking/Assets/AudioClips.meta
new file mode 100644
index 0000000..48e5967
--- /dev/null
+++ b/scriptable-processor-seeking/Assets/AudioClips.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: b3a98323df9248bc8a9032c6ed5fb4a4
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/scriptable-processor-seeking/Assets/AudioClips/Count1To10.wav b/scriptable-processor-seeking/Assets/AudioClips/Count1To10.wav
new file mode 100644
index 0000000..245e966
--- /dev/null
+++ b/scriptable-processor-seeking/Assets/AudioClips/Count1To10.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4b6b2e5cbac5bdf5effcd056450e1c0d7cc7e97cb63fd6613bfaa7512434eb04
+size 882078
diff --git a/scriptable-processor-seeking/Assets/AudioClips/Count1To10.wav.meta b/scriptable-processor-seeking/Assets/AudioClips/Count1To10.wav.meta
new file mode 100644
index 0000000..fb6020b
--- /dev/null
+++ b/scriptable-processor-seeking/Assets/AudioClips/Count1To10.wav.meta
@@ -0,0 +1,23 @@
+fileFormatVersion: 2
+guid: c1d7ad1ffa34a421a94d5602f74625b2
+AudioImporter:
+ externalObjects: {}
+ serializedVersion: 8
+ defaultSettings:
+ serializedVersion: 2
+ loadType: 0
+ sampleRateSetting: 0
+ sampleRateOverride: 44100
+ compressionFormat: 1
+ quality: 1
+ conversionMode: 0
+ preloadAudioData: 0
+ platformSettingOverrides: {}
+ forceToMono: 0
+ normalize: 1
+ loadInBackground: 0
+ ambisonic: 0
+ 3D: 1
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/scriptable-processor-seeking/Assets/Scenes.meta b/scriptable-processor-seeking/Assets/Scenes.meta
new file mode 100644
index 0000000..434512d
--- /dev/null
+++ b/scriptable-processor-seeking/Assets/Scenes.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: dc139e75749643399e1ddfe4bd9f4bd5
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/scriptable-processor-seeking/Assets/Scenes/Seeking.unity b/scriptable-processor-seeking/Assets/Scenes/Seeking.unity
new file mode 100644
index 0000000..a6d3cef
--- /dev/null
+++ b/scriptable-processor-seeking/Assets/Scenes/Seeking.unity
@@ -0,0 +1,277 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!29 &1
+OcclusionCullingSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ m_OcclusionBakeSettings:
+ smallestOccluder: 5
+ smallestHole: 0.25
+ backfaceThreshold: 100
+ m_SceneGUID: 00000000000000000000000000000000
+ m_OcclusionCullingData: {fileID: 0}
+--- !u!104 &2
+RenderSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 10
+ m_Fog: 0
+ m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
+ m_FogMode: 3
+ m_FogDensity: 0.01
+ m_LinearFogStart: 0
+ m_LinearFogEnd: 300
+ m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
+ m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
+ m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
+ m_AmbientIntensity: 1
+ m_AmbientMode: 0
+ m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
+ m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0}
+ m_HaloStrength: 0.5
+ m_FlareStrength: 1
+ m_FlareFadeSpeed: 3
+ m_HaloTexture: {fileID: 0}
+ m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
+ m_DefaultReflectionMode: 0
+ m_DefaultReflectionResolution: 128
+ m_ReflectionBounces: 1
+ m_ReflectionIntensity: 1
+ m_CustomReflection: {fileID: 0}
+ m_Sun: {fileID: 0}
+ m_UseRadianceAmbientProbe: 0
+--- !u!157 &3
+LightmapSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 13
+ m_BakeOnSceneLoad: 0
+ m_GISettings:
+ serializedVersion: 2
+ m_BounceScale: 1
+ m_IndirectOutputScale: 1
+ m_AlbedoBoost: 1
+ m_EnvironmentLightingMode: 0
+ m_EnableBakedLightmaps: 1
+ m_EnableRealtimeLightmaps: 0
+ m_LightmapEditorSettings:
+ serializedVersion: 12
+ m_Resolution: 2
+ m_BakeResolution: 40
+ m_AtlasSize: 1024
+ m_AO: 0
+ m_AOMaxDistance: 1
+ m_CompAOExponent: 1
+ m_CompAOExponentDirect: 0
+ m_ExtractAmbientOcclusion: 0
+ m_Padding: 2
+ m_LightmapParameters: {fileID: 0}
+ m_LightmapsBakeMode: 1
+ m_TextureCompression: 1
+ m_ReflectionCompression: 2
+ m_MixedBakeMode: 2
+ m_BakeBackend: 1
+ m_PVRSampling: 1
+ m_PVRDirectSampleCount: 32
+ m_PVRSampleCount: 512
+ m_PVRBounces: 2
+ m_PVREnvironmentSampleCount: 256
+ m_PVREnvironmentReferencePointCount: 2048
+ m_PVRFilteringMode: 1
+ m_PVRDenoiserTypeDirect: 1
+ m_PVRDenoiserTypeIndirect: 1
+ m_PVRDenoiserTypeAO: 1
+ m_PVRFilterTypeDirect: 0
+ m_PVRFilterTypeIndirect: 0
+ m_PVRFilterTypeAO: 0
+ m_PVREnvironmentMIS: 1
+ m_PVRCulling: 1
+ m_PVRFilteringGaussRadiusDirect: 1
+ m_PVRFilteringGaussRadiusIndirect: 5
+ m_PVRFilteringGaussRadiusAO: 2
+ m_PVRFilteringAtrousPositionSigmaDirect: 0.5
+ m_PVRFilteringAtrousPositionSigmaIndirect: 2
+ m_PVRFilteringAtrousPositionSigmaAO: 1
+ m_ExportTrainingData: 0
+ m_TrainingDataDestination: TrainingData
+ m_LightProbeSampleCountMultiplier: 4
+ m_LightingDataAsset: {fileID: 20201, guid: 0000000000000000f000000000000000, type: 0}
+ m_LightingSettings: {fileID: 0}
+--- !u!196 &4
+NavMeshSettings:
+ serializedVersion: 2
+ m_ObjectHideFlags: 0
+ m_BuildSettings:
+ serializedVersion: 3
+ agentTypeID: 0
+ agentRadius: 0.5
+ agentHeight: 2
+ agentSlope: 45
+ agentClimb: 0.4
+ ledgeDropHeight: 0
+ maxJumpAcrossDistance: 0
+ minRegionArea: 2
+ manualCellSize: 0
+ cellSize: 0.16666667
+ manualTileSize: 0
+ tileSize: 256
+ buildHeightMesh: 0
+ maxJobWorkers: 0
+ preserveTilesOutsideBounds: 0
+ debug:
+ m_Flags: 0
+ m_NavMeshData: {fileID: 0}
+--- !u!1 &200882525
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 200882526}
+ - component: {fileID: 200882528}
+ - component: {fileID: 200882527}
+ m_Layer: 0
+ m_Name: Seek Tester
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &200882526
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 200882525}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &200882527
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 200882525}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 07ccc1d8d997e4b77ab699b6c832569f, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: Assembly-CSharp::SeekTester
+--- !u!114 &200882528
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 200882525}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 67d5f0b5ae5d34ba39ba025722f0f8e2, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: Assembly-CSharp::ClipPlayerGenerator
+ clip: {fileID: 8300000, guid: c1d7ad1ffa34a421a94d5602f74625b2, type: 3}
+--- !u!1 &330585543
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 330585546}
+ - component: {fileID: 330585545}
+ - component: {fileID: 330585544}
+ m_Layer: 0
+ m_Name: Main Camera
+ m_TagString: MainCamera
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!81 &330585544
+AudioListener:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 330585543}
+ m_Enabled: 1
+--- !u!20 &330585545
+Camera:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 330585543}
+ m_Enabled: 1
+ serializedVersion: 2
+ m_ClearFlags: 1
+ m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
+ m_projectionMatrixMode: 1
+ m_GateFitMode: 2
+ m_FOVAxisMode: 0
+ m_Iso: 200
+ m_ShutterSpeed: 0.005
+ m_Aperture: 16
+ m_FocusDistance: 10
+ m_FocalLength: 50
+ m_BladeCount: 5
+ m_Curvature: {x: 2, y: 11}
+ m_BarrelClipping: 0.25
+ m_Anamorphism: 0
+ m_SensorSize: {x: 36, y: 24}
+ m_LensShift: {x: 0, y: 0}
+ m_NormalizedViewPortRect:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 1
+ height: 1
+ near clip plane: 0.3
+ far clip plane: 1000
+ field of view: 60
+ orthographic: 0
+ orthographic size: 5
+ m_Depth: -1
+ m_CullingMask:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_RenderingPath: -1
+ m_TargetTexture: {fileID: 0}
+ m_TargetDisplay: 0
+ m_TargetEye: 3
+ m_HDR: 1
+ m_AllowMSAA: 1
+ m_AllowDynamicResolution: 0
+ m_ForceIntoRT: 0
+ m_OcclusionCulling: 1
+ m_StereoConvergence: 10
+ m_StereoSeparation: 0.022
+--- !u!4 &330585546
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 330585543}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 1, z: -10}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1660057539 &9223372036854775807
+SceneRoots:
+ m_ObjectHideFlags: 0
+ m_Roots:
+ - {fileID: 330585546}
+ - {fileID: 200882526}
diff --git a/scriptable-processor-seeking/Assets/Scenes/Seeking.unity.meta b/scriptable-processor-seeking/Assets/Scenes/Seeking.unity.meta
new file mode 100644
index 0000000..2765f78
--- /dev/null
+++ b/scriptable-processor-seeking/Assets/Scenes/Seeking.unity.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 99c9720ab356a0642a771bea13969a05
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/scriptable-processor-seeking/Assets/Scripts.meta b/scriptable-processor-seeking/Assets/Scripts.meta
new file mode 100644
index 0000000..d9b3155
--- /dev/null
+++ b/scriptable-processor-seeking/Assets/Scripts.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: ce8692097fae4eae987e5d52f94edd6a
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/scriptable-processor-seeking/Assets/Scripts/ClipPlayerGenerator.cs b/scriptable-processor-seeking/Assets/Scripts/ClipPlayerGenerator.cs
new file mode 100644
index 0000000..3920a34
--- /dev/null
+++ b/scriptable-processor-seeking/Assets/Scripts/ClipPlayerGenerator.cs
@@ -0,0 +1,233 @@
+using System.Runtime.InteropServices;
+using Unity.Burst;
+using Unity.IntegerTime;
+using UnityEngine;
+using UnityEngine.Audio;
+
+///
+/// Main-thread view of a playing instance.
+///
+/// The control side is an unmanaged struct living in native memory, so it can't touch a
+/// directly. It holds a to one of these instead,
+/// which gives the realtime side's "I'm done" report a way to reach .
+///
+public class ClipPlaybackState
+{
+ /// Set once the nested clip instance reports it has finished generating audio.
+ public bool finished;
+}
+
+/// Realtime -> control notification: the nested clip instance has finished.
+struct ClipFinishedEvent { }
+
+///
+/// Realtime side. Forwards every Process call to the clip's own generator instance and watches
+/// the returned for completion.
+///
+/// This is the only place end-of-clip is observable:
+/// is reported to whoever drives the nested instance, and nothing publishes it to the main thread.
+///
+[BurstCompile(CompileSynchronously = true)]
+struct ClipPlayerRealtime : GeneratorInstance.IRealtime
+{
+ // Handed over by Control.Configure, which may safely write here (realtime is suspended during it).
+ internal GeneratorInstance nested;
+ internal bool nestedValid;
+
+ // Latched so the control side is told exactly once, however many times Process runs afterwards.
+ internal bool reportedFinished;
+
+ // Mirrors of the clip's own metadata, resolved on the managed side at creation.
+ internal bool clipIsFinite;
+ internal bool clipIsRealtime;
+ internal bool clipHasLength;
+ internal DiscreteTime clipLength;
+
+ public bool isFinite => clipIsFinite;
+ public bool isRealtime => clipIsRealtime;
+ public DiscreteTime? length => clipHasLength ? clipLength : null;
+
+ // Nothing is sent control -> realtime; the instance arrives via Configure.
+ public void Update(ProcessorInstance.UpdatedDataContext context, ProcessorInstance.Pipe pipe) { }
+
+ public GeneratorInstance.Result Process(in RealtimeContext context, ProcessorInstance.Pipe pipe,
+ ChannelBuffer buffer, GeneratorInstance.Arguments args)
+ {
+ if (!nestedValid)
+ {
+ // Host buffer is not pre-zeroed.
+ buffer.Clear();
+ return buffer.frameCount;
+ }
+
+ var result = context.Process(nested, buffer, args);
+
+ if (result.isFinished() && !reportedFinished)
+ {
+ reportedFinished = true;
+ pipe.SendData(context, new ClipFinishedEvent());
+ }
+
+ return result;
+ }
+}
+
+///
+/// Control side. Owns the nested clip instance, forwards to it, and relays
+/// the realtime side's completion report to the managed .
+///
+struct ClipPlayerControl : GeneratorInstance.IControl
+{
+ // The control struct is unmanaged, so managed references are held as GCHandles (see RandomContainer
+ // for the same pattern). Freed in Dispose.
+ GCHandle m_ClipHandle;
+ GCHandle m_StateHandle;
+
+ GeneratorInstance m_Nested;
+ bool m_NestedCreated;
+
+ public ClipPlayerControl(AudioClip clip, ClipPlaybackState state)
+ {
+ m_ClipHandle = GCHandle.Alloc(clip, GCHandleType.Normal);
+ m_StateHandle = GCHandle.Alloc(state, GCHandleType.Normal);
+ m_Nested = default;
+ m_NestedCreated = false;
+ }
+
+ public void Configure(ControlContext context, ref ClipPlayerRealtime realtime, in AudioFormat format,
+ out GeneratorInstance.Setup setup, ref GeneratorInstance.Properties properties)
+ {
+ if (!m_NestedCreated)
+ {
+ // Instantiating the clip produces the SampleProvider-backed generator instance -- the one
+ // that handles seeks. Created here rather than in Update so it exists before the first
+ // Process call, and before SeekTester can send anything.
+ var clip = (IAudioGenerator)m_ClipHandle.Target;
+
+ m_Nested = clip.CreateInstance(context, format, default(GeneratorInstance.CreationParameters));
+ m_NestedCreated = true;
+ }
+ else
+ {
+ // Reconfiguration (device change): keep the existing instance, re-point it at the new format.
+ context.Configure(m_Nested, format);
+ }
+
+ // Run at exactly the clip's own rate and channel layout, so this wrapper stays consistent with
+ // the instance it drives and the host handles any conversion. If the nested instance could not
+ // be created, fall back to the host's suggested format: reporting an unset setup here surfaces
+ // as an invalid speakerMode inside Process and aborts the audio thread from Burst.
+ setup = m_NestedCreated
+ ? context.GetConfiguration(m_Nested).setup
+ : new GeneratorInstance.Setup(format);
+
+ realtime.nested = m_Nested;
+ realtime.nestedValid = m_NestedCreated;
+ }
+
+ public ProcessorInstance.Response OnMessage(ControlContext context, ProcessorInstance.Pipe pipe,
+ ProcessorInstance.Message message)
+ {
+ // The AudioSource's generatorInstance is now this wrapper, so seeks land here. Pass them down to
+ // the sample provider, which is what actually implements seeking.
+ if (m_NestedCreated && message.Is())
+ {
+ ref var seek = ref message.Get();
+
+ return context.SendMessage(m_Nested, ref seek);
+ }
+
+ return ProcessorInstance.Response.Unhandled;
+ }
+
+ public void Update(ControlContext context, ProcessorInstance.Pipe pipe)
+ {
+ foreach (var element in pipe.GetAvailableData(context))
+ {
+ if (element.TryGetData(out _))
+ {
+ var state = (ClipPlaybackState)m_StateHandle.Target;
+
+ state.finished = true;
+ }
+ }
+
+ if (m_NestedCreated)
+ {
+ context.Update(m_Nested);
+ }
+ }
+
+ public void Dispose(ControlContext context, ref ClipPlayerRealtime realtime)
+ {
+ if (m_NestedCreated)
+ {
+ context.Destroy(m_Nested);
+ m_NestedCreated = false;
+ }
+
+ m_ClipHandle.Free();
+ m_StateHandle.Free();
+ }
+}
+
+///
+/// Plays an through the SampleProvider generator path, so it supports
+/// seeking via (that path is the one that handles seeks).
+///
+/// Rather than handing the clip's instance straight to the AudioSource, this wraps it, so the
+/// realtime side can see the clip finish and report it back to the main thread via
+/// . Seeks are forwarded down to the clip's instance unchanged.
+///
+/// Assign a clip, then let something play it on an AudioSource
+/// ( does this: audioSource.generator = thisComponent).
+///
+public class ClipPlayerGenerator : MonoBehaviour, IAudioGenerator
+{
+ [Tooltip("The clip to play through the sample provider (e.g. your 10s counting file).")]
+ public AudioClip clip;
+
+ ///
+ /// State shared with the currently playing instance. Replaced on each ,
+ /// and null until the first one is created.
+ ///
+ public ClipPlaybackState playbackState { get; private set; }
+
+ // Asset-level metadata, mirrored from the clip so this wrapper describes what it actually produces.
+ public bool isFinite => clip != null && ((IAudioGenerator)clip).isFinite;
+ public bool isRealtime => clip != null && ((IAudioGenerator)clip).isRealtime;
+ public DiscreteTime? length => clip != null ? ((IAudioGenerator)clip).length : null;
+
+ // Called by the audio system when the AudioSource starts playing this generator.
+ public GeneratorInstance CreateInstance(ControlContext context, AudioFormat? nestedFormat, GeneratorInstance.CreationParameters parameters)
+ {
+ if (clip == null)
+ {
+ Debug.LogError($"{nameof(ClipPlayerGenerator)}: no clip assigned.", this);
+ return default;
+ }
+
+ playbackState = new ClipPlaybackState();
+
+ var asGenerator = (IAudioGenerator)clip;
+ var clipLength = asGenerator.length;
+
+ var realtime = new ClipPlayerRealtime
+ {
+ clipIsFinite = asGenerator.isFinite,
+ clipIsRealtime = asGenerator.isRealtime,
+ clipHasLength = clipLength.HasValue,
+ clipLength = clipLength ?? default
+ };
+
+ // UpdateAlways so the control side pumps the nested instance every frame, rather than only when
+ // pipe data happens to be waiting.
+ var creationParameters = new GeneratorInstance.CreationParameters
+ {
+ controlUpdateSetting = ProcessorInstance.UpdateSetting.UpdateAlways,
+ realtimeUpdateSetting = ProcessorInstance.UpdateSetting.UpdateAlways
+ };
+
+ return context.AllocateGenerator(realtime, new ClipPlayerControl(clip, playbackState), nestedFormat, creationParameters);
+ }
+}
diff --git a/scriptable-processor-seeking/Assets/Scripts/ClipPlayerGenerator.cs.meta b/scriptable-processor-seeking/Assets/Scripts/ClipPlayerGenerator.cs.meta
new file mode 100644
index 0000000..f2dd62f
--- /dev/null
+++ b/scriptable-processor-seeking/Assets/Scripts/ClipPlayerGenerator.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 67d5f0b5ae5d34ba39ba025722f0f8e2
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/scriptable-processor-seeking/Assets/Scripts/SeekTester.cs b/scriptable-processor-seeking/Assets/Scripts/SeekTester.cs
new file mode 100644
index 0000000..4907ef1
--- /dev/null
+++ b/scriptable-processor-seeking/Assets/Scripts/SeekTester.cs
@@ -0,0 +1,203 @@
+using System.Collections.Generic;
+using Unity.IntegerTime;
+using UnityEngine;
+using UnityEngine.Audio;
+
+///
+/// Manual seek playground. Drag onto a GameObject (auto-adds ),
+/// assign a clip on that component, enter Play mode.
+///
+/// - Starts STOPPED. Use the Play/Stop button.
+/// - Build up a queue of seeks: pick "when" (the clip second at which the seek fires) with the slider,
+/// then click a number button to enqueue "when the clip reaches that second, jump to number N".
+/// - You can enqueue while stopped; the queue is delivered to the generator when you press Play,
+/// so several seeks end up scheduled on top of each other in the SampleProvider's own queue.
+/// - The staged list stays on screen after Play: entries grey out once sent to the instance, and
+/// dim further when playback ends. (The demo can't observe which seeks actually fire or are
+/// dropped inside the provider, so it shows "sent" / "played", not per-seek firing.)
+/// - Each seek is a SeekMessage(offset, when); `when` maps to sample-accurate scheduling.
+///
+/// Requires an AudioListener in the scene (Main Camera has one by default).
+///
+[RequireComponent(typeof(ClipPlayerGenerator))]
+public class SeekTester : MonoBehaviour
+{
+ struct StagedSeek
+ {
+ public int destSecond; // where to jump to (seconds into the clip)
+ public int whenSecond; // clip position (second) at which the seek fires
+ public bool immediate; // if true, fire at the next process block (ignore whenSecond)
+ public bool sent; // delivered to the current generator instance this play session
+ }
+
+ ClipPlayerGenerator m_Generator;
+ AudioSource m_Source;
+
+ readonly List m_Queued = new List();
+ int m_WhenSecond; // slider value
+ bool m_Immediate; // send with immediate 'when'
+ bool m_FlushRequested; // deliver the queue once the generator instance is live
+
+ void Start()
+ {
+ m_Generator = GetComponent();
+
+ // No explicit LoadAudioData() here: the sample provider backend honors the clip's own import
+ // settings (load type, preload, load in background) and loads it as part of CreateInstance.
+ m_Source = GetComponent();
+ if (m_Source == null)
+ m_Source = gameObject.AddComponent();
+
+ m_Source.playOnAwake = false;
+ m_Source.spatialBlend = 0f; // 2D so it's audible without positioning
+ m_Source.generator = m_Generator; // play the clip through the SampleProvider generator
+ // Intentionally NOT playing here — starts stopped.
+ }
+
+ bool InstanceLive()
+ => m_Source.isPlaying && ControlContext.builtIn.Exists(m_Source.generatorInstance);
+
+ void Update()
+ {
+ // The generator instance only exists a frame or so after Play(), so deliver the queue here.
+ if (m_FlushRequested && InstanceLive())
+ {
+ FlushQueue();
+ m_FlushRequested = false;
+ }
+
+ // Reset the transport once the clip runs out. A generator-driven AudioSource keeps reporting
+ // isPlaying until something stops it explicitly, and the clip finishing is only visible on the
+ // realtime thread -- so ClipPlayerGenerator relays it to the main thread for us.
+ var state = m_Generator.playbackState;
+ if (state != null && state.finished && m_Source.isPlaying)
+ {
+ state.finished = false;
+ m_Source.Stop();
+ }
+ }
+
+ void FlushQueue()
+ {
+ var instance = m_Source.generatorInstance;
+
+ // Seeks are sent in whatever order they were staged; scheduling order is up to the caller.
+ // The sample provider fires each seek when playback reaches its 'when', and drops any seek
+ // whose 'when' has already been passed. Sent entries are kept (and greyed in the UI) rather
+ // than cleared, so the list stays visible; each is delivered once per play session.
+ for (int i = 0; i < m_Queued.Count; i++)
+ {
+ var s = m_Queued[i];
+ if (s.sent)
+ continue;
+
+ var offset = new DiscreteTime(s.destSecond); // DiscreteTime(int) is seconds
+ var msg = s.immediate
+ ? new SeekMessage(offset) // when omitted = immediate
+ : new SeekMessage(offset, new DiscreteTime(s.whenSecond));
+
+ var response = ControlContext.builtIn.SendMessage(instance, ref msg);
+ Debug.Log($"Sent seek: hear {s.destSecond + 1} " +
+ $"{(s.immediate ? "(immediate)" : $"when clip reaches {s.whenSecond}s")} -> {response}");
+
+ s.sent = true;
+ m_Queued[i] = s;
+ }
+ }
+
+ void OnGUI()
+ {
+ var clip = m_Generator != null ? m_Generator.clip : null;
+ if (clip == null)
+ {
+ GUI.Label(new Rect(10, 10, 460, 20), "Assign a clip on the ClipPlayerGenerator component.");
+ return;
+ }
+
+ int maxSec = Mathf.Max(1, Mathf.CeilToInt(clip.length));
+
+ GUILayout.BeginArea(new Rect(10, 10, 340, 620), GUI.skin.box);
+
+ GUILayout.Label($"Clip: {clip.name} ({clip.length:0.0}s @ {clip.frequency} Hz)");
+ GUILayout.Label($"Playing: {m_Source.isPlaying}");
+
+ // --- Transport ---
+ if (GUILayout.Button(m_Source.isPlaying ? "Stop" : "Play"))
+ {
+ if (m_Source.isPlaying)
+ {
+ m_Source.Stop();
+ }
+ else
+ {
+ // Re-arm the whole list for the new instance so it re-sends and re-animates each Play.
+ for (int i = 0; i < m_Queued.Count; i++)
+ {
+ var s = m_Queued[i];
+ s.sent = false;
+ m_Queued[i] = s;
+ }
+
+ m_Source.Play();
+ m_FlushRequested = true; // deliver whatever is queued once it's live
+ }
+ }
+
+ GUILayout.Space(8);
+
+ // --- "when" control ---
+ m_Immediate = GUILayout.Toggle(m_Immediate, "Fire immediately (ignore 'when')");
+ GUI.enabled = !m_Immediate;
+ GUILayout.Label($"Fire when clip reaches second: {m_WhenSecond}");
+ // Stops one second short of the clip's end: a seek scheduled for the last second could never
+ // fire, because playback ends at the moment it would be reached.
+ m_WhenSecond = Mathf.RoundToInt(GUILayout.HorizontalSlider(m_WhenSecond, 0, maxSec - 1));
+ GUI.enabled = true;
+
+ GUILayout.Space(8);
+
+ // --- destination buttons (1-indexed to match the spoken numbers) ---
+ GUILayout.Label("Enqueue: seek so I hear number");
+ const int cols = 5;
+ for (int i = 0; i < maxSec; i++)
+ {
+ if (i % cols == 0) GUILayout.BeginHorizontal();
+
+ int number = i + 1; // button label
+ int destSecond = i; // number N is spoken at second (N-1)
+
+ if (GUILayout.Button(number.ToString()))
+ {
+ m_Queued.Add(new StagedSeek { destSecond = destSecond, whenSecond = m_WhenSecond, immediate = m_Immediate });
+ if (InstanceLive())
+ m_FlushRequested = true; // playing already — schedule it now (still honors 'when')
+ }
+
+ if (i % cols == cols - 1 || i == maxSec - 1) GUILayout.EndHorizontal();
+ }
+
+ GUILayout.Space(8);
+
+ // --- queued list (kept visible; greyed once sent, dimmer once playback ends) ---
+ GUILayout.Label($"Queued ({m_Queued.Count}):");
+ var prevContentColor = GUI.contentColor;
+ foreach (var s in m_Queued)
+ {
+ if (!s.sent)
+ GUI.contentColor = Color.white; // staged, not yet sent
+ else if (m_Source.isPlaying)
+ GUI.contentColor = new Color(0.60f, 0.60f, 0.60f); // sent to the playing instance
+ else
+ GUI.contentColor = new Color(0.40f, 0.40f, 0.40f); // playback finished / stopped
+
+ string state = !s.sent ? "" : (m_Source.isPlaying ? " - sent" : " - played");
+ GUILayout.Label($" hear {s.destSecond + 1} {(s.immediate ? "(immediate)" : $"@ clip {s.whenSecond}s")}{state}");
+ }
+ GUI.contentColor = prevContentColor;
+
+ if (m_Queued.Count > 0 && GUILayout.Button("Clear queue"))
+ m_Queued.Clear();
+
+ GUILayout.EndArea();
+ }
+}
diff --git a/scriptable-processor-seeking/Assets/Scripts/SeekTester.cs.meta b/scriptable-processor-seeking/Assets/Scripts/SeekTester.cs.meta
new file mode 100644
index 0000000..e3f3311
--- /dev/null
+++ b/scriptable-processor-seeking/Assets/Scripts/SeekTester.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 07ccc1d8d997e4b77ab699b6c832569f
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/scriptable-processor-seeking/Packages/manifest.json b/scriptable-processor-seeking/Packages/manifest.json
new file mode 100644
index 0000000..be2cdd1
--- /dev/null
+++ b/scriptable-processor-seeking/Packages/manifest.json
@@ -0,0 +1,41 @@
+{
+ "dependencies": {
+ "com.unity.ide.rider": "3.0.38",
+ "com.unity.ide.visualstudio": "2.0.26",
+ "com.unity.modules.accessibility": "1.0.0",
+ "com.unity.modules.adaptiveperformance": "1.0.0",
+ "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.physics": "1.0.0",
+ "com.unity.modules.physics2d": "1.0.0",
+ "com.unity.modules.physicscore2d": "1.0.0",
+ "com.unity.modules.screencapture": "1.0.0",
+ "com.unity.modules.smartstrings": "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.vectorgraphics": "1.0.0",
+ "com.unity.modules.vehicles": "1.0.0",
+ "com.unity.modules.video": "1.0.0",
+ "com.unity.modules.wind": "1.0.0",
+ "com.unity.modules.xr": "1.0.0"
+ }
+}
diff --git a/scriptable-processor-seeking/ProjectSettings/AudioManager.asset b/scriptable-processor-seeking/ProjectSettings/AudioManager.asset
new file mode 100644
index 0000000..27287fe
--- /dev/null
+++ b/scriptable-processor-seeking/ProjectSettings/AudioManager.asset
@@ -0,0 +1,19 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!11 &1
+AudioManager:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ m_Volume: 1
+ Rolloff Scale: 1
+ Doppler Factor: 1
+ Default Speaker Mode: 2
+ m_SampleRate: 0
+ m_DSPBufferSize: 1024
+ m_VirtualVoiceCount: 512
+ m_RealVoiceCount: 32
+ m_SpatializerPlugin:
+ m_AmbisonicDecoderPlugin:
+ m_DisableAudio: 0
+ m_VirtualizeEffects: 1
+ m_RequestedDSPBufferSize: 0
diff --git a/scriptable-processor-seeking/ProjectSettings/ClusterInputManager.asset b/scriptable-processor-seeking/ProjectSettings/ClusterInputManager.asset
new file mode 100644
index 0000000..e7886b2
--- /dev/null
+++ b/scriptable-processor-seeking/ProjectSettings/ClusterInputManager.asset
@@ -0,0 +1,6 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!236 &1
+ClusterInputManager:
+ m_ObjectHideFlags: 0
+ m_Inputs: []
diff --git a/scriptable-processor-seeking/ProjectSettings/DynamicsManager.asset b/scriptable-processor-seeking/ProjectSettings/DynamicsManager.asset
new file mode 100644
index 0000000..fc90ab9
--- /dev/null
+++ b/scriptable-processor-seeking/ProjectSettings/DynamicsManager.asset
@@ -0,0 +1,36 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!55 &1
+PhysicsManager:
+ m_ObjectHideFlags: 0
+ serializedVersion: 13
+ m_Gravity: {x: 0, y: -9.81, z: 0}
+ m_DefaultMaterial: {fileID: 0}
+ m_BounceThreshold: 2
+ m_SleepThreshold: 0.005
+ m_DefaultContactOffset: 0.01
+ m_DefaultSolverIterations: 6
+ m_DefaultSolverVelocityIterations: 1
+ m_QueriesHitBackfaces: 0
+ m_QueriesHitTriggers: 1
+ m_EnableAdaptiveForce: 0
+ m_ClothInterCollisionDistance: 0.1
+ m_ClothInterCollisionStiffness: 0.2
+ m_ContactsGeneration: 1
+ m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ m_AutoSimulation: 1
+ m_AutoSyncTransforms: 0
+ m_ReuseCollisionCallbacks: 1
+ m_ClothInterCollisionSettingsToggle: 0
+ m_ClothGravity: {x: 0, y: -9.81, z: 0}
+ m_ContactPairsMode: 0
+ m_BroadphaseType: 0
+ m_WorldBounds:
+ m_Center: {x: 0, y: 0, z: 0}
+ m_Extent: {x: 250, y: 250, z: 250}
+ m_WorldSubdivisions: 8
+ m_FrictionType: 0
+ m_EnableEnhancedDeterminism: 0
+ m_EnableUnifiedHeightmaps: 1
+ m_SolverType: 0
+ m_DefaultMaxAngularSpeed: 50
diff --git a/scriptable-processor-seeking/ProjectSettings/EditorBuildSettings.asset b/scriptable-processor-seeking/ProjectSettings/EditorBuildSettings.asset
new file mode 100644
index 0000000..3aeebfb
--- /dev/null
+++ b/scriptable-processor-seeking/ProjectSettings/EditorBuildSettings.asset
@@ -0,0 +1,11 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1045 &1
+EditorBuildSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ m_Scenes:
+ - enabled: 1
+ path: Assets/Scenes/Seeking.unity
+ guid: 99c9720ab356a0642a771bea13969a05
+ m_configObjects: {}
diff --git a/scriptable-processor-seeking/ProjectSettings/EditorSettings.asset b/scriptable-processor-seeking/ProjectSettings/EditorSettings.asset
new file mode 100644
index 0000000..327f9e4
--- /dev/null
+++ b/scriptable-processor-seeking/ProjectSettings/EditorSettings.asset
@@ -0,0 +1,52 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!159 &1
+EditorSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 16
+ m_SerializationMode: 2
+ m_LineEndingsForNewScripts: 0
+ m_DefaultBehaviorMode: 0
+ m_PrefabRegularEnvironment: {fileID: 0}
+ m_PrefabUIEnvironment: {fileID: 0}
+ m_SpritePackerMode: 0
+ m_SpritePackerCacheSize: 10
+ m_SpritePackerPaddingPower: 1
+ m_Bc7TextureCompressor: 0
+ m_EtcTextureCompressorBehavior: 1
+ m_EtcTextureFastCompressor: 1
+ m_EtcTextureNormalCompressor: 2
+ m_EtcTextureBestCompressor: 4
+ m_ProjectGenerationIncludedExtensions: txt;xml;fnt;cd;asmdef;rsp;asmref
+ m_ProjectGenerationRootNamespace:
+ m_EnableTextureStreamingInEditMode: 1
+ m_EnableTextureStreamingInPlayMode: 1
+ m_EnableEditorAsyncCPUTextureLoading: 0
+ m_AsyncShaderCompilation: 1
+ m_BlockShaders: 0
+ m_UnlockBlockShaders: 0
+ m_PrefabModeAllowAutoSave: 1
+ m_EnterPlayModeOptionsEnabled: 1
+ m_EnterPlayModeOptions: 0
+ m_GameObjectNamingDigits: 1
+ m_GameObjectNamingScheme: 0
+ m_AssetNamingUsesSpace: 1
+ m_InspectorUseIMGUIDefaultInspector: 0
+ m_UseLegacyProbeSampleCount: 0
+ m_DisableCookiesInLightmapper: 0
+ m_ShadowmaskStitching: 0
+ m_AssetPipelineMode: 1
+ m_RefreshImportMode: 0
+ m_CacheServerMode: 0
+ m_CacheServerEndpoint:
+ m_CacheServerNamespacePrefix: default
+ m_CacheServerEnableDownload: 1
+ m_CacheServerEnableUpload: 1
+ m_CacheServerEnableTls: 0
+ m_CacheServerImportResultCachingEnabled: 0
+ m_CacheServerValidationMode: 2
+ m_CacheServerDownloadBatchSize: 128
+ m_EnableEnlightenBakedGI: 0
+ m_ReferencedClipsExactNaming: 1
+ m_ForceAssetUnloadAndGCOnSceneLoad: 1
+ m_HideBuildProfileClassicPlatforms: 1
diff --git a/scriptable-processor-seeking/ProjectSettings/GraphicsSettings.asset b/scriptable-processor-seeking/ProjectSettings/GraphicsSettings.asset
new file mode 100644
index 0000000..3dc8c28
--- /dev/null
+++ b/scriptable-processor-seeking/ProjectSettings/GraphicsSettings.asset
@@ -0,0 +1,66 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!30 &1
+GraphicsSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 16
+ m_Deferred:
+ m_Mode: 1
+ m_Shader: {fileID: 69, guid: 0000000000000000f000000000000000, type: 0}
+ m_DeferredReflections:
+ m_Mode: 1
+ m_Shader: {fileID: 74, guid: 0000000000000000f000000000000000, type: 0}
+ m_ScreenSpaceShadows:
+ m_Mode: 1
+ m_Shader: {fileID: 64, guid: 0000000000000000f000000000000000, type: 0}
+ m_DepthNormals:
+ m_Mode: 1
+ m_Shader: {fileID: 62, guid: 0000000000000000f000000000000000, type: 0}
+ m_MotionVectors:
+ m_Mode: 1
+ m_Shader: {fileID: 75, guid: 0000000000000000f000000000000000, type: 0}
+ m_LightHalo:
+ m_Mode: 1
+ m_Shader: {fileID: 105, guid: 0000000000000000f000000000000000, type: 0}
+ m_LensFlare:
+ m_Mode: 1
+ m_Shader: {fileID: 102, guid: 0000000000000000f000000000000000, type: 0}
+ m_VideoShadersIncludeMode: 2
+ m_AlwaysIncludedShaders:
+ - {fileID: 7, guid: 0000000000000000f000000000000000, type: 0}
+ - {fileID: 15104, guid: 0000000000000000f000000000000000, type: 0}
+ - {fileID: 15105, guid: 0000000000000000f000000000000000, type: 0}
+ - {fileID: 15106, guid: 0000000000000000f000000000000000, type: 0}
+ - {fileID: 10753, guid: 0000000000000000f000000000000000, type: 0}
+ - {fileID: 10770, guid: 0000000000000000f000000000000000, type: 0}
+ - {fileID: 10783, guid: 0000000000000000f000000000000000, type: 0}
+ m_PreloadedShaders: []
+ m_PreloadShadersBatchTimeLimit: -1
+ m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0}
+ m_CustomRenderPipeline: {fileID: 0}
+ m_TransparencySortMode: 0
+ m_TransparencySortAxis: {x: 0, y: 0, z: 1}
+ m_DefaultRenderingPath: 1
+ m_DefaultMobileRenderingPath: 1
+ m_TierSettings: []
+ m_LightmapStripping: 0
+ m_FogStripping: 0
+ m_InstancingStripping: 0
+ m_BrgStripping: 2
+ m_LightmapKeepPlain: 1
+ m_LightmapKeepDirCombined: 1
+ m_LightmapKeepDynamicPlain: 1
+ m_LightmapKeepDynamicDirCombined: 1
+ m_LightmapKeepShadowMask: 1
+ m_LightmapKeepSubtractive: 1
+ m_FogKeepLinear: 1
+ m_FogKeepExp: 1
+ m_FogKeepExp2: 1
+ m_AlbedoSwatchInfos: []
+ m_RenderPipelineGlobalSettingsMap: {}
+ m_LightsUseLinearIntensity: 1
+ m_LightsUseColorTemperature: 1
+ m_LogWhenShaderIsCompiled: 0
+ m_LightProbeOutsideHullStrategy: 0
+ m_CameraRelativeLightCulling: 0
+ m_CameraRelativeShadowCulling: 0
diff --git a/scriptable-processor-seeking/ProjectSettings/InputManager.asset b/scriptable-processor-seeking/ProjectSettings/InputManager.asset
new file mode 100644
index 0000000..b16147e
--- /dev/null
+++ b/scriptable-processor-seeking/ProjectSettings/InputManager.asset
@@ -0,0 +1,487 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!13 &1
+InputManager:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ m_Axes:
+ - serializedVersion: 3
+ m_Name: Horizontal
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton: left
+ positiveButton: right
+ altNegativeButton: a
+ altPositiveButton: d
+ gravity: 3
+ dead: 0.001
+ sensitivity: 3
+ snap: 1
+ invert: 0
+ type: 0
+ axis: 0
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Vertical
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton: down
+ positiveButton: up
+ altNegativeButton: s
+ altPositiveButton: w
+ gravity: 3
+ dead: 0.001
+ sensitivity: 3
+ snap: 1
+ invert: 0
+ type: 0
+ axis: 0
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Fire1
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton:
+ positiveButton: left ctrl
+ altNegativeButton:
+ altPositiveButton: mouse 0
+ gravity: 1000
+ dead: 0.001
+ sensitivity: 1000
+ snap: 0
+ invert: 0
+ type: 0
+ axis: 0
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Fire2
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton:
+ positiveButton: left alt
+ altNegativeButton:
+ altPositiveButton: mouse 1
+ gravity: 1000
+ dead: 0.001
+ sensitivity: 1000
+ snap: 0
+ invert: 0
+ type: 0
+ axis: 0
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Fire3
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton:
+ positiveButton: left shift
+ altNegativeButton:
+ altPositiveButton: mouse 2
+ gravity: 1000
+ dead: 0.001
+ sensitivity: 1000
+ snap: 0
+ invert: 0
+ type: 0
+ axis: 0
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Jump
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton:
+ positiveButton: space
+ altNegativeButton:
+ altPositiveButton:
+ gravity: 1000
+ dead: 0.001
+ sensitivity: 1000
+ snap: 0
+ invert: 0
+ type: 0
+ axis: 0
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Mouse X
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton:
+ positiveButton:
+ altNegativeButton:
+ altPositiveButton:
+ gravity: 0
+ dead: 0
+ sensitivity: 0.1
+ snap: 0
+ invert: 0
+ type: 1
+ axis: 0
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Mouse Y
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton:
+ positiveButton:
+ altNegativeButton:
+ altPositiveButton:
+ gravity: 0
+ dead: 0
+ sensitivity: 0.1
+ snap: 0
+ invert: 0
+ type: 1
+ axis: 1
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Mouse ScrollWheel
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton:
+ positiveButton:
+ altNegativeButton:
+ altPositiveButton:
+ gravity: 0
+ dead: 0
+ sensitivity: 0.1
+ snap: 0
+ invert: 0
+ type: 1
+ axis: 2
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Horizontal
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton:
+ positiveButton:
+ altNegativeButton:
+ altPositiveButton:
+ gravity: 0
+ dead: 0.19
+ sensitivity: 1
+ snap: 0
+ invert: 0
+ type: 2
+ axis: 0
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Vertical
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton:
+ positiveButton:
+ altNegativeButton:
+ altPositiveButton:
+ gravity: 0
+ dead: 0.19
+ sensitivity: 1
+ snap: 0
+ invert: 1
+ type: 2
+ axis: 1
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Fire1
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton:
+ positiveButton: joystick button 0
+ altNegativeButton:
+ altPositiveButton:
+ gravity: 1000
+ dead: 0.001
+ sensitivity: 1000
+ snap: 0
+ invert: 0
+ type: 0
+ axis: 0
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Fire2
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton:
+ positiveButton: joystick button 1
+ altNegativeButton:
+ altPositiveButton:
+ gravity: 1000
+ dead: 0.001
+ sensitivity: 1000
+ snap: 0
+ invert: 0
+ type: 0
+ axis: 0
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Fire3
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton:
+ positiveButton: joystick button 2
+ altNegativeButton:
+ altPositiveButton:
+ gravity: 1000
+ dead: 0.001
+ sensitivity: 1000
+ snap: 0
+ invert: 0
+ type: 0
+ axis: 0
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Jump
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton:
+ positiveButton: joystick button 3
+ altNegativeButton:
+ altPositiveButton:
+ gravity: 1000
+ dead: 0.001
+ sensitivity: 1000
+ snap: 0
+ invert: 0
+ type: 0
+ axis: 0
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Submit
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton:
+ positiveButton: return
+ altNegativeButton:
+ altPositiveButton: joystick button 0
+ gravity: 1000
+ dead: 0.001
+ sensitivity: 1000
+ snap: 0
+ invert: 0
+ type: 0
+ axis: 0
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Submit
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton:
+ positiveButton: enter
+ altNegativeButton:
+ altPositiveButton: space
+ gravity: 1000
+ dead: 0.001
+ sensitivity: 1000
+ snap: 0
+ invert: 0
+ type: 0
+ axis: 0
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Cancel
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton:
+ positiveButton: escape
+ altNegativeButton:
+ altPositiveButton: joystick button 1
+ gravity: 1000
+ dead: 0.001
+ sensitivity: 1000
+ snap: 0
+ invert: 0
+ type: 0
+ axis: 0
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Enable Debug Button 1
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton:
+ positiveButton: left ctrl
+ altNegativeButton:
+ altPositiveButton: joystick button 8
+ gravity: 0
+ dead: 0
+ sensitivity: 0
+ snap: 0
+ invert: 0
+ type: 0
+ axis: 0
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Enable Debug Button 2
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton:
+ positiveButton: backspace
+ altNegativeButton:
+ altPositiveButton: joystick button 9
+ gravity: 0
+ dead: 0
+ sensitivity: 0
+ snap: 0
+ invert: 0
+ type: 0
+ axis: 0
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Debug Reset
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton:
+ positiveButton: left alt
+ altNegativeButton:
+ altPositiveButton: joystick button 1
+ gravity: 0
+ dead: 0
+ sensitivity: 0
+ snap: 0
+ invert: 0
+ type: 0
+ axis: 0
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Debug Next
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton:
+ positiveButton: page down
+ altNegativeButton:
+ altPositiveButton: joystick button 5
+ gravity: 0
+ dead: 0
+ sensitivity: 0
+ snap: 0
+ invert: 0
+ type: 0
+ axis: 0
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Debug Previous
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton:
+ positiveButton: page up
+ altNegativeButton:
+ altPositiveButton: joystick button 4
+ gravity: 0
+ dead: 0
+ sensitivity: 0
+ snap: 0
+ invert: 0
+ type: 0
+ axis: 0
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Debug Validate
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton:
+ positiveButton: return
+ altNegativeButton:
+ altPositiveButton: joystick button 0
+ gravity: 0
+ dead: 0
+ sensitivity: 0
+ snap: 0
+ invert: 0
+ type: 0
+ axis: 0
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Debug Persistent
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton:
+ positiveButton: right shift
+ altNegativeButton:
+ altPositiveButton: joystick button 2
+ gravity: 0
+ dead: 0
+ sensitivity: 0
+ snap: 0
+ invert: 0
+ type: 0
+ axis: 0
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Debug Multiplier
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton:
+ positiveButton: left shift
+ altNegativeButton:
+ altPositiveButton: joystick button 3
+ gravity: 0
+ dead: 0
+ sensitivity: 0
+ snap: 0
+ invert: 0
+ type: 0
+ axis: 0
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Debug Horizontal
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton: left
+ positiveButton: right
+ altNegativeButton:
+ altPositiveButton:
+ gravity: 1000
+ dead: 0.001
+ sensitivity: 1000
+ snap: 0
+ invert: 0
+ type: 0
+ axis: 0
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Debug Vertical
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton: down
+ positiveButton: up
+ altNegativeButton:
+ altPositiveButton:
+ gravity: 1000
+ dead: 0.001
+ sensitivity: 1000
+ snap: 0
+ invert: 0
+ type: 0
+ axis: 0
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Debug Vertical
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton: down
+ positiveButton: up
+ altNegativeButton:
+ altPositiveButton:
+ gravity: 1000
+ dead: 0.001
+ sensitivity: 1000
+ snap: 0
+ invert: 0
+ type: 2
+ axis: 6
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Debug Horizontal
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton: left
+ positiveButton: right
+ altNegativeButton:
+ altPositiveButton:
+ gravity: 1000
+ dead: 0.001
+ sensitivity: 1000
+ snap: 0
+ invert: 0
+ type: 2
+ axis: 5
+ joyNum: 0
diff --git a/scriptable-processor-seeking/ProjectSettings/MemorySettings.asset b/scriptable-processor-seeking/ProjectSettings/MemorySettings.asset
new file mode 100644
index 0000000..5b5face
--- /dev/null
+++ b/scriptable-processor-seeking/ProjectSettings/MemorySettings.asset
@@ -0,0 +1,35 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!387306366 &1
+MemorySettings:
+ m_ObjectHideFlags: 0
+ m_EditorMemorySettings:
+ m_MainAllocatorBlockSize: -1
+ m_ThreadAllocatorBlockSize: -1
+ m_MainGfxBlockSize: -1
+ m_ThreadGfxBlockSize: -1
+ m_CacheBlockSize: -1
+ m_TypetreeBlockSize: -1
+ m_ProfilerBlockSize: -1
+ m_ProfilerEditorBlockSize: -1
+ m_BucketAllocatorGranularity: -1
+ m_BucketAllocatorBucketsCount: -1
+ m_BucketAllocatorBlockSize: -1
+ m_BucketAllocatorBlockCount: -1
+ m_ProfilerBucketAllocatorGranularity: -1
+ m_ProfilerBucketAllocatorBucketsCount: -1
+ m_ProfilerBucketAllocatorBlockSize: -1
+ m_ProfilerBucketAllocatorBlockCount: -1
+ m_TempAllocatorSizeMain: -1
+ m_JobTempAllocatorBlockSize: -1
+ m_BackgroundJobTempAllocatorBlockSize: -1
+ m_JobTempAllocatorReducedBlockSize: -1
+ m_TempAllocatorSizeGIBakingWorker: -1
+ m_TempAllocatorSizeNavMeshWorker: -1
+ m_TempAllocatorSizeAudioWorker: -1
+ m_TempAllocatorSizeCloudWorker: -1
+ m_TempAllocatorSizeGfx: -1
+ m_TempAllocatorSizeJobWorker: -1
+ m_TempAllocatorSizeBackgroundWorker: -1
+ m_TempAllocatorSizePreloadManager: -1
+ m_PlatformMemorySettings: {}
diff --git a/scriptable-processor-seeking/ProjectSettings/MultiplayerManager.asset b/scriptable-processor-seeking/ProjectSettings/MultiplayerManager.asset
new file mode 100644
index 0000000..2a93664
--- /dev/null
+++ b/scriptable-processor-seeking/ProjectSettings/MultiplayerManager.asset
@@ -0,0 +1,7 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!655991488 &1
+MultiplayerManager:
+ m_ObjectHideFlags: 0
+ m_EnableMultiplayerRoles: 0
+ m_StrippingTypes: {}
diff --git a/scriptable-processor-seeking/ProjectSettings/NavMeshAreas.asset b/scriptable-processor-seeking/ProjectSettings/NavMeshAreas.asset
new file mode 100644
index 0000000..3b0b7c3
--- /dev/null
+++ b/scriptable-processor-seeking/ProjectSettings/NavMeshAreas.asset
@@ -0,0 +1,91 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!126 &1
+NavMeshProjectSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ areas:
+ - name: Walkable
+ cost: 1
+ - name: Not Walkable
+ cost: 1
+ - name: Jump
+ cost: 2
+ - name:
+ cost: 1
+ - name:
+ cost: 1
+ - name:
+ cost: 1
+ - name:
+ cost: 1
+ - name:
+ cost: 1
+ - name:
+ cost: 1
+ - name:
+ cost: 1
+ - name:
+ cost: 1
+ - name:
+ cost: 1
+ - name:
+ cost: 1
+ - name:
+ cost: 1
+ - name:
+ cost: 1
+ - name:
+ cost: 1
+ - name:
+ cost: 1
+ - name:
+ cost: 1
+ - name:
+ cost: 1
+ - name:
+ cost: 1
+ - name:
+ cost: 1
+ - name:
+ cost: 1
+ - name:
+ cost: 1
+ - name:
+ cost: 1
+ - name:
+ cost: 1
+ - name:
+ cost: 1
+ - name:
+ cost: 1
+ - name:
+ cost: 1
+ - name:
+ cost: 1
+ - name:
+ cost: 1
+ - name:
+ cost: 1
+ - name:
+ cost: 1
+ m_LastAgentTypeID: -887442657
+ m_Settings:
+ - serializedVersion: 2
+ agentTypeID: 0
+ agentRadius: 0.5
+ agentHeight: 2
+ agentSlope: 45
+ agentClimb: 0.75
+ ledgeDropHeight: 0
+ maxJumpAcrossDistance: 0
+ minRegionArea: 2
+ manualCellSize: 0
+ cellSize: 0.16666667
+ manualTileSize: 0
+ tileSize: 256
+ accuratePlacement: 0
+ debug:
+ m_Flags: 0
+ m_SettingNames:
+ - Humanoid
diff --git a/scriptable-processor-seeking/ProjectSettings/PackageManagerSettings.asset b/scriptable-processor-seeking/ProjectSettings/PackageManagerSettings.asset
new file mode 100644
index 0000000..7b2d426
--- /dev/null
+++ b/scriptable-processor-seeking/ProjectSettings/PackageManagerSettings.asset
@@ -0,0 +1,44 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &1
+MonoBehaviour:
+ m_ObjectHideFlags: 61
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 13964, guid: 0000000000000000e000000000000000, type: 0}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_EnablePreReleasePackages: 0
+ m_AdvancedSettingsExpanded: 1
+ m_ScopedRegistriesSettingsExpanded: 1
+ m_SeeAllPackageVersions: 0
+ m_DismissPreviewPackagesInUse: 0
+ oneTimeWarningShown: 0
+ oneTimePackageErrorsPopUpShown: 0
+ m_MainRegistry:
+ m_Id: main
+ m_Name:
+ m_Url: https://packages.unity.com
+ m_Scopes: []
+ m_IsDefault: 1
+ m_IsUnityRegistry: 1
+ m_Capabilities: 7
+ m_ConfigSource: 0
+ m_Compliance:
+ m_Status: 0
+ m_Violations: []
+ m_ScopedRegistries: []
+ m_UserSelectedRegistryName:
+ m_UserAddingNewScopedRegistry: 0
+ m_RegistryInfoDraft:
+ m_Modified: 0
+ m_ErrorMessage:
+ m_UserModificationsEntityId:
+ m_rawData: 1099511629084
+ m_OriginalEntityId:
+ m_rawData: 1099511629085
+ m_LoadAssets: 0
diff --git a/scriptable-processor-seeking/ProjectSettings/Physics2DSettings.asset b/scriptable-processor-seeking/ProjectSettings/Physics2DSettings.asset
new file mode 100644
index 0000000..47880b1
--- /dev/null
+++ b/scriptable-processor-seeking/ProjectSettings/Physics2DSettings.asset
@@ -0,0 +1,56 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!19 &1
+Physics2DSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 4
+ m_Gravity: {x: 0, y: -9.81}
+ m_DefaultMaterial: {fileID: 0}
+ m_VelocityIterations: 8
+ m_PositionIterations: 3
+ m_VelocityThreshold: 1
+ m_MaxLinearCorrection: 0.2
+ m_MaxAngularCorrection: 8
+ m_MaxTranslationSpeed: 100
+ m_MaxRotationSpeed: 360
+ m_BaumgarteScale: 0.2
+ m_BaumgarteTimeOfImpactScale: 0.75
+ m_TimeToSleep: 0.5
+ m_LinearSleepTolerance: 0.01
+ m_AngularSleepTolerance: 2
+ m_DefaultContactOffset: 0.01
+ m_JobOptions:
+ serializedVersion: 2
+ useMultithreading: 0
+ useConsistencySorting: 0
+ m_InterpolationPosesPerJob: 100
+ m_NewContactsPerJob: 30
+ m_CollideContactsPerJob: 100
+ m_ClearFlagsPerJob: 200
+ m_ClearBodyForcesPerJob: 200
+ m_SyncDiscreteFixturesPerJob: 50
+ m_SyncContinuousFixturesPerJob: 50
+ m_FindNearestContactsPerJob: 100
+ m_UpdateTriggerContactsPerJob: 100
+ m_IslandSolverCostThreshold: 100
+ m_IslandSolverBodyCostScale: 1
+ m_IslandSolverContactCostScale: 10
+ m_IslandSolverJointCostScale: 10
+ m_IslandSolverBodiesPerJob: 50
+ m_IslandSolverContactsPerJob: 50
+ m_AutoSimulation: 1
+ m_QueriesHitTriggers: 1
+ m_QueriesStartInColliders: 1
+ m_CallbacksOnDisable: 1
+ m_ReuseCollisionCallbacks: 1
+ m_AutoSyncTransforms: 0
+ m_AlwaysShowColliders: 0
+ m_ShowColliderSleep: 1
+ m_ShowColliderContacts: 0
+ m_ShowColliderAABB: 0
+ m_ContactArrowScale: 0.2
+ m_ColliderAwakeColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.7529412}
+ m_ColliderAsleepColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.36078432}
+ m_ColliderContactColor: {r: 1, g: 0, b: 1, a: 0.6862745}
+ m_ColliderAABBColor: {r: 1, g: 1, b: 0, a: 0.2509804}
+ m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
diff --git a/scriptable-processor-seeking/ProjectSettings/PhysicsCoreProjectSettings2D.asset b/scriptable-processor-seeking/ProjectSettings/PhysicsCoreProjectSettings2D.asset
new file mode 100644
index 0000000..049c745
--- /dev/null
+++ b/scriptable-processor-seeking/ProjectSettings/PhysicsCoreProjectSettings2D.asset
@@ -0,0 +1,6 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!176606843 &1
+PhysicsCoreProjectSettings2D:
+ m_ObjectHideFlags: 0
+ m_PhysicsCoreSettings: {fileID: 0}
diff --git a/scriptable-processor-seeking/ProjectSettings/PresetManager.asset b/scriptable-processor-seeking/ProjectSettings/PresetManager.asset
new file mode 100644
index 0000000..67a94da
--- /dev/null
+++ b/scriptable-processor-seeking/ProjectSettings/PresetManager.asset
@@ -0,0 +1,7 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1386491679 &1
+PresetManager:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ m_DefaultPresets: {}
diff --git a/scriptable-processor-seeking/ProjectSettings/ProjectSettings.asset b/scriptable-processor-seeking/ProjectSettings/ProjectSettings.asset
new file mode 100644
index 0000000..f979147
--- /dev/null
+++ b/scriptable-processor-seeking/ProjectSettings/ProjectSettings.asset
@@ -0,0 +1,987 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!129 &1
+PlayerSettings:
+ m_ObjectHideFlags: 0
+ m_BuildProfilePlayerSettings: {fileID: 0}
+ serializedVersion: 31
+ productGUID: 84c4238c0ec8d4d92a67b28a5c830b5a
+ AndroidProfiler: 0
+ AndroidFilterTouchesWhenObscured: 0
+ AndroidEnableSustainedPerformanceMode: 0
+ defaultScreenOrientation: 4
+ targetDevice: 2
+ useOnDemandResources: 0
+ accelerometerFrequency: 60
+ companyName: DefaultCompany
+ productName: scriptable-processor-seeking
+ defaultCursor: {fileID: 0}
+ cursorHotspot: {x: 0, y: 0}
+ m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1}
+ m_ShowUnitySplashScreen: 1
+ m_ShowUnitySplashLogo: 1
+ m_SplashScreenOverlayOpacity: 1
+ m_SplashScreenAnimation: 1
+ m_SplashScreenLogoStyle: 1
+ m_SplashScreenDrawMode: 0
+ m_SplashScreenBackgroundAnimationZoom: 1
+ m_SplashScreenLogoAnimationZoom: 1
+ m_SplashScreenBackgroundLandscapeAspect: 1
+ m_SplashScreenBackgroundPortraitAspect: 1
+ m_SplashScreenBackgroundLandscapeUvs:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 1
+ height: 1
+ m_SplashScreenBackgroundPortraitUvs:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 1
+ height: 1
+ m_SplashScreenLogos: []
+ m_VirtualRealitySplashScreen: {fileID: 0}
+ defaultScreenWidth: 1024
+ defaultScreenHeight: 768
+ defaultScreenWidthWeb: 960
+ defaultScreenHeightWeb: 600
+ m_StereoRenderingPath: 0
+ m_ActiveColorSpace: 1
+ unsupportedMSAAFallback: 0
+ m_SpriteBatchMaxVertexCount: 65535
+ m_SpriteBatchVertexThreshold: 300
+ m_MTRendering: 1
+ mipStripping: 0
+ numberOfMipsStripped: 0
+ numberOfMipsStrippedPerMipmapLimitGroup: {}
+ m_StackTraceTypes: 000000004082c90201000000010000000100000001000000i
+ iosShowActivityIndicatorOnLoading: -1
+ androidShowActivityIndicatorOnLoading: -1
+ iosUseCustomAppBackgroundBehavior: 0
+ allowedAutorotateToPortrait: 1
+ allowedAutorotateToPortraitUpsideDown: 1
+ allowedAutorotateToLandscapeRight: 1
+ allowedAutorotateToLandscapeLeft: 1
+ useOSAutorotation: 1
+ use32BitDisplayBuffer: 1
+ preserveFramebufferAlpha: 0
+ adjustIOSFPSUsingThermalState: 1
+ thermalStateSeriousIOSFPS: 30
+ thermalStateCriticalIOSFPS: 15
+ disableDepthAndStencilBuffers: 0
+ androidStartInFullscreen: 1
+ androidRenderOutsideSafeArea: 1
+ androidUseSwappy: 0
+ androidRequestedVisibleInsets: 0
+ androidSystemBarsBehavior: 2
+ androidDisplayOptions: 1
+ androidBlitType: 0
+ androidResizeableActivity: 1
+ androidDefaultWindowWidth: 1920
+ androidDefaultWindowHeight: 1080
+ androidMinimumWindowWidth: 400
+ androidMinimumWindowHeight: 300
+ androidFullscreenMode: 1
+ androidAutoRotationBehavior: 1
+ androidPredictiveBackSupport: 1
+ androidApplicationEntry: 2
+ defaultIsNativeResolution: 1
+ macRetinaSupport: 1
+ runInBackground: 0
+ callOnDisableOnAssetBundleUnload: 1
+ muteOtherAudioSources: 0
+ Prepare IOS For Recording: 0
+ Force IOS Speakers When Recording: 0
+ audioSpatialExperience: 0
+ deferSystemGesturesMode: 0
+ hideHomeButton: 0
+ submitAnalytics: 1
+ usePlayerLog: 1
+ dedicatedServerOptimizations: 1
+ bakeCollisionMeshes: 0
+ forceSingleInstance: 0
+ useFlipModelSwapchain: 1
+ resizableWindow: 0
+ useMacAppStoreValidation: 0
+ macAppStoreCategory: public.app-category.games
+ gpuSkinning: 1
+ meshDeformation: 2
+ xboxPIXTextureCapture: 0
+ xboxEnableAvatar: 0
+ xboxEnableKinect: 0
+ xboxEnableKinectAutoTracking: 0
+ xboxEnableFitness: 0
+ visibleInBackground: 1
+ allowFullscreenSwitch: 1
+ fullscreenMode: 1
+ xboxSpeechDB: 0
+ xboxEnableHeadOrientation: 0
+ xboxEnableGuest: 0
+ xboxEnablePIXSampling: 0
+ metalFramebufferOnly: 0
+ metalUseMetalDisplayLink: 0
+ xboxOneResolution: 0
+ xboxOneSResolution: 0
+ xboxOneXResolution: 3
+ xboxOneMonoLoggingLevel: 0
+ xboxOneLoggingLevel: 1
+ xboxOneDisableEsram: 0
+ xboxOneEnableTypeOptimization: 0
+ xboxOnePresentImmediateThreshold: 0
+ switchQueueCommandMemory: 1048576
+ switchQueueControlMemory: 16384
+ switchQueueComputeMemory: 262144
+ switchNVNShaderPoolsGranularity: 33554432
+ switchNVNDefaultPoolsGranularity: 16777216
+ switchNVNOtherPoolsGranularity: 16777216
+ switchGpuScratchPoolGranularity: 2097152
+ switchAllowGpuScratchShrinking: 0
+ switchNVNMaxPublicTextureIDCount: 0
+ switchNVNMaxPublicSamplerIDCount: 0
+ switchMaxWorkerMultiple: 8
+ switchNVNGraphicsFirmwareMemory: 32
+ switchGraphicsJobsSyncAfterKick: 1
+ vulkanNumSwapchainBuffers: 3
+ vulkanEnableSetSRGBWrite: 0
+ vulkanEnablePreTransform: 1
+ vulkanEnableLateAcquireNextImage: 0
+ vulkanEnableCommandBufferRecycling: 1
+ loadStoreDebugModeEnabled: 0
+ visionOSBundleVersion: 1.0
+ tvOSBundleVersion: 1.0
+ bundleVersion: 0.1.0
+ preloadedAssets: []
+ metroInputSource: 0
+ wsaTransparentSwapchain: 0
+ xboxOneDisableKinectGpuReservation: 1
+ xboxOneEnable7thCore: 1
+ vrSettings:
+ enable360StereoCapture: 0
+ enableFrameTimingStats: 0
+ enableOpenGLProfilerGPURecorders: 1
+ allowHDRDisplaySupport: 0
+ useHDRDisplay: 0
+ hdrBitDepth: 0
+ m_ColorGamuts: 0000000000000000i
+ targetPixelDensity: 30
+ resolutionScalingMode: 0
+ resetResolutionOnWindowResize: 0
+ androidSupportedAspectRatio: 1
+ androidMaxAspectRatio: 2.4
+ androidMinAspectRatio: 1
+ applicationIdentifier:
+ Android: com.UnityTechnologies.com.unity.template.urpblank
+ Standalone: com.Unity-Technologies.com.unity.template.urp-blank
+ iPhone: com.Unity-Technologies.com.unity.template.urp-blank
+ buildNumber:
+ Standalone: 0
+ VisionOS: 0
+ iPhone: 0
+ tvOS: 0
+ overrideDefaultApplicationIdentifier: 1
+ AndroidBundleVersionCode: 1
+ AndroidMinSdkVersion: 26
+ AndroidTargetSdkVersion: 0
+ AndroidPreferredInstallLocation: 1
+ AndroidPreferredDataLocation: 1
+ aotOptions:
+ stripEngineCode: 1
+ iPhoneStrippingLevel: 0
+ iPhoneScriptCallOptimization: 0
+ ForceInternetPermission: 0
+ ForceSDCardPermission: 0
+ CreateWallpaper: 0
+ androidSplitApplicationBinary: 0
+ keepLoadedShadersAlive: 0
+ StripUnusedMeshComponents: 0
+ strictShaderVariantMatching: 0
+ VertexChannelCompressionMask: 4054
+ iPhoneSdkVersion: 988
+ iOSSimulatorArchitecture: 1
+ iOSTargetOSVersionString: 15.0
+ tvOSSdkVersion: 0
+ tvOSSimulatorArchitecture: 1
+ tvOSRequireExtendedGameController: 0
+ tvOSTargetOSVersionString: 15.0
+ VisionOSSdkVersion: 0
+ VisionOSTargetOSVersionString: 1.0
+ xcodeProjectType: 0
+ uIPrerenderedIcon: 0
+ uIRequiresPersistentWiFi: 0
+ uIRequiresFullScreen: 1
+ uIStatusBarHidden: 1
+ uIExitOnSuspend: 0
+ uIStatusBarStyle: 0
+ appleTVSplashScreen: {fileID: 0}
+ appleTVSplashScreen2x: {fileID: 0}
+ tvOSSmallIconLayers: []
+ tvOSSmallIconLayers2x: []
+ tvOSLargeIconLayers: []
+ tvOSLargeIconLayers2x: []
+ tvOSTopShelfImageLayers: []
+ tvOSTopShelfImageLayers2x: []
+ tvOSTopShelfImageWideLayers: []
+ tvOSTopShelfImageWideLayers2x: []
+ iOSLaunchScreenType: 0
+ iOSLaunchScreenPortrait: {fileID: 0}
+ iOSLaunchScreenLandscape: {fileID: 0}
+ iOSLaunchScreenBackgroundColor:
+ serializedVersion: 2
+ rgba: 0
+ iOSLaunchScreenFillPct: 100
+ iOSLaunchScreenSize: 100
+ iOSLaunchScreeniPadType: 0
+ iOSLaunchScreeniPadImage: {fileID: 0}
+ iOSLaunchScreeniPadBackgroundColor:
+ serializedVersion: 2
+ rgba: 0
+ iOSLaunchScreeniPadFillPct: 100
+ iOSLaunchScreeniPadSize: 100
+ iOSLaunchScreenCustomStoryboardPath:
+ iOSLaunchScreeniPadCustomStoryboardPath:
+ iOSDeviceRequirements: []
+ iOSURLSchemes: []
+ macOSURLSchemes: []
+ iOSBackgroundModes: 0
+ iOSMetalForceHardShadows: 0
+ metalEditorSupport: 1
+ metalAPIValidation: 1
+ metalCompileShaderBinary: 0
+ iOSRenderExtraFrameOnPause: 0
+ iosCopyPluginsCodeInsteadOfSymlink: 0
+ appleDeveloperTeamID:
+ iOSManualSigningProvisioningProfileID:
+ tvOSManualSigningProvisioningProfileID:
+ VisionOSManualSigningProvisioningProfileID:
+ iOSManualSigningProvisioningProfileType: 0
+ tvOSManualSigningProvisioningProfileType: 0
+ VisionOSManualSigningProvisioningProfileType: 0
+ appleEnableAutomaticSigning: 0
+ iOSRequireARKit: 0
+ iOSAutomaticallyDetectAndAddCapabilities: 1
+ appleEnableProMotion: 0
+ shaderPrecisionModel: 0
+ clonedFromGUID: 3c72c65a16f0acb438eed22b8b16c24a
+ templatePackageId: com.unity.template.urp-blank@17.1.0
+ templateDefaultScene: Assets/Scenes/SampleScene.unity
+ useCustomMainManifest: 0
+ useCustomLauncherManifest: 0
+ useCustomMainGradleTemplate: 0
+ useCustomLauncherGradleManifest: 0
+ useCustomBaseGradleTemplate: 0
+ useCustomGradlePropertiesTemplate: 0
+ useCustomGradleSettingsTemplate: 0
+ useCustomProguardFile: 0
+ AndroidTargetArchitectures: 2
+ AndroidSplashScreenScale: 0
+ androidSplashScreen: {fileID: 0}
+ AndroidKeystoreName:
+ AndroidKeyaliasName:
+ AndroidEnableArmv9SecurityFeatures: 0
+ AndroidEnableArm64MTE: 0
+ AndroidBuildApkPerCpuArchitecture: 0
+ AndroidTVCompatibility: 0
+ AndroidIsGame: 1
+ androidAppCategory: 3
+ useAndroidAppCategory: 1
+ androidAppCategoryOther:
+ AndroidEnableTango: 0
+ androidEnableBanner: 1
+ androidUseLowAccuracyLocation: 0
+ androidUseCustomKeystore: 0
+ m_AndroidBanners:
+ - width: 320
+ height: 180
+ banner: {fileID: 0}
+ androidGamepadSupportLevel: 0
+ AndroidMinifyRelease: 0
+ AndroidMinifyDebug: 0
+ AndroidValidateAppBundleSize: 1
+ AndroidAppBundleSizeToValidate: 150
+ AndroidReportGooglePlayAppDependencies: 1
+ androidSymbolsSizeThreshold: 800
+ m_BuildTargetIcons: []
+ m_BuildTargetPlatformIcons:
+ - m_BuildTarget: iPhone
+ m_Icons:
+ - m_Textures: []
+ m_Width: 180
+ m_Height: 180
+ m_Kind: 0
+ m_SubKind: iPhone
+ - m_Textures: []
+ m_Width: 120
+ m_Height: 120
+ m_Kind: 0
+ m_SubKind: iPhone
+ - m_Textures: []
+ m_Width: 167
+ m_Height: 167
+ m_Kind: 0
+ m_SubKind: iPad
+ - m_Textures: []
+ m_Width: 152
+ m_Height: 152
+ m_Kind: 0
+ m_SubKind: iPad
+ - m_Textures: []
+ m_Width: 76
+ m_Height: 76
+ m_Kind: 0
+ m_SubKind: iPad
+ - m_Textures: []
+ m_Width: 120
+ m_Height: 120
+ m_Kind: 3
+ m_SubKind: iPhone
+ - m_Textures: []
+ m_Width: 80
+ m_Height: 80
+ m_Kind: 3
+ m_SubKind: iPhone
+ - m_Textures: []
+ m_Width: 80
+ m_Height: 80
+ m_Kind: 3
+ m_SubKind: iPad
+ - m_Textures: []
+ m_Width: 40
+ m_Height: 40
+ m_Kind: 3
+ m_SubKind: iPad
+ - m_Textures: []
+ m_Width: 87
+ m_Height: 87
+ m_Kind: 1
+ m_SubKind: iPhone
+ - m_Textures: []
+ m_Width: 58
+ m_Height: 58
+ m_Kind: 1
+ m_SubKind: iPhone
+ - m_Textures: []
+ m_Width: 29
+ m_Height: 29
+ m_Kind: 1
+ m_SubKind: iPhone
+ - m_Textures: []
+ m_Width: 58
+ m_Height: 58
+ m_Kind: 1
+ m_SubKind: iPad
+ - m_Textures: []
+ m_Width: 29
+ m_Height: 29
+ m_Kind: 1
+ m_SubKind: iPad
+ - m_Textures: []
+ m_Width: 60
+ m_Height: 60
+ m_Kind: 2
+ m_SubKind: iPhone
+ - m_Textures: []
+ m_Width: 40
+ m_Height: 40
+ m_Kind: 2
+ m_SubKind: iPhone
+ - m_Textures: []
+ m_Width: 40
+ m_Height: 40
+ m_Kind: 2
+ m_SubKind: iPad
+ - m_Textures: []
+ m_Width: 20
+ m_Height: 20
+ m_Kind: 2
+ m_SubKind: iPad
+ - m_Textures: []
+ m_Width: 1024
+ m_Height: 1024
+ m_Kind: 4
+ m_SubKind: App Store
+ - m_BuildTarget: Android
+ m_Icons:
+ - m_Textures: []
+ m_Width: 432
+ m_Height: 432
+ m_Kind: 2
+ m_SubKind:
+ - m_Textures: []
+ m_Width: 324
+ m_Height: 324
+ m_Kind: 2
+ m_SubKind:
+ - m_Textures: []
+ m_Width: 216
+ m_Height: 216
+ m_Kind: 2
+ m_SubKind:
+ - m_Textures: []
+ m_Width: 162
+ m_Height: 162
+ m_Kind: 2
+ m_SubKind:
+ - m_Textures: []
+ m_Width: 108
+ m_Height: 108
+ m_Kind: 2
+ m_SubKind:
+ - m_Textures: []
+ m_Width: 81
+ m_Height: 81
+ m_Kind: 2
+ m_SubKind:
+ - m_Textures: []
+ m_Width: 192
+ m_Height: 192
+ m_Kind: 1
+ m_SubKind:
+ - m_Textures: []
+ m_Width: 144
+ m_Height: 144
+ m_Kind: 1
+ m_SubKind:
+ - m_Textures: []
+ m_Width: 96
+ m_Height: 96
+ m_Kind: 1
+ m_SubKind:
+ - m_Textures: []
+ m_Width: 72
+ m_Height: 72
+ m_Kind: 1
+ m_SubKind:
+ - m_Textures: []
+ m_Width: 48
+ m_Height: 48
+ m_Kind: 1
+ m_SubKind:
+ - m_Textures: []
+ m_Width: 36
+ m_Height: 36
+ m_Kind: 1
+ m_SubKind:
+ - m_Textures: []
+ m_Width: 192
+ m_Height: 192
+ m_Kind: 0
+ m_SubKind:
+ - m_Textures: []
+ m_Width: 144
+ m_Height: 144
+ m_Kind: 0
+ m_SubKind:
+ - m_Textures: []
+ m_Width: 96
+ m_Height: 96
+ m_Kind: 0
+ m_SubKind:
+ - m_Textures: []
+ m_Width: 72
+ m_Height: 72
+ m_Kind: 0
+ m_SubKind:
+ - m_Textures: []
+ m_Width: 48
+ m_Height: 48
+ m_Kind: 0
+ m_SubKind:
+ - m_Textures: []
+ m_Width: 36
+ m_Height: 36
+ m_Kind: 0
+ m_SubKind:
+ - m_Textures: []
+ m_Width: 640
+ m_Height: 360
+ m_Kind: 3
+ m_SubKind:
+ - m_Textures: []
+ m_Width: 480
+ m_Height: 270
+ m_Kind: 3
+ m_SubKind:
+ - m_Textures: []
+ m_Width: 320
+ m_Height: 180
+ m_Kind: 3
+ m_SubKind:
+ - m_Textures: []
+ m_Width: 240
+ m_Height: 135
+ m_Kind: 3
+ m_SubKind:
+ - m_Textures: []
+ m_Width: 160
+ m_Height: 90
+ m_Kind: 3
+ m_SubKind:
+ - m_BuildTarget: tvOS
+ m_Icons:
+ - m_Textures: []
+ m_Width: 1280
+ m_Height: 768
+ m_Kind: 0
+ m_SubKind:
+ - m_Textures: []
+ m_Width: 800
+ m_Height: 480
+ m_Kind: 0
+ m_SubKind:
+ - m_Textures: []
+ m_Width: 400
+ m_Height: 240
+ m_Kind: 0
+ m_SubKind:
+ - m_Textures: []
+ m_Width: 4640
+ m_Height: 1440
+ m_Kind: 1
+ m_SubKind:
+ - m_Textures: []
+ m_Width: 2320
+ m_Height: 720
+ m_Kind: 1
+ m_SubKind:
+ - m_Textures: []
+ m_Width: 3840
+ m_Height: 1440
+ m_Kind: 1
+ m_SubKind:
+ - m_Textures: []
+ m_Width: 1920
+ m_Height: 720
+ m_Kind: 1
+ m_SubKind:
+ - m_BuildTarget: VisionOS
+ m_Icons:
+ - m_Textures: []
+ m_Width: 1024
+ m_Height: 1024
+ m_Kind: 0
+ m_SubKind:
+ m_BuildTargetBatching:
+ - m_BuildTarget: Standalone
+ m_StaticBatching: 1
+ m_DynamicBatching: 0
+ m_BuildTargetShaderSettings: []
+ m_BuildTargetGraphicsJobs: []
+ m_BuildTargetGraphicsJobMode: []
+ m_BuildTargetGraphicsAPIs:
+ - m_BuildTarget: iOSSupport
+ m_APIs: 10000000i
+ m_Automatic: 1
+ - m_BuildTarget: AndroidPlayer
+ m_APIs: 150000000b000000i
+ m_Automatic: 1
+ m_DefaultShaderChunkSizeInMB: 16
+ m_DefaultShaderChunkCount: 0
+ openGLRequireES31: 0
+ openGLRequireES31AEP: 0
+ openGLRequireES32: 0
+ m_TemplateCustomTags: {}
+ mobileMTRendering:
+ Android: 1
+ iPhone: 1
+ tvOS: 1
+ m_BuildTargetGroupLightmapEncodingQuality:
+ - serializedVersion: 2
+ m_BuildTarget: Android
+ m_EncodingQuality: 1
+ m_BuildTargetGroupHDRCubemapEncodingQuality: []
+ m_BuildTargetGroupLightmapSettings: []
+ m_BuildTargetGroupLoadStoreDebugModeSettings: []
+ m_BuildTargetNormalMapEncoding:
+ - m_BuildTarget: Android
+ m_Encoding: 1
+ m_BuildTargetDefaultTextureCompressionFormat:
+ - serializedVersion: 3
+ m_BuildTarget: Android
+ m_Formats: 00000000c0c62d00i
+ playModeTestRunnerEnabled: 0
+ runPlayModeTestAsEditModeTest: 0
+ actionOnDotNetUnhandledException: 1
+ editorGfxJobOverride: 1
+ enableInternalProfiler: 0
+ logObjCUncaughtExceptions: 1
+ enableCrashReportAPI: 0
+ cameraUsageDescription:
+ locationUsageDescription:
+ microphoneUsageDescription:
+ bluetoothUsageDescription:
+ macOSTargetOSVersion: 12.0
+ switchNMETAOverride:
+ switchNetLibKey:
+ switchSocketMemoryPoolSize: 6144
+ switchSocketAllocatorPoolSize: 128
+ switchSocketConcurrencyLimit: 14
+ switchScreenResolutionBehavior: 2
+ switchUseCPUProfiler: 0
+ switchEnableFileSystemTrace: 0
+ switchLTOSetting: 0
+ switchApplicationID: 0x01004b9000490000
+ switchNSODependencies:
+ switchCompilerFlags:
+ switchTitleNames_0:
+ switchTitleNames_1:
+ switchTitleNames_2:
+ switchTitleNames_3:
+ switchTitleNames_4:
+ switchTitleNames_5:
+ switchTitleNames_6:
+ switchTitleNames_7:
+ switchTitleNames_8:
+ switchTitleNames_9:
+ switchTitleNames_10:
+ switchTitleNames_11:
+ switchTitleNames_12:
+ switchTitleNames_13:
+ switchTitleNames_14:
+ switchTitleNames_15:
+ switchPublisherNames_0:
+ switchPublisherNames_1:
+ switchPublisherNames_2:
+ switchPublisherNames_3:
+ switchPublisherNames_4:
+ switchPublisherNames_5:
+ switchPublisherNames_6:
+ switchPublisherNames_7:
+ switchPublisherNames_8:
+ switchPublisherNames_9:
+ switchPublisherNames_10:
+ switchPublisherNames_11:
+ switchPublisherNames_12:
+ switchPublisherNames_13:
+ switchPublisherNames_14:
+ switchPublisherNames_15:
+ switchIcons_0: {fileID: 0}
+ switchIcons_1: {fileID: 0}
+ switchIcons_2: {fileID: 0}
+ switchIcons_3: {fileID: 0}
+ switchIcons_4: {fileID: 0}
+ switchIcons_5: {fileID: 0}
+ switchIcons_6: {fileID: 0}
+ switchIcons_7: {fileID: 0}
+ switchIcons_8: {fileID: 0}
+ switchIcons_9: {fileID: 0}
+ switchIcons_10: {fileID: 0}
+ switchIcons_11: {fileID: 0}
+ switchIcons_12: {fileID: 0}
+ switchIcons_13: {fileID: 0}
+ switchIcons_14: {fileID: 0}
+ switchIcons_15: {fileID: 0}
+ switchSmallIcons_0: {fileID: 0}
+ switchSmallIcons_1: {fileID: 0}
+ switchSmallIcons_2: {fileID: 0}
+ switchSmallIcons_3: {fileID: 0}
+ switchSmallIcons_4: {fileID: 0}
+ switchSmallIcons_5: {fileID: 0}
+ switchSmallIcons_6: {fileID: 0}
+ switchSmallIcons_7: {fileID: 0}
+ switchSmallIcons_8: {fileID: 0}
+ switchSmallIcons_9: {fileID: 0}
+ switchSmallIcons_10: {fileID: 0}
+ switchSmallIcons_11: {fileID: 0}
+ switchSmallIcons_12: {fileID: 0}
+ switchSmallIcons_13: {fileID: 0}
+ switchSmallIcons_14: {fileID: 0}
+ switchSmallIcons_15: {fileID: 0}
+ switchManualHTML:
+ switchAccessibleURLs:
+ switchLegalInformation:
+ switchMainThreadStackSize: 1048576
+ switchPresenceGroupId:
+ switchLogoHandling: 0
+ switchReleaseVersion: 0
+ switchDisplayVersion: 1.0.0
+ switchStartupUserAccount: 0
+ switchSupportedLanguagesMask: 0
+ switchLogoType: 0
+ switchApplicationErrorCodeCategory:
+ switchUserAccountSaveDataSize: 0
+ switchUserAccountSaveDataJournalSize: 0
+ switchApplicationAttribute: 0
+ switchCardSpecSize: -1
+ switchCardSpecClock: -1
+ switchRatingsMask: 0
+ switchRatingsInt_0: 0
+ switchRatingsInt_1: 0
+ switchRatingsInt_2: 0
+ switchRatingsInt_3: 0
+ switchRatingsInt_4: 0
+ switchRatingsInt_5: 0
+ switchRatingsInt_6: 0
+ switchRatingsInt_7: 0
+ switchRatingsInt_8: 0
+ switchRatingsInt_9: 0
+ switchRatingsInt_10: 0
+ switchRatingsInt_11: 0
+ switchRatingsInt_12: 0
+ switchLocalCommunicationIds_0:
+ switchLocalCommunicationIds_1:
+ switchLocalCommunicationIds_2:
+ switchLocalCommunicationIds_3:
+ switchLocalCommunicationIds_4:
+ switchLocalCommunicationIds_5:
+ switchLocalCommunicationIds_6:
+ switchLocalCommunicationIds_7:
+ switchParentalControl: 0
+ switchAllowsScreenshot: 1
+ switchAllowsVideoCapturing: 1
+ switchAllowsRuntimeAddOnContentInstall: 0
+ switchDataLossConfirmation: 0
+ switchUserAccountLockEnabled: 0
+ switchSystemResourceMemory: 16777216
+ switchSupportedNpadStyles: 22
+ switchNativeFsCacheSize: 32
+ switchIsHoldTypeHorizontal: 0
+ switchSupportedNpadCount: 8
+ switchEnableTouchScreen: 1
+ switchSocketConfigEnabled: 0
+ switchTcpInitialSendBufferSize: 32
+ switchTcpInitialReceiveBufferSize: 64
+ switchTcpAutoSendBufferSizeMax: 256
+ switchTcpAutoReceiveBufferSizeMax: 256
+ switchUdpSendBufferSize: 9
+ switchUdpReceiveBufferSize: 42
+ switchSocketBufferEfficiency: 4
+ switchSocketInitializeEnabled: 1
+ switchNetworkInterfaceManagerInitializeEnabled: 1
+ switchDisableHTCSPlayerConnection: 0
+ switchUseNewStyleFilepaths: 0
+ switchUseLegacyFmodPriorities: 0
+ switchUseMicroSleepForYield: 1
+ switchEnableRamDiskSupport: 0
+ switchMicroSleepForYieldTime: 25
+ switchRamDiskSpaceSize: 12
+ switchUpgradedPlayerSettingsToNMETA: 1
+ switchCaStoreSource: 0
+ switchCaStoreFilePath:
+ ps4NPAgeRating: 12
+ ps4NPTitleSecret:
+ ps4NPTrophyPackPath:
+ ps4ParentalLevel: 11
+ ps4ContentID: ED1633-NPXX51362_00-0000000000000000
+ ps4Category: 0
+ ps4MasterVersion: 01.00
+ ps4AppVersion: 01.00
+ ps4AppType: 0
+ ps4ParamSfxPath:
+ ps4VideoOutPixelFormat: 0
+ ps4VideoOutInitialWidth: 1920
+ ps4VideoOutBaseModeInitialWidth: 1920
+ ps4VideoOutReprojectionRate: 60
+ ps4PronunciationXMLPath:
+ ps4PronunciationSIGPath:
+ ps4BackgroundImagePath:
+ ps4StartupImagePath:
+ ps4StartupImagesFolder:
+ ps4IconImagesFolder:
+ ps4SaveDataImagePath:
+ ps4SdkOverride:
+ ps4BGMPath:
+ ps4ShareFilePath:
+ ps4ShareOverlayImagePath:
+ ps4PrivacyGuardImagePath:
+ ps4ExtraSceSysFile:
+ ps4NPtitleDatPath:
+ ps4RemotePlayKeyAssignment: -1
+ ps4RemotePlayKeyMappingDir:
+ ps4PlayTogetherPlayerCount: 0
+ ps4EnterButtonAssignment: 2
+ ps4ApplicationParam1: 0
+ ps4ApplicationParam2: 0
+ ps4ApplicationParam3: 0
+ ps4ApplicationParam4: 0
+ ps4DownloadDataSize: 0
+ ps4GarlicHeapSize: 2048
+ ps4ProGarlicHeapSize: 2560
+ playerPrefsMaxSize: 32768
+ ps4Passcode: frAQBc8Wsa1xVPfvJcrgRYwTiizs2trQ
+ ps4pnSessions: 1
+ ps4pnPresence: 1
+ ps4pnFriends: 1
+ ps4pnGameCustomData: 1
+ playerPrefsSupport: 0
+ enableApplicationExit: 0
+ resetTempFolder: 1
+ restrictedAudioUsageRights: 0
+ ps4UseResolutionFallback: 0
+ ps4ReprojectionSupport: 0
+ ps4UseAudio3dBackend: 0
+ ps4UseLowGarlicFragmentationMode: 1
+ ps4SocialScreenEnabled: 0
+ ps4ScriptOptimizationLevel: 2
+ ps4Audio3dVirtualSpeakerCount: 14
+ ps4attribCpuUsage: 0
+ ps4PatchPkgPath:
+ ps4PatchLatestPkgPath:
+ ps4PatchChangeinfoPath:
+ ps4PatchDayOne: 0
+ ps4attribUserManagement: 0
+ ps4attribMoveSupport: 0
+ ps4attrib3DSupport: 0
+ ps4attribShareSupport: 0
+ ps4attribExclusiveVR: 0
+ ps4disableAutoHideSplash: 0
+ ps4videoRecordingFeaturesUsed: 0
+ ps4contentSearchFeaturesUsed: 0
+ ps4CompatibilityPS5: 0
+ ps4AllowPS5Detection: 0
+ ps4GPU800MHz: 1
+ ps4attribEyeToEyeDistanceSettingVR: 0
+ ps4IncludedModules: []
+ ps4attribVROutputEnabled: 0
+ monoEnv:
+ splashScreenBackgroundSourceLandscape: {fileID: 0}
+ splashScreenBackgroundSourcePortrait: {fileID: 0}
+ blurSplashScreenBackground: 1
+ spritePackerPolicy:
+ webGLMemorySize: 32
+ webGLExceptionSupport: 1
+ webGLNameFilesAsHashes: 0
+ webGLShowDiagnostics: 0
+ webGLDataCaching: 1
+ webGLDebugSymbols: 0
+ webGLEmscriptenArgs:
+ webGLModulesDirectory:
+ webGLTemplate: APPLICATION:Default
+ webGLAnalyzeBuildSize: 0
+ webGLUseEmbeddedResources: 0
+ webGLCompressionFormat: 0
+ webGLWasmArithmeticExceptions: 0
+ webGLLinkerTarget: 1
+ webGLThreadsSupport: 0
+ webGLDecompressionFallback: 0
+ webGLInitialMemorySize: 32
+ webGLMaximumMemorySize: 2048
+ webGLMemoryGrowthMode: 2
+ webGLMemoryLinearGrowthStep: 16
+ webGLMemoryGeometricGrowthStep: 0.2
+ webGLMemoryGeometricGrowthCap: 96
+ webGLPowerPreference: 2
+ webGLWebAssemblyTable: 0
+ webGLWebAssemblyBigInt: 0
+ webGLCloseOnQuit: 0
+ webWasm2023: 1
+ webEnableSubmoduleStrippingCompatibility: 0
+ webProgressiveAssetLoading: 0
+ scriptingDefineSymbols: {}
+ additionalCompilerArguments: {}
+ platformArchitecture: {}
+ scriptingBackend:
+ Android: 1
+ il2cppCompilerConfiguration: {}
+ il2cppCodeGeneration: {}
+ il2cppLTOMode: {}
+ il2cppStacktraceInformation: {}
+ managedStrippingLevel: {}
+ incrementalIl2cppBuild: {}
+ suppressCommonWarnings: 1
+ allowUnsafeCode: 0
+ useDeterministicCompilation: 1
+ additionalIl2CppArgs:
+ scriptingRuntimeVersion: 1
+ gcIncremental: 1
+ gcWBarrierValidation: 0
+ managedCodeVariant: {}
+ apiCompatibilityLevelPerPlatform: {}
+ editorAssembliesCompatibilityLevel: 1
+ m_RenderingPath: 1
+ m_MobileRenderingPath: 1
+ metroPackageName: scriptable-processor-random-container
+ metroPackageVersion:
+ metroCertificatePath:
+ metroCertificatePassword:
+ metroCertificateSubject:
+ metroCertificateIssuer:
+ metroCertificateNotAfter: 0000000000000000
+ metroApplicationDescription: scriptable-processor-random-container
+ wsaImages: {}
+ metroTileShortName:
+ metroTileShowName: 0
+ metroMediumTileShowName: 0
+ metroLargeTileShowName: 0
+ metroWideTileShowName: 0
+ metroSupportStreamingInstall: 0
+ metroLastRequiredScene: 0
+ metroDefaultTileSize: 1
+ metroTileForegroundText: 2
+ metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0}
+ metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628, a: 1}
+ metroSplashScreenUseBackgroundColor: 0
+ syncCapabilities: 0
+ platformCapabilities: {}
+ metroTargetDeviceFamilies: {}
+ metroFTAName:
+ metroFTAFileTypes: []
+ metroProtocolName:
+ vcxProjDefaultLanguage:
+ XboxOneProductId:
+ XboxOneUpdateKey:
+ XboxOneSandboxId:
+ XboxOneContentId:
+ XboxOneTitleId:
+ XboxOneSCId:
+ XboxOneGameOsOverridePath:
+ XboxOnePackagingOverridePath:
+ XboxOneAppManifestOverridePath:
+ XboxOneVersion: 1.0.0.0
+ XboxOnePackageEncryption: 0
+ XboxOnePackageUpdateGranularity: 2
+ XboxOneDescription:
+ XboxOneLanguage:
+ - enus
+ XboxOneCapability: []
+ XboxOneGameRating: {}
+ XboxOneIsContentPackage: 0
+ XboxOneEnhancedXboxCompatibilityMode: 0
+ XboxOneEnableGPUVariability: 1
+ XboxOneSockets: {}
+ XboxOneSplashScreen: {fileID: 0}
+ XboxOneAllowedProductIds: []
+ XboxOnePersistentLocalStorageSize: 0
+ XboxOneXTitleMemory: 8
+ XboxOneOverrideIdentityName:
+ XboxOneOverrideIdentityPublisher:
+ cloudServicesEnabled: {}
+ luminIcon:
+ m_Name:
+ m_ModelFolderPath:
+ m_PortalFolderPath:
+ luminCert:
+ m_CertPath:
+ m_SignPackage: 1
+ luminIsChannelApp: 0
+ luminVersion:
+ m_VersionCode: 1
+ m_VersionName:
+ hmiPlayerDataPath:
+ hmiForceSRGBBlit: 1
+ embeddedLinuxEnableGamepadInput: 0
+ hmiCpuConfiguration: 0000000000000000i
+ hmiLogStartupTiming: 0
+ qnxGraphicConfPath:
+ apiCompatibilityLevel: 6
+ captureStartupLogs: {}
+ activeInputHandler: 0
+ windowsGamepadBackendHint: 0
+ enableDirectStorage: 0
+ cloudProjectId:
+ framebufferDepthMemorylessMode: 0
+ qualitySettingsNames: []
+ projectName:
+ organizationId:
+ cloudEnabled: 0
+ legacyClampBlendShapeWeights: 0
+ hmiLoadingImage: {fileID: 0}
+ platformRequiresReadableAssets: 0
+ virtualTexturingSupportEnabled: 0
+ insecureHttpOption: 0
+ androidVulkanDenyFilterList: []
+ androidVulkanAllowFilterList: []
+ androidVulkanDeviceFilterListAsset: {fileID: 0}
+ d3d12DeviceFilterListAsset: {fileID: 0}
+ webGPUDeviceFilterListAsset: {fileID: 0}
+ allowedHttpConnections: 3
diff --git a/scriptable-processor-seeking/ProjectSettings/ProjectVersion.txt b/scriptable-processor-seeking/ProjectSettings/ProjectVersion.txt
new file mode 100644
index 0000000..fc72b1d
--- /dev/null
+++ b/scriptable-processor-seeking/ProjectSettings/ProjectVersion.txt
@@ -0,0 +1,2 @@
+m_EditorVersion: 6000.7.0a6
+m_EditorVersionWithRevision: 6000.7.0a6 (5e21d38eb38d)
diff --git a/scriptable-processor-seeking/ProjectSettings/QualitySettings.asset b/scriptable-processor-seeking/ProjectSettings/QualitySettings.asset
new file mode 100644
index 0000000..06e9a34
--- /dev/null
+++ b/scriptable-processor-seeking/ProjectSettings/QualitySettings.asset
@@ -0,0 +1,135 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!47 &1
+QualitySettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 5
+ m_CurrentQuality: 1
+ m_QualitySettings:
+ - serializedVersion: 4
+ name: Mobile
+ pixelLightCount: 2
+ shadows: 2
+ shadowResolution: 1
+ shadowProjection: 1
+ shadowCascades: 2
+ shadowDistance: 40
+ shadowNearPlaneOffset: 3
+ shadowCascade2Split: 0.33333334
+ shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
+ shadowmaskMode: 0
+ skinWeights: 2
+ globalTextureMipmapLimit: 0
+ textureMipmapLimitSettings: []
+ anisotropicTextures: 1
+ antiAliasing: 0
+ softParticles: 0
+ softVegetation: 1
+ realtimeReflectionProbes: 0
+ billboardsFaceCameraPosition: 1
+ useLegacyDetailDistribution: 1
+ adaptiveVsync: 0
+ vSyncCount: 0
+ realtimeGICPUUsage: 100
+ adaptiveVsyncExtraA: 0
+ adaptiveVsyncExtraB: 0
+ lodBias: 1
+ maximumLODLevel: 0
+ enableLODCrossFade: 1
+ streamingMipmapsActive: 0
+ streamingMipmapsAddAllCameras: 1
+ streamingMipmapsMemoryBudget: 512
+ streamingMipmapsRenderersPerFrame: 512
+ streamingMipmapsMaxLevelReduction: 2
+ streamingMipmapsMaxFileIORequests: 1024
+ particleRaycastBudget: 256
+ asyncUploadTimeSlice: 2
+ asyncUploadBufferSize: 16
+ asyncUploadPersistentBuffer: 1
+ resolutionScalingFixedDPIFactor: 1
+ customRenderPipeline: {fileID: 11400000, guid: 5e6cbd92db86f4b18aec3ed561671858, type: 2}
+ terrainQualityOverrides: 0
+ terrainPixelError: 1
+ terrainDetailDensityScale: 1
+ terrainBasemapDistance: 1000
+ terrainDetailDistance: 80
+ terrainTreeDistance: 5000
+ terrainBillboardStart: 50
+ terrainFadeLength: 5
+ terrainMaxTrees: 50
+ excludedTargetPlatforms:
+ - Standalone
+ - serializedVersion: 4
+ name: PC
+ pixelLightCount: 2
+ shadows: 2
+ shadowResolution: 1
+ shadowProjection: 1
+ shadowCascades: 2
+ shadowDistance: 40
+ shadowNearPlaneOffset: 3
+ shadowCascade2Split: 0.33333334
+ shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
+ shadowmaskMode: 1
+ skinWeights: 4
+ globalTextureMipmapLimit: 0
+ textureMipmapLimitSettings: []
+ anisotropicTextures: 2
+ antiAliasing: 0
+ softParticles: 0
+ softVegetation: 1
+ realtimeReflectionProbes: 0
+ billboardsFaceCameraPosition: 1
+ useLegacyDetailDistribution: 1
+ adaptiveVsync: 0
+ vSyncCount: 0
+ realtimeGICPUUsage: 100
+ adaptiveVsyncExtraA: 0
+ adaptiveVsyncExtraB: 0
+ lodBias: 2
+ maximumLODLevel: 0
+ enableLODCrossFade: 1
+ streamingMipmapsActive: 0
+ streamingMipmapsAddAllCameras: 1
+ streamingMipmapsMemoryBudget: 512
+ streamingMipmapsRenderersPerFrame: 512
+ streamingMipmapsMaxLevelReduction: 2
+ streamingMipmapsMaxFileIORequests: 1024
+ particleRaycastBudget: 256
+ asyncUploadTimeSlice: 2
+ asyncUploadBufferSize: 16
+ asyncUploadPersistentBuffer: 1
+ resolutionScalingFixedDPIFactor: 1
+ customRenderPipeline: {fileID: 11400000, guid: 4b83569d67af61e458304325a23e5dfd, type: 2}
+ terrainQualityOverrides: 0
+ terrainPixelError: 1
+ terrainDetailDensityScale: 1
+ terrainBasemapDistance: 1000
+ terrainDetailDistance: 80
+ terrainTreeDistance: 5000
+ terrainBillboardStart: 50
+ terrainFadeLength: 5
+ terrainMaxTrees: 50
+ excludedTargetPlatforms:
+ - Android
+ - iPhone
+ m_TextureMipmapLimitGroupNames: []
+ m_PerPlatformDefaultQuality:
+ Android: 0
+ AndroidXR: 0
+ GameCoreScarlett: 1
+ GameCoreXboxOne: 1
+ Lumin: 0
+ MetaQuest: 0
+ Nintendo Switch: 1
+ Nintendo Switch 2: 1
+ PS4: 1
+ PS5: 1
+ Server: 0
+ Stadia: 0
+ Standalone: 1
+ WebGL: 0
+ Windows Store Apps: 0
+ XboxOne: 0
+ iPhone: 0
+ tvOS: 0
diff --git a/scriptable-processor-seeking/ProjectSettings/SceneTemplateSettings.json b/scriptable-processor-seeking/ProjectSettings/SceneTemplateSettings.json
new file mode 100644
index 0000000..ede5887
--- /dev/null
+++ b/scriptable-processor-seeking/ProjectSettings/SceneTemplateSettings.json
@@ -0,0 +1,121 @@
+{
+ "templatePinStates": [],
+ "dependencyTypeInfos": [
+ {
+ "userAdded": false,
+ "type": "UnityEngine.AnimationClip",
+ "defaultInstantiationMode": 0
+ },
+ {
+ "userAdded": false,
+ "type": "UnityEditor.Animations.AnimatorController",
+ "defaultInstantiationMode": 0
+ },
+ {
+ "userAdded": false,
+ "type": "UnityEngine.AnimatorOverrideController",
+ "defaultInstantiationMode": 0
+ },
+ {
+ "userAdded": false,
+ "type": "UnityEditor.Audio.AudioMixerController",
+ "defaultInstantiationMode": 0
+ },
+ {
+ "userAdded": false,
+ "type": "UnityEngine.ComputeShader",
+ "defaultInstantiationMode": 1
+ },
+ {
+ "userAdded": false,
+ "type": "UnityEngine.Cubemap",
+ "defaultInstantiationMode": 0
+ },
+ {
+ "userAdded": false,
+ "type": "UnityEngine.GameObject",
+ "defaultInstantiationMode": 0
+ },
+ {
+ "userAdded": false,
+ "type": "UnityEditor.LightingDataAsset",
+ "defaultInstantiationMode": 0
+ },
+ {
+ "userAdded": false,
+ "type": "UnityEngine.LightingSettings",
+ "defaultInstantiationMode": 0
+ },
+ {
+ "userAdded": false,
+ "type": "UnityEngine.Material",
+ "defaultInstantiationMode": 0
+ },
+ {
+ "userAdded": false,
+ "type": "UnityEditor.MonoScript",
+ "defaultInstantiationMode": 1
+ },
+ {
+ "userAdded": false,
+ "type": "UnityEngine.PhysicsMaterial",
+ "defaultInstantiationMode": 0
+ },
+ {
+ "userAdded": false,
+ "type": "UnityEngine.PhysicsMaterial2D",
+ "defaultInstantiationMode": 0
+ },
+ {
+ "userAdded": false,
+ "type": "UnityEngine.Rendering.PostProcessing.PostProcessProfile",
+ "defaultInstantiationMode": 0
+ },
+ {
+ "userAdded": false,
+ "type": "UnityEngine.Rendering.PostProcessing.PostProcessResources",
+ "defaultInstantiationMode": 0
+ },
+ {
+ "userAdded": false,
+ "type": "UnityEngine.Rendering.VolumeProfile",
+ "defaultInstantiationMode": 0
+ },
+ {
+ "userAdded": false,
+ "type": "UnityEditor.SceneAsset",
+ "defaultInstantiationMode": 1
+ },
+ {
+ "userAdded": false,
+ "type": "UnityEngine.Shader",
+ "defaultInstantiationMode": 1
+ },
+ {
+ "userAdded": false,
+ "type": "UnityEngine.ShaderVariantCollection",
+ "defaultInstantiationMode": 1
+ },
+ {
+ "userAdded": false,
+ "type": "UnityEngine.Texture",
+ "defaultInstantiationMode": 0
+ },
+ {
+ "userAdded": false,
+ "type": "UnityEngine.Texture2D",
+ "defaultInstantiationMode": 0
+ },
+ {
+ "userAdded": false,
+ "type": "UnityEngine.Timeline.TimelineAsset",
+ "defaultInstantiationMode": 0
+ }
+ ],
+ "defaultDependencyTypeInfo": {
+ "userAdded": false,
+ "type": "",
+ "defaultInstantiationMode": 1
+ },
+ "newSceneOverride": 0
+}
\ No newline at end of file
diff --git a/scriptable-processor-seeking/ProjectSettings/ShaderGraphSettings.asset b/scriptable-processor-seeking/ProjectSettings/ShaderGraphSettings.asset
new file mode 100644
index 0000000..ce8c243
--- /dev/null
+++ b/scriptable-processor-seeking/ProjectSettings/ShaderGraphSettings.asset
@@ -0,0 +1,19 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &1
+MonoBehaviour:
+ m_ObjectHideFlags: 61
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: de02f9e1d18f588468e474319d09a723, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ shaderVariantLimit: 128
+ overrideShaderVariantLimit: 0
+ customInterpolatorErrorThreshold: 32
+ customInterpolatorWarningThreshold: 16
+ customHeatmapValues: {fileID: 0}
diff --git a/scriptable-processor-seeking/ProjectSettings/TagManager.asset b/scriptable-processor-seeking/ProjectSettings/TagManager.asset
new file mode 100644
index 0000000..6413d11
--- /dev/null
+++ b/scriptable-processor-seeking/ProjectSettings/TagManager.asset
@@ -0,0 +1,76 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!78 &1
+TagManager:
+ serializedVersion: 2
+ tags: []
+ layers:
+ - Default
+ - TransparentFX
+ - Ignore Raycast
+ -
+ - Water
+ - UI
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ m_SortingLayers:
+ - name: Default
+ uniqueID: 0
+ locked: 0
+ m_RenderingLayers:
+ - Default
+ - Light Layer 1
+ - Light Layer 2
+ - Light Layer 3
+ - Light Layer 4
+ - Light Layer 5
+ - Light Layer 6
+ - Light Layer 7
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
diff --git a/scriptable-processor-seeking/ProjectSettings/TimeManager.asset b/scriptable-processor-seeking/ProjectSettings/TimeManager.asset
new file mode 100644
index 0000000..558a017
--- /dev/null
+++ b/scriptable-processor-seeking/ProjectSettings/TimeManager.asset
@@ -0,0 +1,9 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!5 &1
+TimeManager:
+ m_ObjectHideFlags: 0
+ Fixed Timestep: 0.02
+ Maximum Allowed Timestep: 0.33333334
+ m_TimeScale: 1
+ Maximum Particle Timestep: 0.03
diff --git a/scriptable-processor-seeking/ProjectSettings/URPProjectSettings.asset b/scriptable-processor-seeking/ProjectSettings/URPProjectSettings.asset
new file mode 100644
index 0000000..64a8674
--- /dev/null
+++ b/scriptable-processor-seeking/ProjectSettings/URPProjectSettings.asset
@@ -0,0 +1,15 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &1
+MonoBehaviour:
+ m_ObjectHideFlags: 61
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 247994e1f5a72c2419c26a37e9334c01, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_LastMaterialVersion: 10
diff --git a/scriptable-processor-seeking/ProjectSettings/UnityConnectSettings.asset b/scriptable-processor-seeking/ProjectSettings/UnityConnectSettings.asset
new file mode 100644
index 0000000..72f48ef
--- /dev/null
+++ b/scriptable-processor-seeking/ProjectSettings/UnityConnectSettings.asset
@@ -0,0 +1,42 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!310 &1
+UnityConnectSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 1
+ m_Enabled: 0
+ m_TestMode: 0
+ m_EventOldUrl: https://api.uca.cloud.unity3d.com/v1/events
+ m_EventUrl: https://cdp.cloud.unity3d.com/v1/events
+ m_ConfigUrl: https://config.uca.cloud.unity3d.com
+ m_DashboardUrl: https://dashboard.unity3d.com
+ m_TestInitMode: 0
+ InsightsSettings:
+ m_EventUrl:
+ m_StackTraceUrl:
+ m_EngineDiagnosticsEnabled: 1
+ m_Enabled: 0
+ CrashReportingSettings:
+ serializedVersion: 2
+ m_EventUrl: https://perf-events.cloud.unity3d.com
+ m_EnableCloudDiagnosticsReporting: 0
+ m_LogBufferSize: 10
+ m_CaptureEditorExceptions: 1
+ UnityPurchasingSettings:
+ m_Enabled: 0
+ m_TestMode: 0
+ UnityAnalyticsSettings:
+ m_Enabled: 0
+ m_TestMode: 0
+ m_InitializeOnStartup: 1
+ m_PackageRequiringCoreStatsPresent: 0
+ UnityAdsSettings:
+ m_Enabled: 0
+ m_InitializeOnStartup: 1
+ m_TestMode: 0
+ m_IosGameId:
+ m_AndroidGameId:
+ m_GameIds: {}
+ m_GameId:
+ PerformanceReportingSettings:
+ m_Enabled: 0
diff --git a/scriptable-processor-seeking/ProjectSettings/VFXManager.asset b/scriptable-processor-seeking/ProjectSettings/VFXManager.asset
new file mode 100644
index 0000000..3a95c98
--- /dev/null
+++ b/scriptable-processor-seeking/ProjectSettings/VFXManager.asset
@@ -0,0 +1,12 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!937362698 &1
+VFXManager:
+ m_ObjectHideFlags: 0
+ m_IndirectShader: {fileID: 0}
+ m_CopyBufferShader: {fileID: 0}
+ m_SortShader: {fileID: 0}
+ m_StripUpdateShader: {fileID: 0}
+ m_RenderPipeSettingsPath:
+ m_FixedTimeStep: 0.016666668
+ m_MaxDeltaTime: 0.05
diff --git a/scriptable-processor-seeking/ProjectSettings/VersionControlSettings.asset b/scriptable-processor-seeking/ProjectSettings/VersionControlSettings.asset
new file mode 100644
index 0000000..dca2881
--- /dev/null
+++ b/scriptable-processor-seeking/ProjectSettings/VersionControlSettings.asset
@@ -0,0 +1,8 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!890905787 &1
+VersionControlSettings:
+ m_ObjectHideFlags: 0
+ m_Mode: Visible Meta Files
+ m_CollabEditorSettings:
+ inProgressEnabled: 1
diff --git a/scriptable-processor-seeking/ProjectSettings/XRSettings.asset b/scriptable-processor-seeking/ProjectSettings/XRSettings.asset
new file mode 100644
index 0000000..482590c
--- /dev/null
+++ b/scriptable-processor-seeking/ProjectSettings/XRSettings.asset
@@ -0,0 +1,10 @@
+{
+ "m_SettingKeys": [
+ "VR Device Disabled",
+ "VR Device User Alert"
+ ],
+ "m_SettingValues": [
+ "False",
+ "False"
+ ]
+}
\ No newline at end of file
diff --git a/scriptable-processor-seeking/README.md b/scriptable-processor-seeking/README.md
new file mode 100644
index 0000000..0d14018
--- /dev/null
+++ b/scriptable-processor-seeking/README.md
@@ -0,0 +1,52 @@
+# Seeking Example Project
+
+This example demonstrates **seeking** for scriptable processors: repositioning a playing generator to a new point on its timeline, either immediately or scheduled to fire sample-accurately when playback reaches a chosen position.
+
+The project targets Unity 6.7 and is built on the [Scriptable audio pipeline][manual] APIs. Seeking is delivered to a live generator instance with `SeekMessage`.
+
+[manual]: https://docs.unity3d.com/6000.7/Documentation/Manual/audio-scriptable-processors.html
+
+## Run the demo
+
+Open the project in Unity 6.7, open `Assets/Scenes/Seeking.unity`, and enter Play Mode.
+
+The scene contains a single **Seek Tester** GameObject (a `SeekTester` plus a `ClipPlayerGenerator` with `Count1To10.wav` assigned) and a Main Camera that provides the `AudioListener`. A GUI panel appears in the top-left in Play Mode:
+
+- Playback starts **stopped**. Use the **Play/Stop** button.
+- Pick **when** a seek should fire (the clip second at which it triggers) with the slider, then click a **number button** to enqueue "when the clip reaches that second, jump so I hear number N".
+- Enable **Fire immediately** to ignore `when` and seek at the next process block instead.
+- You can build a queue while stopped; it is delivered when you press **Play**, so several seeks end up scheduled together in the sample provider's own queue.
+- The panel schedules on whole-second boundaries for legibility; `SeekMessage` itself accepts any `DiscreteTime`.
+
+The clip counts "one" through "ten" over roughly ten seconds, so the audible result makes each seek easy to verify by ear.
+
+## How seeking works
+
+A seek is a message sent to a **live** generator instance. There are two forms:
+
+| Call | Effect |
+|------|--------|
+| `new SeekMessage(offset)` | Immediate seek: jump to `offset` at the next process block. |
+| `new SeekMessage(offset, when)` | Scheduled seek: jump to `offset` when the timeline reaches `when`. |
+
+Both `offset` and `when` are [`DiscreteTime`][integertime] values; `DiscreteTime(int)` is interpreted as whole seconds here. The message is delivered with:
+
+```csharp
+var msg = new SeekMessage(offset, when);
+var response = ControlContext.builtIn.SendMessage(instance, ref msg);
+```
+
+The instance only exists a frame or so after `AudioSource.Play()`, so `SeekTester` waits until `ControlContext.builtIn.Exists(source.generatorInstance)` is true before flushing its queued seeks.
+
+Seeks can be scheduled in **any order** — the sample provider fires each one when playback reaches its `when`. A seek whose `when` playback has **already passed** (for example, one made unreachable by an earlier seek that jumped past it) is silently dropped rather than applied.
+
+[integertime]: https://docs.unity3d.com/6000.7/Documentation/ScriptReference/Unity.IntegerTime.DiscreteTime.html
+
+## The scripts
+
+The implementation is two small `MonoBehaviour`s in `Assets/Scripts/`.
+
+| File | Role |
+|----------------------------|---------------------------------------------------------------------------------------------------------------------------------------------|
+| `ClipPlayerGenerator.cs` | An `IAudioGenerator` that wraps the clip's own sample-provider instance (`clip.CreateInstance`), which is the path that handles seeks. Its realtime side forwards each `Process` call to that nested instance and watches the returned `Result`; `SeekMessage`s arriving at the wrapper are forwarded down unchanged. When the nested instance reports `isFinished()`, the realtime side sends a datum over the pipe and the control side relays it to `ClipPlaybackState` on the main thread. |
+| `SeekTester.cs` | A manual seek playground. Wires the generator onto an `AudioSource`, draws the GUI transport, sends `SeekMessage`s to the live instance, and stops the source when `ClipPlaybackState` reports the clip has finished. |