summaryrefslogtreecommitdiff
path: root/VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects
diff options
context:
space:
mode:
authortylermurphy534 <tylermurphy534@gmail.com>2022-11-06 15:12:42 -0500
committertylermurphy534 <tylermurphy534@gmail.com>2022-11-06 15:12:42 -0500
commiteb84bb298d2b95aec7b2ae12cbf25ac64f25379a (patch)
treeefd616a157df06ab661c6d56651853431ac6b08b /VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects
downloadunityprojects-eb84bb298d2b95aec7b2ae12cbf25ac64f25379a.tar.gz
unityprojects-eb84bb298d2b95aec7b2ae12cbf25ac64f25379a.tar.bz2
unityprojects-eb84bb298d2b95aec7b2ae12cbf25ac64f25379a.zip
move to self host
Diffstat (limited to 'VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects')
-rw-r--r--VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/IOverridesSerializationFormat.cs30
-rw-r--r--VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/IOverridesSerializationFormat.cs.meta11
-rw-r--r--VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/IOverridesSerializationPolicy.cs31
-rw-r--r--VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/IOverridesSerializationPolicy.cs.meta11
-rw-r--r--VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/ISupportsPrefabSerialization.cs30
-rw-r--r--VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/ISupportsPrefabSerialization.cs.meta11
-rw-r--r--VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/SerializationData.cs175
-rw-r--r--VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/SerializationData.cs.meta11
-rw-r--r--VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/SerializedBehaviour.cs62
-rw-r--r--VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/SerializedBehaviour.cs.meta11
-rw-r--r--VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/SerializedComponent.cs62
-rw-r--r--VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/SerializedComponent.cs.meta11
-rw-r--r--VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/SerializedMonoBehaviour.cs63
-rw-r--r--VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/SerializedMonoBehaviour.cs.meta11
-rw-r--r--VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/SerializedScriptableObject.cs60
-rw-r--r--VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/SerializedScriptableObject.cs.meta11
-rw-r--r--VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/SerializedStateMachineBehaviour.cs60
-rw-r--r--VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/SerializedStateMachineBehaviour.cs.meta11
-rw-r--r--VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/SerializedUnityObject.cs60
-rw-r--r--VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/SerializedUnityObject.cs.meta11
20 files changed, 743 insertions, 0 deletions
diff --git a/VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/IOverridesSerializationFormat.cs b/VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/IOverridesSerializationFormat.cs
new file mode 100644
index 00000000..4771de1b
--- /dev/null
+++ b/VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/IOverridesSerializationFormat.cs
@@ -0,0 +1,30 @@
+//-----------------------------------------------------------------------
+// <copyright file="IOverridesSerializationFormat.cs" company="Sirenix IVS">
+// Copyright (c) 2018 Sirenix IVS
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// </copyright>
+//-----------------------------------------------------------------------
+namespace VRC.Udon.Serialization.OdinSerializer
+{
+ /// <summary>
+ /// Indicates that an Odin-serialized Unity object controls its own serialization format. Every time it is serialized, it will be asked which format to use.
+ /// </summary>
+ public interface IOverridesSerializationFormat
+ {
+ /// <summary>
+ /// Gets the format to use for serialization.
+ /// </summary>
+ DataFormat GetFormatToSerializeAs(bool isPlayer);
+ }
+} \ No newline at end of file
diff --git a/VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/IOverridesSerializationFormat.cs.meta b/VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/IOverridesSerializationFormat.cs.meta
new file mode 100644
index 00000000..9ec81ef0
--- /dev/null
+++ b/VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/IOverridesSerializationFormat.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: ff1ca109149d83b03b39644f8045275e
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/IOverridesSerializationPolicy.cs b/VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/IOverridesSerializationPolicy.cs
new file mode 100644
index 00000000..6f46532f
--- /dev/null
+++ b/VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/IOverridesSerializationPolicy.cs
@@ -0,0 +1,31 @@
+//-----------------------------------------------------------------------
+// <copyright file="IOverridesSerializationPolicy.cs" company="Sirenix IVS">
+// Copyright (c) 2018 Sirenix IVS
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// </copyright>
+//-----------------------------------------------------------------------
+
+namespace VRC.Udon.Serialization.OdinSerializer
+{
+ /// <summary>
+ /// Indicates that an Odin-serialized Unity object provides its own serialization policy rather than using the default policy.
+ /// <para/>
+ /// Note that THE VALUES RETURNED BY THIS INTERFACE WILL OVERRIDE THE PARAMETERS PASSED TO <see cref="UnitySerializationUtility.SerializeUnityObject(UnityEngine.Object, ref SerializationData, bool, SerializationContext)"/> and <see cref="UnitySerializationUtility.DeserializeUnityObject(UnityEngine.Object, ref SerializationData, DeserializationContext)"/>.
+ /// </summary>
+ public interface IOverridesSerializationPolicy
+ {
+ ISerializationPolicy SerializationPolicy { get; }
+ bool OdinSerializesUnityFields { get; }
+ }
+} \ No newline at end of file
diff --git a/VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/IOverridesSerializationPolicy.cs.meta b/VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/IOverridesSerializationPolicy.cs.meta
new file mode 100644
index 00000000..57a0c8a0
--- /dev/null
+++ b/VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/IOverridesSerializationPolicy.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 8942002e9ac41c2bfd27c4fbedf93f09
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/ISupportsPrefabSerialization.cs b/VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/ISupportsPrefabSerialization.cs
new file mode 100644
index 00000000..507eaa70
--- /dev/null
+++ b/VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/ISupportsPrefabSerialization.cs
@@ -0,0 +1,30 @@
+//-----------------------------------------------------------------------
+// <copyright file="ISupportsPrefabSerialization.cs" company="Sirenix IVS">
+// Copyright (c) 2018 Sirenix IVS
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// </copyright>
+//-----------------------------------------------------------------------
+namespace VRC.Udon.Serialization.OdinSerializer
+{
+ /// <summary>
+ /// Indicates that an Odin-serialized Unity object supports prefab serialization.
+ /// </summary>
+ public interface ISupportsPrefabSerialization
+ {
+ /// <summary>
+ /// Gets or sets the serialization data of the object.
+ /// </summary>
+ SerializationData SerializationData { get; set; }
+ }
+} \ No newline at end of file
diff --git a/VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/ISupportsPrefabSerialization.cs.meta b/VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/ISupportsPrefabSerialization.cs.meta
new file mode 100644
index 00000000..1023fe57
--- /dev/null
+++ b/VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/ISupportsPrefabSerialization.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 7279ec8ad7837f13ec833193ab4282cc
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/SerializationData.cs b/VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/SerializationData.cs
new file mode 100644
index 00000000..8b441751
--- /dev/null
+++ b/VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/SerializationData.cs
@@ -0,0 +1,175 @@
+//-----------------------------------------------------------------------
+// <copyright file="SerializationData.cs" company="Sirenix IVS">
+// Copyright (c) 2018 Sirenix IVS
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// </copyright>
+//-----------------------------------------------------------------------
+namespace VRC.Udon.Serialization.OdinSerializer
+{
+ using System;
+ using System.Collections.Generic;
+ using UnityEngine;
+ using Utilities;
+
+ /// <summary>
+ /// Unity serialized data struct that contains all data needed by Odin serialization.
+ /// </summary>
+ [Serializable]
+ public struct SerializationData
+ {
+ /// <summary>
+ /// The name of the <see cref="PrefabModificationsReferencedUnityObjects"/> field.
+ /// </summary>
+ public const string PrefabModificationsReferencedUnityObjectsFieldName = "PrefabModificationsReferencedUnityObjects";
+
+ /// <summary>
+ /// The name of the <see cref="PrefabModifications"/> field.
+ /// </summary>
+ public const string PrefabModificationsFieldName = "PrefabModifications";
+
+ /// <summary>
+ /// The name of the <see cref="Prefab"/> field.
+ /// </summary>
+ public const string PrefabFieldName = "Prefab";
+
+ /// <summary>
+ /// The data format used by the serializer. This field will be automatically set to the format specified in the global serialization config
+ /// when the Unity object gets serialized, unless the Unity object implements the <see cref="IOverridesSerializationFormat"/> interface.
+ /// </summary>
+ [SerializeField]
+ public DataFormat SerializedFormat;
+
+ /// <summary>
+ /// The serialized data when serializing with the Binray format.
+ /// </summary>
+ [SerializeField]
+ public byte[] SerializedBytes;
+
+ /// <summary>
+ /// All serialized Unity references.
+ /// </summary>
+ [SerializeField]
+ public List<UnityEngine.Object> ReferencedUnityObjects;
+
+ /// <summary>
+ /// Whether the object contains any serialized data.
+ /// </summary>
+ [Obsolete("Use ContainsData instead")]
+ public bool HasEditorData
+ {
+ get
+ {
+ switch (this.SerializedFormat)
+ {
+ case DataFormat.Binary:
+ case DataFormat.JSON:
+ return !(this.SerializedBytesString.IsNullOrWhitespace() && (this.SerializedBytes == null || this.SerializedBytes.Length == 0));
+
+ case DataFormat.Nodes:
+ return !(this.SerializationNodes == null || this.SerializationNodes.Count == 0);
+
+ default:
+ throw new NotImplementedException(this.SerializedFormat.ToString());
+ }
+ }
+ }
+
+ /// <summary>
+ /// Gets a value indicating whether the struct contains any data.
+ /// If this is false, then it could mean that Unity has not yet deserialized the struct.
+ /// </summary>
+ public bool ContainsData
+ {
+ get
+ {
+ return
+ // this.SerializedBytesString != null && // Unity serialized strings remains null when an object is created until it's deserialized.
+ this.SerializedBytes != null &&
+ this.SerializationNodes != null &&
+ this.PrefabModifications != null &&
+ this.ReferencedUnityObjects != null;
+ }
+ }
+
+ /// <summary>
+ /// The serialized data when serializing with the JSON format.
+ /// </summary>
+ [SerializeField]
+ public string SerializedBytesString;
+
+ /// <summary>
+ /// The reference to the prefab this is only populated in prefab scene instances.
+ /// </summary>
+ [SerializeField]
+ public UnityEngine.Object Prefab;
+
+ /// <summary>
+ /// All serialized Unity references.
+ /// </summary>
+ [SerializeField]
+ public List<UnityEngine.Object> PrefabModificationsReferencedUnityObjects;
+
+ /// <summary>
+ /// All Odin serialized prefab modifications.
+ /// </summary>
+ [SerializeField]
+ public List<string> PrefabModifications;
+
+ /// <summary>
+ /// The serialized data when serializing with the Nodes format.
+ /// </summary>
+ [SerializeField]
+ public List<SerializationNode> SerializationNodes;
+
+ /// <summary>
+ /// Resets all data.
+ /// </summary>
+ public void Reset()
+ {
+ this.SerializedFormat = DataFormat.Binary;
+
+ if (this.SerializedBytes != null && this.SerializedBytes.Length > 0)
+ {
+ this.SerializedBytes = new byte[0];
+ }
+
+ if (this.ReferencedUnityObjects != null && this.ReferencedUnityObjects.Count > 0)
+ {
+ this.ReferencedUnityObjects.Clear();
+ }
+
+ this.Prefab = null;
+
+ if (this.SerializationNodes != null && this.SerializationNodes.Count > 0)
+ {
+ this.SerializationNodes.Clear();
+ }
+
+ if (this.SerializedBytesString != null && this.SerializedBytesString.Length > 0)
+ {
+ this.SerializedBytesString = string.Empty;
+ }
+
+ if (this.PrefabModificationsReferencedUnityObjects != null && this.PrefabModificationsReferencedUnityObjects.Count > 0)
+ {
+ this.PrefabModificationsReferencedUnityObjects.Clear();
+ }
+
+ if (this.PrefabModifications != null && this.PrefabModifications.Count > 0)
+ {
+ this.PrefabModifications.Clear();
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/SerializationData.cs.meta b/VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/SerializationData.cs.meta
new file mode 100644
index 00000000..95b776f7
--- /dev/null
+++ b/VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/SerializationData.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: ea095023abd05a7af0da4166dcefdee8
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/SerializedBehaviour.cs b/VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/SerializedBehaviour.cs
new file mode 100644
index 00000000..f31b8b4d
--- /dev/null
+++ b/VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/SerializedBehaviour.cs
@@ -0,0 +1,62 @@
+//-----------------------------------------------------------------------
+// <copyright file="SerializedBehaviour.cs" company="Sirenix IVS">
+// Copyright (c) 2018 Sirenix IVS
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// </copyright>
+//-----------------------------------------------------------------------
+namespace VRC.Udon.Serialization.OdinSerializer
+{
+ using UnityEngine;
+
+ /// <summary>
+ /// A Unity Behaviour which is serialized by the Sirenix serialization system.
+ /// </summary>
+#if ODIN_INSPECTOR
+ [Sirenix.OdinInspector.ShowOdinSerializedPropertiesInInspector]
+#endif
+
+ public abstract class SerializedBehaviour : Behaviour, ISerializationCallbackReceiver, ISupportsPrefabSerialization
+ {
+ [SerializeField, HideInInspector]
+ private SerializationData serializationData;
+
+ SerializationData ISupportsPrefabSerialization.SerializationData { get { return this.serializationData; } set { this.serializationData = value; } }
+
+ void ISerializationCallbackReceiver.OnAfterDeserialize()
+ {
+ UnitySerializationUtility.DeserializeUnityObject(this, ref this.serializationData);
+ this.OnAfterDeserialize();
+ }
+
+ void ISerializationCallbackReceiver.OnBeforeSerialize()
+ {
+ this.OnBeforeSerialize();
+ UnitySerializationUtility.SerializeUnityObject(this, ref this.serializationData);
+ }
+
+ /// <summary>
+ /// Invoked after deserialization has taken place.
+ /// </summary>
+ protected virtual void OnAfterDeserialize()
+ {
+ }
+
+ /// <summary>
+ /// Invoked before serialization has taken place.
+ /// </summary>
+ protected virtual void OnBeforeSerialize()
+ {
+ }
+ }
+} \ No newline at end of file
diff --git a/VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/SerializedBehaviour.cs.meta b/VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/SerializedBehaviour.cs.meta
new file mode 100644
index 00000000..605a78ee
--- /dev/null
+++ b/VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/SerializedBehaviour.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: c3cecb461cebbc940ede3b5ddb72382e
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/SerializedComponent.cs b/VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/SerializedComponent.cs
new file mode 100644
index 00000000..47ba4f3b
--- /dev/null
+++ b/VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/SerializedComponent.cs
@@ -0,0 +1,62 @@
+//-----------------------------------------------------------------------
+// <copyright file="SerializedComponent.cs" company="Sirenix IVS">
+// Copyright (c) 2018 Sirenix IVS
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// </copyright>
+//-----------------------------------------------------------------------
+namespace VRC.Udon.Serialization.OdinSerializer
+{
+ using UnityEngine;
+
+ /// <summary>
+ /// A Unity Component which is serialized by the Sirenix serialization system.
+ /// </summary>
+#if ODIN_INSPECTOR
+ [Sirenix.OdinInspector.ShowOdinSerializedPropertiesInInspector]
+#endif
+
+ public abstract class SerializedComponent : Component, ISerializationCallbackReceiver, ISupportsPrefabSerialization
+ {
+ [SerializeField, HideInInspector]
+ private SerializationData serializationData;
+
+ SerializationData ISupportsPrefabSerialization.SerializationData { get { return this.serializationData; } set { this.serializationData = value; } }
+
+ void ISerializationCallbackReceiver.OnAfterDeserialize()
+ {
+ UnitySerializationUtility.DeserializeUnityObject(this, ref this.serializationData);
+ this.OnAfterDeserialize();
+ }
+
+ void ISerializationCallbackReceiver.OnBeforeSerialize()
+ {
+ this.OnBeforeSerialize();
+ UnitySerializationUtility.SerializeUnityObject(this, ref this.serializationData);
+ }
+
+ /// <summary>
+ /// Invoked after deserialization has taken place.
+ /// </summary>
+ protected virtual void OnAfterDeserialize()
+ {
+ }
+
+ /// <summary>
+ /// Invoked before serialization has taken place.
+ /// </summary>
+ protected virtual void OnBeforeSerialize()
+ {
+ }
+ }
+} \ No newline at end of file
diff --git a/VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/SerializedComponent.cs.meta b/VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/SerializedComponent.cs.meta
new file mode 100644
index 00000000..903c320b
--- /dev/null
+++ b/VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/SerializedComponent.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 56b88cfe9935184fe250bda018144f26
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/SerializedMonoBehaviour.cs b/VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/SerializedMonoBehaviour.cs
new file mode 100644
index 00000000..8d5ea413
--- /dev/null
+++ b/VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/SerializedMonoBehaviour.cs
@@ -0,0 +1,63 @@
+//-----------------------------------------------------------------------
+// <copyright file="SerializedMonoBehaviour.cs" company="Sirenix IVS">
+// Copyright (c) 2018 Sirenix IVS
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// </copyright>
+//-----------------------------------------------------------------------
+
+namespace VRC.Udon.Serialization.OdinSerializer
+{
+ using UnityEngine;
+
+ /// <summary>
+ /// A Unity MonoBehaviour which is serialized by the Sirenix serialization system.
+ /// </summary>
+#if ODIN_INSPECTOR
+ [Sirenix.OdinInspector.ShowOdinSerializedPropertiesInInspector]
+#endif
+
+ public abstract class SerializedMonoBehaviour : MonoBehaviour, ISerializationCallbackReceiver, ISupportsPrefabSerialization
+ {
+ [SerializeField, HideInInspector]
+ private SerializationData serializationData;
+
+ SerializationData ISupportsPrefabSerialization.SerializationData { get { return this.serializationData; } set { this.serializationData = value; } }
+
+ void ISerializationCallbackReceiver.OnAfterDeserialize()
+ {
+ UnitySerializationUtility.DeserializeUnityObject(this, ref this.serializationData);
+ this.OnAfterDeserialize();
+ }
+
+ void ISerializationCallbackReceiver.OnBeforeSerialize()
+ {
+ this.OnBeforeSerialize();
+ UnitySerializationUtility.SerializeUnityObject(this, ref this.serializationData);
+ }
+
+ /// <summary>
+ /// Invoked after deserialization has taken place.
+ /// </summary>
+ protected virtual void OnAfterDeserialize()
+ {
+ }
+
+ /// <summary>
+ /// Invoked before serialization has taken place.
+ /// </summary>
+ protected virtual void OnBeforeSerialize()
+ {
+ }
+ }
+} \ No newline at end of file
diff --git a/VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/SerializedMonoBehaviour.cs.meta b/VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/SerializedMonoBehaviour.cs.meta
new file mode 100644
index 00000000..8a926e47
--- /dev/null
+++ b/VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/SerializedMonoBehaviour.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: d1b9fa6342beb9fdfc2c4bc1d8e5e971
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/SerializedScriptableObject.cs b/VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/SerializedScriptableObject.cs
new file mode 100644
index 00000000..f0af64ee
--- /dev/null
+++ b/VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/SerializedScriptableObject.cs
@@ -0,0 +1,60 @@
+//-----------------------------------------------------------------------
+// <copyright file="SerializedScriptableObject.cs" company="Sirenix IVS">
+// Copyright (c) 2018 Sirenix IVS
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// </copyright>
+//-----------------------------------------------------------------------
+namespace VRC.Udon.Serialization.OdinSerializer
+{
+ using UnityEngine;
+
+ /// <summary>
+ /// A Unity ScriptableObject which is serialized by the Sirenix serialization system.
+ /// </summary>
+#if ODIN_INSPECTOR
+ [Sirenix.OdinInspector.ShowOdinSerializedPropertiesInInspector]
+#endif
+
+ public abstract class SerializedScriptableObject : ScriptableObject, ISerializationCallbackReceiver
+ {
+ [SerializeField, HideInInspector]
+ private SerializationData serializationData;
+
+ void ISerializationCallbackReceiver.OnAfterDeserialize()
+ {
+ UnitySerializationUtility.DeserializeUnityObject(this, ref this.serializationData);
+ this.OnAfterDeserialize();
+ }
+
+ void ISerializationCallbackReceiver.OnBeforeSerialize()
+ {
+ this.OnBeforeSerialize();
+ UnitySerializationUtility.SerializeUnityObject(this, ref this.serializationData);
+ }
+
+ /// <summary>
+ /// Invoked after deserialization has taken place.
+ /// </summary>
+ protected virtual void OnAfterDeserialize()
+ {
+ }
+
+ /// <summary>
+ /// Invoked before serialization has taken place.
+ /// </summary>
+ protected virtual void OnBeforeSerialize()
+ {
+ }
+ }
+} \ No newline at end of file
diff --git a/VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/SerializedScriptableObject.cs.meta b/VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/SerializedScriptableObject.cs.meta
new file mode 100644
index 00000000..72be5810
--- /dev/null
+++ b/VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/SerializedScriptableObject.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 6cb9325ffffee5d6ed94d71590b4049a
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/SerializedStateMachineBehaviour.cs b/VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/SerializedStateMachineBehaviour.cs
new file mode 100644
index 00000000..85a01e97
--- /dev/null
+++ b/VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/SerializedStateMachineBehaviour.cs
@@ -0,0 +1,60 @@
+//-----------------------------------------------------------------------
+// <copyright file="SerializedStateMachineBehaviour.cs" company="Sirenix IVS">
+// Copyright (c) 2018 Sirenix IVS
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// </copyright>
+//-----------------------------------------------------------------------
+namespace VRC.Udon.Serialization.OdinSerializer
+{
+ using UnityEngine;
+
+ /// <summary>
+ /// A Unity StateMachineBehaviour which is serialized by the Sirenix serialization system.
+ /// </summary>
+#if ODIN_INSPECTOR
+ [Sirenix.OdinInspector.ShowOdinSerializedPropertiesInInspector]
+#endif
+
+ public abstract class SerializedStateMachineBehaviour : StateMachineBehaviour, ISerializationCallbackReceiver
+ {
+ [SerializeField, HideInInspector]
+ private SerializationData serializationData;
+
+ void ISerializationCallbackReceiver.OnAfterDeserialize()
+ {
+ UnitySerializationUtility.DeserializeUnityObject(this, ref this.serializationData);
+ this.OnAfterDeserialize();
+ }
+
+ void ISerializationCallbackReceiver.OnBeforeSerialize()
+ {
+ this.OnBeforeSerialize();
+ UnitySerializationUtility.SerializeUnityObject(this, ref this.serializationData);
+ }
+
+ /// <summary>
+ /// Invoked after deserialization has taken place.
+ /// </summary>
+ protected virtual void OnAfterDeserialize()
+ {
+ }
+
+ /// <summary>
+ /// Invoked before serialization has taken place.
+ /// </summary>
+ protected virtual void OnBeforeSerialize()
+ {
+ }
+ }
+} \ No newline at end of file
diff --git a/VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/SerializedStateMachineBehaviour.cs.meta b/VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/SerializedStateMachineBehaviour.cs.meta
new file mode 100644
index 00000000..442e5312
--- /dev/null
+++ b/VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/SerializedStateMachineBehaviour.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: eefcd68a84ee7903b08c6254c17fafe3
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/SerializedUnityObject.cs b/VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/SerializedUnityObject.cs
new file mode 100644
index 00000000..86a75a75
--- /dev/null
+++ b/VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/SerializedUnityObject.cs
@@ -0,0 +1,60 @@
+//-----------------------------------------------------------------------
+// <copyright file="SerializedUnityObject.cs" company="Sirenix IVS">
+// Copyright (c) 2018 Sirenix IVS
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// </copyright>
+//-----------------------------------------------------------------------
+namespace VRC.Udon.Serialization.OdinSerializer
+{
+ using UnityEngine;
+
+ /// <summary>
+ /// A Unity ScriptableObject which is serialized by the Sirenix serialization system.
+ /// </summary>
+#if ODIN_INSPECTOR
+ [Sirenix.OdinInspector.ShowOdinSerializedPropertiesInInspector]
+#endif
+
+ public abstract class SerializedUnityObject : UnityEngine.Object, ISerializationCallbackReceiver
+ {
+ [SerializeField, HideInInspector]
+ private SerializationData serializationData;
+
+ void ISerializationCallbackReceiver.OnAfterDeserialize()
+ {
+ UnitySerializationUtility.DeserializeUnityObject(this, ref this.serializationData);
+ this.OnAfterDeserialize();
+ }
+
+ void ISerializationCallbackReceiver.OnBeforeSerialize()
+ {
+ this.OnBeforeSerialize();
+ UnitySerializationUtility.SerializeUnityObject(this, ref this.serializationData);
+ }
+
+ /// <summary>
+ /// Invoked after deserialization has taken place.
+ /// </summary>
+ protected virtual void OnAfterDeserialize()
+ {
+ }
+
+ /// <summary>
+ /// Invoked before serialization has taken place.
+ /// </summary>
+ protected virtual void OnBeforeSerialize()
+ {
+ }
+ }
+} \ No newline at end of file
diff --git a/VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/SerializedUnityObject.cs.meta b/VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/SerializedUnityObject.cs.meta
new file mode 100644
index 00000000..738d24b4
--- /dev/null
+++ b/VRCSDK3Worlds/Assets/Udon/Serialization/OdinSerializer/Unity Integration/SerializedUnityObjects/SerializedUnityObject.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: d62f7ab4e5aa075b819d6c71e929686b
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant: