diff --git a/Assets/Sample/MyMonoBehavior.cs b/Assets/Sample/MyMonoBehavior.cs index 0e17e41..df22cab 100644 --- a/Assets/Sample/MyMonoBehavior.cs +++ b/Assets/Sample/MyMonoBehavior.cs @@ -8,4 +8,8 @@ public class MyMonoBehavior : MonoBehaviour { [GenericSerializeReference] public IMyInterface Value { get; set; } + + [GenericSerializeReference("_serialized")] + public IMyInterface Foo { get; set; } + private int __Foo; } \ No newline at end of file diff --git a/Assets/Sample/Test.unity b/Assets/Sample/Test.unity index 242df0f..fc49b1b 100644 --- a/Assets/Sample/Test.unity +++ b/Assets/Sample/Test.unity @@ -153,19 +153,19 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 3a000e60ca5341d5a1f7805ac73274e1, type: 3} m_Name: m_EditorClassIdentifier: - _IntFloat: + __IntFloat: id: 0 - _FloatInt: + __FloatInt: id: 1 - _IntInt: + __IntInt: id: 2 - _Int: + __Int: id: 3 - _Double: + __Double: id: 4 - _IntObject: + __IntObject: id: 5 - _IntIntObject: + __IntIntObject: id: 6 references: version: 1 @@ -174,23 +174,22 @@ MonoBehaviour: data: V: 0 00000001: - type: {class: TestMonoBehavior/__generic_serialize_reference/NonGeneric, ns: GenericSerializeReference.Sample, asm: GenericSerializeReference.Sample} + type: {class: TestMonoBehavior/__generic_serialize_reference/SubObject, ns: GenericSerializeReference.Sample, asm: GenericSerializeReference.Sample} data: ValueT: 0 ValueU: 0 - ValueDouble: 0 + SubValueT: [] + SubValueU: 00000002: - type: {class: TestMonoBehavior/__generic_serialize_reference/SubObject, ns: GenericSerializeReference.Sample, asm: GenericSerializeReference.Sample} + type: {class: TestMonoBehavior/__generic_serialize_reference/PartialObject, ns: GenericSerializeReference.Sample, asm: GenericSerializeReference.Sample} data: ValueT: 0 ValueU: 0 - SubValueT: - SubValueU: + ValueDouble: 0 00000003: - type: {class: TestMonoBehavior/__generic_serialize_reference/SubObject, ns: GenericSerializeReference.Sample, asm: GenericSerializeReference.Sample} + type: {class: TestMonoBehavior/__generic_serialize_reference/Object, ns: GenericSerializeReference.Sample, asm: GenericSerializeReference.Sample} data: Value: 0 - SubValue: 00000004: type: {class: TestMonoBehavior/__generic_serialize_reference/SubObject, ns: GenericSerializeReference.Sample, asm: GenericSerializeReference.Sample} data: @@ -202,11 +201,12 @@ MonoBehaviour: Value: 0 SubValue: 00000006: - type: {class: TestMonoBehavior/__generic_serialize_reference/PartialObject, ns: GenericSerializeReference.Sample, asm: GenericSerializeReference.Sample} + type: {class: TestMonoBehavior/__generic_serialize_reference/SubObject, ns: GenericSerializeReference.Sample, asm: GenericSerializeReference.Sample} data: ValueT: 0 ValueU: 0 - ValueDouble: 0 + SubValueT: + SubValueU: --- !u!4 &366887100 Transform: m_ObjectHideFlags: 0 @@ -233,9 +233,13 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 810f573826344204a49b76ad339a67e3, type: 3} m_Name: m_EditorClassIdentifier: - _Value: + __Value: id: 0 + _serializedFoo: + id: 1 references: version: 1 00000000: type: {class: MyMonoBehavior/__generic_serialize_reference/MyIntObject, ns: , asm: GenericSerializeReference.Sample} + 00000001: + type: {class: MyMonoBehavior/__generic_serialize_reference/MyIntObject, ns: , asm: GenericSerializeReference.Sample} diff --git a/Assets/Sample/TestSO.asset b/Assets/Sample/TestSO.asset index f80a0da..8ef7932 100644 --- a/Assets/Sample/TestSO.asset +++ b/Assets/Sample/TestSO.asset @@ -12,7 +12,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 12c1653695b84d9489cbf7948c3d8d27, type: 3} m_Name: TestSO m_EditorClassIdentifier: - _IntFloat: + __IntFloat: id: 0 references: version: 1 diff --git a/Packages/generic-serialize-reference/Editor/GenericSerializeReferencePostProcessor.cs b/Packages/generic-serialize-reference/Editor/GenericSerializeReferencePostProcessor.cs index ffad7dd..6a08553 100644 --- a/Packages/generic-serialize-reference/Editor/GenericSerializeReferencePostProcessor.cs +++ b/Packages/generic-serialize-reference/Editor/GenericSerializeReferencePostProcessor.cs @@ -85,7 +85,8 @@ from attribute in GetAttributesOf(property) var serializedFieldInterface = CreateWrapperClass(property); logger.Info($"generate nested class with interface {serializedFieldInterface.FullName}"); - var serializedField = CreateSerializeReferenceField(property, serializedFieldInterface); + var fieldNamePrefix = (string)attribute.ConstructorArguments[0].Value; + var serializedField = CreateSerializeReferenceField(property, serializedFieldInterface, fieldNamePrefix); InjectGetter(property, serializedField); InjectSetter(property, serializedField); modified = true; @@ -135,13 +136,13 @@ void InjectSetter(PropertyDefinition property, FieldDefinition serializedField) instructions.Insert(retIndex + 2, Instruction.Create(OpCodes.Stfld, serializedField)); } - FieldDefinition CreateSerializeReferenceField(PropertyDefinition property, TypeReference @interface) + FieldDefinition CreateSerializeReferenceField(PropertyDefinition property, TypeReference @interface, string namePrefix) { //.field private class GenericSerializeReference.Tests.TestMonoBehavior/__generic_serialize_reference_GenericInterface__/IBase _GenericInterface // .custom instance void [UnityEngine.CoreModule]UnityEngine.SerializeReference::.ctor() // = (01 00 00 00 ) var serializedField = new FieldDefinition( - $"_{property.Name}" + $"{namePrefix}{property.Name}" , FieldAttributes.Private , @interface ); diff --git a/Packages/generic-serialize-reference/Runtime/GenericSerializeReferenceAttribute.cs b/Packages/generic-serialize-reference/Runtime/GenericSerializeReferenceAttribute.cs index 53e5c0d..bf66999 100644 --- a/Packages/generic-serialize-reference/Runtime/GenericSerializeReferenceAttribute.cs +++ b/Packages/generic-serialize-reference/Runtime/GenericSerializeReferenceAttribute.cs @@ -5,6 +5,8 @@ namespace GenericSerializeReference [AttributeUsage(AttributeTargets.Property)] public class GenericSerializeReferenceAttribute : Attribute { - public string SerializedFieldPrefix = "_"; + public string SerializedFieldPrefix { get; } + public GenericSerializeReferenceAttribute(string serializedFieldPrefix = "__") => + SerializedFieldPrefix = serializedFieldPrefix; } } \ No newline at end of file diff --git a/Packages/generic-serialize-reference/package.json b/Packages/generic-serialize-reference/package.json index 3c347c6..316e92e 100644 --- a/Packages/generic-serialize-reference/package.json +++ b/Packages/generic-serialize-reference/package.json @@ -1,7 +1,7 @@ { "name": "com.quabug.generic-serialize-reference", "description": "Automatically alter generic field of SerializeReference into its non-generic form", - "version": "1.0.1", + "version": "1.1.0", "unity": "2020.2", "displayName": "GenericSerializeReference", "samples": [