Skip to content

Commit 0c1071d

Browse files
authored
Blob (#31)
* inspector editor of blob type by any serialize. * change namespace of blob editor * any blob enum and guid * organize serializable types. * move serialized blob into any serialize directory * fix .NET unit tests * remove entities package and upgrade oneshot package * bump versions
1 parent 7dec365 commit 0c1071d

File tree

81 files changed

+2775
-176
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

81 files changed

+2775
-176
lines changed

Assets/Samples/AnySerialize.Samples.asmdef

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
"rootNamespace": "",
44
"references": [
55
"GUID:3ea4545e70041684b9bbf08dd5c6e257",
6-
"GUID:c8a1986dcbf446bd9c54d4528d20455d"
6+
"GUID:c8a1986dcbf446bd9c54d4528d20455d",
7+
"GUID:599974ca26d96460ebaad074cd97a673",
8+
"GUID:734d92eba21c94caba915361bd5ac177"
79
],
810
"includePlatforms": [],
911
"excludePlatforms": [],
@@ -14,6 +16,12 @@
1416
],
1517
"autoReferenced": true,
1618
"defineConstraints": [],
17-
"versionDefines": [],
18-
"noEngineReferences": false
19+
"noEngineReferences": false,
20+
"versionDefines": [
21+
{
22+
"name": "com.unity.entities",
23+
"expression": "0.50.0",
24+
"define": "USE_UNITY_BLOB"
25+
}
26+
]
1927
}

Assets/Samples/Blob.prefab

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
%YAML 1.1
2+
%TAG !u! tag:unity3d.com,2011:
3+
--- !u!1 &8191402768809342334
4+
GameObject:
5+
m_ObjectHideFlags: 0
6+
m_CorrespondingSourceObject: {fileID: 0}
7+
m_PrefabInstance: {fileID: 0}
8+
m_PrefabAsset: {fileID: 0}
9+
serializedVersion: 6
10+
m_Component:
11+
- component: {fileID: 8191402768809342332}
12+
- component: {fileID: 8191402768809342335}
13+
m_Layer: 0
14+
m_Name: Blob
15+
m_TagString: Untagged
16+
m_Icon: {fileID: 0}
17+
m_NavMeshLayer: 0
18+
m_StaticEditorFlags: 0
19+
m_IsActive: 1
20+
--- !u!4 &8191402768809342332
21+
Transform:
22+
m_ObjectHideFlags: 0
23+
m_CorrespondingSourceObject: {fileID: 0}
24+
m_PrefabInstance: {fileID: 0}
25+
m_PrefabAsset: {fileID: 0}
26+
m_GameObject: {fileID: 8191402768809342334}
27+
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
28+
m_LocalPosition: {x: 0, y: 0, z: 0}
29+
m_LocalScale: {x: 1, y: 1, z: 1}
30+
m_ConstrainProportionsScale: 0
31+
m_Children: []
32+
m_Father: {fileID: 0}
33+
m_RootOrder: 0
34+
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
35+
--- !u!114 &8191402768809342335
36+
MonoBehaviour:
37+
m_ObjectHideFlags: 0
38+
m_CorrespondingSourceObject: {fileID: 0}
39+
m_PrefabInstance: {fileID: 0}
40+
m_PrefabAsset: {fileID: 0}
41+
m_GameObject: {fileID: 8191402768809342334}
42+
m_Enabled: 1
43+
m_EditorHideFlags: 0
44+
m_Script: {fileID: 11500000, guid: 2b3878c20b7d4036b59477e9e9b7fbdb, type: 3}
45+
m_Name:
46+
m_EditorClassIdentifier:
47+
<IntBlob>k__BackingField:
48+
_blob:
49+
_value: 123
50+
<IntPtrBlob>k__BackingField:
51+
_blob:
52+
_value:
53+
_value: 333
54+
<StringBlob>k__BackingField:
55+
_blob:
56+
_value: abc
57+
<StringArrayBlob>k__BackingField:
58+
_blob:
59+
_value:
60+
- _value: asd
61+
- _value: fds

Assets/Samples/Blob.prefab.meta

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Assets/Samples/Blobs.cs

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
#if USE_UNITY_BLOB
2+
3+
using System;
4+
using Unity.Entities;
5+
using UnityEngine;
6+
7+
namespace AnySerialize
8+
{
9+
[AnySerializable]
10+
public struct SampleBlob
11+
{
12+
public int Int;
13+
public BlobPtr<BlobString> StringPtr;
14+
public BlobString String;
15+
public BlobArray<long> LongArray;
16+
public BlobArray<BlobArray<BlobString>> StringArray2;
17+
}
18+
19+
public class Blobs : MonoBehaviour
20+
{
21+
[AnySerialize] public BlobAssetReference<int> IntBlob { get; }
22+
[AnySerialize] public BlobAssetReference<BlobPtr<int>> IntPtrBlob { get; }
23+
[AnySerialize] public BlobAssetReference<BlobString> StringBlob { get; }
24+
[AnySerialize] public BlobAssetReference<BlobArray<BlobString>> StringArrayBlob { get; }
25+
[AnySerialize] public BlobAssetReference<SampleBlob> SampleBlob { get; }
26+
[AnySerialize] public BlobAssetReference<ComponentType.AccessMode> AccessModeBlob { get; }
27+
[AnySerialize] public BlobAssetReference<Guid> GuidBlob { get; }
28+
29+
[ContextMenu(nameof(Print))]
30+
void Print()
31+
{
32+
Debug.Log($"{nameof(IntBlob)} = {IntBlob.Value}");
33+
Debug.Log($"{nameof(IntPtrBlob)} = {IntPtrBlob.Value.Value}");
34+
Debug.Log($"{nameof(StringBlob)} = {StringBlob.Value.ToString()}");
35+
var stringArray = new string[StringArrayBlob.Value.Length];
36+
for (var i = 0; i < stringArray.Length; i++) stringArray[i] = StringArrayBlob.Value[i].ToString();
37+
Debug.Log($"{nameof(StringArrayBlob)} = {string.Join(",", stringArray)}");
38+
}
39+
}
40+
}
41+
42+
#endif

Assets/Samples/Blobs.cs.meta

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Assets/Samples/SampleScene.unity

Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -419,6 +419,14 @@ PrefabInstance:
419419
m_Modification:
420420
m_TransformParent: {fileID: 0}
421421
m_Modifications:
422+
- target: {fileID: 6627706994549177333, guid: 84b605a26b44cb44189fb5d73e5d9644, type: 3}
423+
propertyPath: <NullableStruct>k__BackingField._value._field2._hasValue
424+
value: 0
425+
objectReference: {fileID: 0}
426+
- target: {fileID: 6627706994549177333, guid: 84b605a26b44cb44189fb5d73e5d9644, type: 3}
427+
propertyPath: <NullableStruct>k__BackingField._value._field3._hasValue
428+
value: 1
429+
objectReference: {fileID: 0}
422430
- target: {fileID: 8029738355953872035, guid: 84b605a26b44cb44189fb5d73e5d9644, type: 3}
423431
propertyPath: m_RootOrder
424432
value: 7
@@ -712,3 +720,124 @@ PrefabInstance:
712720
objectReference: {fileID: 0}
713721
m_RemovedComponents: []
714722
m_SourcePrefab: {fileID: 100100000, guid: 681b0ad2a6efaca44a075ad58220d7d3, type: 3}
723+
--- !u!1001 &8191402769477978850
724+
PrefabInstance:
725+
m_ObjectHideFlags: 0
726+
serializedVersion: 2
727+
m_Modification:
728+
m_TransformParent: {fileID: 0}
729+
m_Modifications:
730+
- target: {fileID: 8191402768809342332, guid: 068cfeddbd6134af9bd1bf549397d66d, type: 3}
731+
propertyPath: m_RootOrder
732+
value: 9
733+
objectReference: {fileID: 0}
734+
- target: {fileID: 8191402768809342332, guid: 068cfeddbd6134af9bd1bf549397d66d, type: 3}
735+
propertyPath: m_LocalPosition.x
736+
value: 0
737+
objectReference: {fileID: 0}
738+
- target: {fileID: 8191402768809342332, guid: 068cfeddbd6134af9bd1bf549397d66d, type: 3}
739+
propertyPath: m_LocalPosition.y
740+
value: 0
741+
objectReference: {fileID: 0}
742+
- target: {fileID: 8191402768809342332, guid: 068cfeddbd6134af9bd1bf549397d66d, type: 3}
743+
propertyPath: m_LocalPosition.z
744+
value: 0
745+
objectReference: {fileID: 0}
746+
- target: {fileID: 8191402768809342332, guid: 068cfeddbd6134af9bd1bf549397d66d, type: 3}
747+
propertyPath: m_LocalRotation.w
748+
value: 1
749+
objectReference: {fileID: 0}
750+
- target: {fileID: 8191402768809342332, guid: 068cfeddbd6134af9bd1bf549397d66d, type: 3}
751+
propertyPath: m_LocalRotation.x
752+
value: 0
753+
objectReference: {fileID: 0}
754+
- target: {fileID: 8191402768809342332, guid: 068cfeddbd6134af9bd1bf549397d66d, type: 3}
755+
propertyPath: m_LocalRotation.y
756+
value: 0
757+
objectReference: {fileID: 0}
758+
- target: {fileID: 8191402768809342332, guid: 068cfeddbd6134af9bd1bf549397d66d, type: 3}
759+
propertyPath: m_LocalRotation.z
760+
value: 0
761+
objectReference: {fileID: 0}
762+
- target: {fileID: 8191402768809342332, guid: 068cfeddbd6134af9bd1bf549397d66d, type: 3}
763+
propertyPath: m_LocalEulerAnglesHint.x
764+
value: 0
765+
objectReference: {fileID: 0}
766+
- target: {fileID: 8191402768809342332, guid: 068cfeddbd6134af9bd1bf549397d66d, type: 3}
767+
propertyPath: m_LocalEulerAnglesHint.y
768+
value: 0
769+
objectReference: {fileID: 0}
770+
- target: {fileID: 8191402768809342332, guid: 068cfeddbd6134af9bd1bf549397d66d, type: 3}
771+
propertyPath: m_LocalEulerAnglesHint.z
772+
value: 0
773+
objectReference: {fileID: 0}
774+
- target: {fileID: 8191402768809342334, guid: 068cfeddbd6134af9bd1bf549397d66d, type: 3}
775+
propertyPath: m_Name
776+
value: Blob
777+
objectReference: {fileID: 0}
778+
- target: {fileID: 8191402768809342335, guid: 068cfeddbd6134af9bd1bf549397d66d, type: 3}
779+
propertyPath: <GuidBlob>k__BackingField._blob._value
780+
value: 14963387-bbd6-4a30-9205-cce2cff65f75
781+
objectReference: {fileID: 0}
782+
- target: {fileID: 8191402768809342335, guid: 068cfeddbd6134af9bd1bf549397d66d, type: 3}
783+
propertyPath: <AccessModeBlob>k__BackingField._blob._value
784+
value: 2
785+
objectReference: {fileID: 0}
786+
- target: {fileID: 8191402768809342335, guid: 068cfeddbd6134af9bd1bf549397d66d, type: 3}
787+
propertyPath: <SampleBlob>k__BackingField._blob._field0._value
788+
value: 321
789+
objectReference: {fileID: 0}
790+
- target: {fileID: 8191402768809342335, guid: 068cfeddbd6134af9bd1bf549397d66d, type: 3}
791+
propertyPath: <SampleBlob>k__BackingField._blob._field2._value
792+
value: aaa
793+
objectReference: {fileID: 0}
794+
- target: {fileID: 8191402768809342335, guid: 068cfeddbd6134af9bd1bf549397d66d, type: 3}
795+
propertyPath: <SampleBlob>k__BackingField._blob._field1._value._value
796+
value: fff
797+
objectReference: {fileID: 0}
798+
- target: {fileID: 8191402768809342335, guid: 068cfeddbd6134af9bd1bf549397d66d, type: 3}
799+
propertyPath: <SampleBlob>k__BackingField._blob._field3._value.Array.size
800+
value: 2
801+
objectReference: {fileID: 0}
802+
- target: {fileID: 8191402768809342335, guid: 068cfeddbd6134af9bd1bf549397d66d, type: 3}
803+
propertyPath: <SampleBlob>k__BackingField._blob._field4._value.Array.size
804+
value: 2
805+
objectReference: {fileID: 0}
806+
- target: {fileID: 8191402768809342335, guid: 068cfeddbd6134af9bd1bf549397d66d, type: 3}
807+
propertyPath: <SampleBlob>k__BackingField._blob._field3._value.Array.data[0]._value
808+
value: 222
809+
objectReference: {fileID: 0}
810+
- target: {fileID: 8191402768809342335, guid: 068cfeddbd6134af9bd1bf549397d66d, type: 3}
811+
propertyPath: <SampleBlob>k__BackingField._blob._field3._value.Array.data[1]._value
812+
value: 1111
813+
objectReference: {fileID: 0}
814+
- target: {fileID: 8191402768809342335, guid: 068cfeddbd6134af9bd1bf549397d66d, type: 3}
815+
propertyPath: <SampleBlob>k__BackingField._blob._field4._value.Array.data[0]._value.Array.size
816+
value: 3
817+
objectReference: {fileID: 0}
818+
- target: {fileID: 8191402768809342335, guid: 068cfeddbd6134af9bd1bf549397d66d, type: 3}
819+
propertyPath: <SampleBlob>k__BackingField._blob._field4._value.Array.data[1]._value.Array.size
820+
value: 2
821+
objectReference: {fileID: 0}
822+
- target: {fileID: 8191402768809342335, guid: 068cfeddbd6134af9bd1bf549397d66d, type: 3}
823+
propertyPath: <SampleBlob>k__BackingField._blob._field4._value.Array.data[0]._value.Array.data[0]._value
824+
value: a
825+
objectReference: {fileID: 0}
826+
- target: {fileID: 8191402768809342335, guid: 068cfeddbd6134af9bd1bf549397d66d, type: 3}
827+
propertyPath: <SampleBlob>k__BackingField._blob._field4._value.Array.data[0]._value.Array.data[1]._value
828+
value: b
829+
objectReference: {fileID: 0}
830+
- target: {fileID: 8191402768809342335, guid: 068cfeddbd6134af9bd1bf549397d66d, type: 3}
831+
propertyPath: <SampleBlob>k__BackingField._blob._field4._value.Array.data[0]._value.Array.data[2]._value
832+
value: c
833+
objectReference: {fileID: 0}
834+
- target: {fileID: 8191402768809342335, guid: 068cfeddbd6134af9bd1bf549397d66d, type: 3}
835+
propertyPath: <SampleBlob>k__BackingField._blob._field4._value.Array.data[1]._value.Array.data[0]._value
836+
value: d
837+
objectReference: {fileID: 0}
838+
- target: {fileID: 8191402768809342335, guid: 068cfeddbd6134af9bd1bf549397d66d, type: 3}
839+
propertyPath: <SampleBlob>k__BackingField._blob._field4._value.Array.data[1]._value.Array.data[1]._value
840+
value: e
841+
objectReference: {fileID: 0}
842+
m_RemovedComponents: []
843+
m_SourcePrefab: {fileID: 100100000, guid: 068cfeddbd6134af9bd1bf549397d66d, type: 3}

Packages/com.quabug.any-processor/CodeGen/Extension/TypeGenericExtension.cs

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -101,10 +101,18 @@ static bool IsArgumentMatch(TypeReference genericArgument, GenericParameter gene
101101
{
102102
if (!genericParameter.HasConstraints) return true;
103103
if (genericArgument.IsGenericParameter) return true;
104-
return genericParameter.Constraints!
105-
.Select(constraint => constraint.ConstraintType)
106-
.All(genericArgument.IsDerivedFrom)
107-
;
104+
foreach (var constraint in genericParameter.Constraints!)
105+
{
106+
var constraintType = constraint.ConstraintType;
107+
if (constraintType is RequiredModifierType requiredModifierType)
108+
{
109+
constraintType = requiredModifierType.ElementType;
110+
// TODO: check unmanaged constraint
111+
}
112+
113+
if (!genericArgument.IsDerivedFrom(constraintType)) return false;
114+
}
115+
return true;
108116
}
109117
}
110118

@@ -118,11 +126,9 @@ public static bool IsDerivedFrom(this TypeReference derived, TypeReference @base
118126
return derivedArray.Rank == baseArray.Rank && derivedArray.ElementType.IsDerivedFrom(baseArray.ElementType);
119127
if (derived.IsArray || @base.IsArray) return false;
120128
if (!derived.Resolve()!.IsDerivedFrom(@base.Resolve()!)) return false;
121-
if (derived.GetGenericParametersOrArgumentsCount() != @base.GetGenericParametersOrArgumentsCount()) return false;
122-
return derived.GetGenericParametersOrArguments()
123-
.Zip(@base.GetGenericParametersOrArguments(), (d, b) => (d, b))
124-
.All(t => t.d.TypeEquals(t.b))
125-
;
129+
if (@base.GetGenericParametersOrArgumentsCount() == 0) return true;
130+
if (derived.GetGenericParametersOrArgumentsCount() == 0) return true;
131+
return derived.GetSelfAndAllBasesAndInterfacesWithConcreteGenericType().Any(type => type.TypeEquals(@base));
126132
}
127133

128134
[Pure]
@@ -203,7 +209,7 @@ public static TypeReference FillGenericTypesByReferenceGenericIndex(this TypeRef
203209
[Pure]
204210
public static TypeReference FillGenericTypesByReferenceGenericName(this TypeReference self, GenericInstanceType referenceGeneric)
205211
{
206-
return self.FillGenericTypesByReferenceGenericName(referenceGeneric.ElementType!.GenericParameters!, referenceGeneric.GenericArguments!);
212+
return self.FillGenericTypesByReferenceGenericName(referenceGeneric.Resolve()!.GenericParameters!, referenceGeneric.GenericArguments!);
207213
}
208214

209215
[Pure]

Packages/com.quabug.any-processor/CodeGen/Extension/TypeHierarchyExtension.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,5 +92,17 @@ public static IEnumerable<TypeReference> GetSelfAndAllBasesWithConcreteGenericTy
9292
yield return self;
9393
}
9494
}
95+
96+
[Pure]
97+
public static IEnumerable<TypeReference> GetSelfAndAllBasesAndInterfacesWithConcreteGenericType(this TypeReference type)
98+
{
99+
var self = type;
100+
yield return self;
101+
foreach (var @base in type.Resolve().GetAllBasesAndInterfaces())
102+
{
103+
self = self is GenericInstanceType genericInstanceType ? @base.FillGenericTypesByReferenceGenericName(genericInstanceType) : @base;
104+
yield return self;
105+
}
106+
}
95107
}
96108
}

Packages/com.quabug.any-processor/README.md.meta

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Packages/com.quabug.any-processor/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "com.quabug.any-processor",
3-
"version": "0.1.4",
3+
"version": "0.1.5",
44
"unity": "2021.3",
55
"displayName": "AnyProcessor",
66
"type": "library",

0 commit comments

Comments
 (0)