From 5371c0473c7b9f290a771d9d297e7b2e770d4605 Mon Sep 17 00:00:00 2001 From: Mikhail <99481254+DCFApixels@users.noreply.github.com> Date: Sun, 12 Mar 2023 20:45:18 +0800 Subject: [PATCH] testing --- src/Builtin/InjectProcessor.cs | 2 +- src/Builtin/Runners.cs | 8 ++--- src/EcsFilter.cs | 51 +++++++++++++--------------- src/EcsSession.cs | 17 ++++------ src/EcsWorld.cs | 50 +++++++++++++++++++++++++-- src/React/EcsRunner.cs | 30 +++++++++------- test/Components.meta | 8 +++++ test/Components/EnemyTag.cs | 7 ++++ test/Components/EnemyTag.cs.meta | 11 ++++++ test/Components/PlayerTag.cs | 12 +++++++ test/Components/PlayerTag.cs.meta | 11 ++++++ test/Components/TransfromCom.cs | 14 ++++++++ test/Components/TransfromCom.cs.meta | 11 ++++++ test/Components/Velocity.cs | 14 ++++++++ test/Components/Velocity.cs.meta | 11 ++++++ test/Components/View.cs | 14 ++++++++ test/Components/View.cs.meta | 11 ++++++ test/SharedData.cs | 4 +++ test/Startup.cs | 7 +++- test/TestSystem.cs | 37 +++++++++++++------- test/VelocitySystem.cs | 21 ++++++++++++ test/VelocitySystem.cs.meta | 11 ++++++ test/ViewSystem.cs | 22 ++++++++++++ test/ViewSystem.cs.meta | 11 ++++++ 24 files changed, 325 insertions(+), 70 deletions(-) create mode 100644 test/Components.meta create mode 100644 test/Components/EnemyTag.cs create mode 100644 test/Components/EnemyTag.cs.meta create mode 100644 test/Components/PlayerTag.cs create mode 100644 test/Components/PlayerTag.cs.meta create mode 100644 test/Components/TransfromCom.cs create mode 100644 test/Components/TransfromCom.cs.meta create mode 100644 test/Components/Velocity.cs create mode 100644 test/Components/Velocity.cs.meta create mode 100644 test/Components/View.cs create mode 100644 test/Components/View.cs.meta create mode 100644 test/VelocitySystem.cs create mode 100644 test/VelocitySystem.cs.meta create mode 100644 test/ViewSystem.cs create mode 100644 test/ViewSystem.cs.meta diff --git a/src/Builtin/InjectProcessor.cs b/src/Builtin/InjectProcessor.cs index cb887de..eb0c2f4 100644 --- a/src/Builtin/InjectProcessor.cs +++ b/src/Builtin/InjectProcessor.cs @@ -6,7 +6,7 @@ using System.Threading.Tasks; namespace DCFApixels.DragonECS { - public interface IEcsInject : IEcsProcessor + public interface IEcsInject : IEcsSystem { public void Inject(T obj); } diff --git a/src/Builtin/Runners.cs b/src/Builtin/Runners.cs index 53b25cf..d90a053 100644 --- a/src/Builtin/Runners.cs +++ b/src/Builtin/Runners.cs @@ -1,18 +1,18 @@ namespace DCFApixels.DragonECS { - public interface IEcsPreInitSystem : IEcsProcessor + public interface IEcsPreInitSystem : IEcsSystem { public void PreInit(EcsSession session); } - public interface IEcsInitSystem : IEcsProcessor + public interface IEcsInitSystem : IEcsSystem { public void Init(EcsSession session); } - public interface IEcsRunSystem : IEcsProcessor + public interface IEcsRunSystem : IEcsSystem { public void Run(EcsSession session); } - public interface IEcsDestroySystem : IEcsProcessor + public interface IEcsDestroySystem : IEcsSystem { public void Destroy(EcsSession session); } diff --git a/src/EcsFilter.cs b/src/EcsFilter.cs index da03b2e..8e8e643 100644 --- a/src/EcsFilter.cs +++ b/src/EcsFilter.cs @@ -110,11 +110,13 @@ namespace DCFApixels.DragonECS internal static int capacity = 512; protected BakedMask(int[] inc, int[] exc, Mask mask) : base(inc, exc, mask) { } + + } public sealed class BakedMask : BakedMask where TWorldArchetype : IWorldArchetype - where TMask : MaskSingleton + where TMask : Mask, new() { public static readonly int uniqueID; @@ -127,6 +129,7 @@ namespace DCFApixels.DragonECS #endif if (increment > capacity) capacity <<= 1; + _instance = new BakedMask(); } @@ -136,19 +139,17 @@ namespace DCFApixels.DragonECS MaskSingleton.Instance) { } - private static readonly BakedMask _instance = new BakedMask(); + private static readonly BakedMask _instance; public static BakedMask Instance { [MethodImpl(MethodImplOptions.AggressiveInlining)] get => _instance; } - internal override int UniqueID { [MethodImpl(MethodImplOptions.AggressiveInlining)] get => uniqueID; } - internal override Type WorldArchetypeType { [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -164,47 +165,43 @@ namespace DCFApixels.DragonECS internal abstract int[] MakeExc() where TWorldArchetype : IWorldArchetype; public abstract BakedMask GetBaked() where TWorldArchetype : IWorldArchetype; } - public abstract class MaskSingleton : Mask - where TSelf : Mask + public abstract class MaskSingleton + where TSelf : Mask, new() { - protected static TSelf _instance; + protected static TSelf _instance = new TSelf(); internal static TSelf Instance { [MethodImpl(MethodImplOptions.AggressiveInlining)] get => _instance; } } - - public class Mask : MaskSingleton> - where TInc : struct, IInc + public class Mask : Mask where TInc : struct, IInc { [MethodImpl(MethodImplOptions.AggressiveInlining)] - internal override int[] MakeInc() => new TInc().GetComponentsIDs(); + internal override int[] MakeInc() => new TInc().GetComponentsIDs().Sort(); [MethodImpl(MethodImplOptions.AggressiveInlining)] internal override int[] MakeExc() => Array.Empty(); [MethodImpl(MethodImplOptions.AggressiveInlining)] - public override BakedMask GetBaked() - { - return BakedMask>.Instance; - } - - static Mask() { _instance = new Mask(); } + public override BakedMask GetBaked() => BakedMask>.Instance; } - public class Mask : MaskSingleton> - where TInc : struct, IInc - where TExc : struct, IExc + public class Mask : Mask where TInc : struct, IInc where TExc : struct, IExc { [MethodImpl(MethodImplOptions.AggressiveInlining)] - internal override int[] MakeInc() => new TInc().GetComponentsIDs(); + internal override int[] MakeInc() => new TInc().GetComponentsIDs().Sort(); [MethodImpl(MethodImplOptions.AggressiveInlining)] - internal override int[] MakeExc() => new TExc().GetComponentsIDs(); + internal override int[] MakeExc() => new TExc().GetComponentsIDs().Sort(); [MethodImpl(MethodImplOptions.AggressiveInlining)] - public override BakedMask GetBaked() - { - return BakedMask>.Instance; - } + public override BakedMask GetBaked() => BakedMask>.Instance; + } - static Mask() { _instance = new Mask(); } + internal static class ArrayExt + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal static T[] Sort(this T[] self) + { + Array.Sort(self); + return self; + } } #endregion diff --git a/src/EcsSession.cs b/src/EcsSession.cs index 63f580c..5b63fff 100644 --- a/src/EcsSession.cs +++ b/src/EcsSession.cs @@ -40,8 +40,8 @@ namespace DCFApixels.DragonECS private int _id; - private readonly List _allSystems; - private ReadOnlyCollection _allSystemsSealed; + private readonly List _allSystems; + private ReadOnlyCollection _allSystemsSealed; private bool _isInit = false; private bool _isDestoryed = false; @@ -53,19 +53,19 @@ namespace DCFApixels.DragonECS private readonly EcsWorldMap _worldMap; #region Properties - public ReadOnlyCollection AllProcessors => _allSystemsSealed; + public ReadOnlyCollection AllProcessors => _allSystemsSealed; #endregion public EcsSession() { - _allSystems = new List(128); + _allSystems = new List(128); _runners = new Dictionary(); _worldMap = new EcsWorldMap(); } - #region React Runners/Messengers - public T GetRunner() where T : IEcsProcessor + #region Runners + public T GetRunner() where T : IEcsSystem { Type type = typeof(T); if (_runners.TryGetValue(type, out IEcsRunner result)) @@ -79,7 +79,7 @@ namespace DCFApixels.DragonECS #endregion #region Configuration - public EcsSession Add(IEcsProcessor system) + public EcsSession Add(IEcsSystem system) { CheckInitForMethod(nameof(AddWorld)); _allSystems.Add(system); @@ -92,7 +92,6 @@ namespace DCFApixels.DragonECS _worldMap.Add(world, name); return this; } - #endregion #region LifeCycle @@ -155,8 +154,6 @@ namespace DCFApixels.DragonECS } #endregion - - #region Utils #endregion } diff --git a/src/EcsWorld.cs b/src/EcsWorld.cs index 643cbf7..58226e1 100644 --- a/src/EcsWorld.cs +++ b/src/EcsWorld.cs @@ -21,7 +21,8 @@ namespace DCFApixels.DragonECS #endregion public EcsPool GetPool() where T : struct; - public EcsFilter GetFilter() where TMask : MaskSingleton; + public EcsFilter GetFilter() where TInc : struct, IInc; + public EcsFilter GetFilter() where TInc : struct, IInc where TExc : struct, IExc; public ent NewEntity(); public void Destroy(); @@ -74,8 +75,11 @@ namespace DCFApixels.DragonECS { _entityDispenser = new IntDispenser(); _pools = new IEcsPool[512]; + _gens = new short[512]; _filters = new EcsFilter[64]; _entities = new EcsGroup(this, 512); + _filtersByIncludedComponents = new List[16]; + _filtersByExcludedComponents = new List[16]; } #endregion @@ -100,7 +104,16 @@ namespace DCFApixels.DragonECS #endregion #region GetFilter - public EcsFilter GetFilter() where TMask : MaskSingleton + + public EcsFilter GetFilter() where TInc : struct, IInc + { + return GetFilterInternal>(); + } + public EcsFilter GetFilter() where TInc : struct, IInc where TExc : struct, IExc + { + return GetFilterInternal>(); + } + private EcsFilter GetFilterInternal() where TMask : Mask, new() { var bakedmask = BakedMask.Instance; @@ -111,10 +124,41 @@ namespace DCFApixels.DragonECS if (_filters[bakedmask.UniqueID] == null) { - _filters[bakedmask.UniqueID] = new EcsFilter(this, bakedmask, 512); + _filters[bakedmask.UniqueID] = NewFilter(bakedmask); } return _filters[bakedmask.UniqueID]; } + + private EcsFilter NewFilter(BakedMask mask, int capacirty = 512) + { + var newFilter = new EcsFilter(this, mask, capacirty); + + for (int i = 0; i < mask.IncCount; i++) + { + int poolid = mask.Inc[i]; + var list = _filtersByIncludedComponents[poolid]; + if (list == null) + { + list = new List(8); + _filtersByIncludedComponents[poolid] = list; + } + list.Add(newFilter); + } + + for (int i = 0; i < mask.ExcCount; i++) + { + int poolid = mask.Exc[i]; + var list = _filtersByExcludedComponents[poolid]; + if (list == null) + { + list = new List(8); + _filtersByExcludedComponents[poolid] = list; + } + list.Add(newFilter); + } + + return newFilter; + } #endregion #region IsMaskCompatible/IsMaskCompatibleWithout diff --git a/src/React/EcsRunner.cs b/src/React/EcsRunner.cs index 0ead8cf..300ce85 100644 --- a/src/React/EcsRunner.cs +++ b/src/React/EcsRunner.cs @@ -16,13 +16,19 @@ namespace DCFApixels.DragonECS this.interfaceType = interfaceType; this.filter = filter; } + + public EcsRunnerFilterAttribute(object filter) + { + interfaceType = null; + this.filter = filter; + } } - public interface IEcsProcessor { } + public interface IEcsSystem { } public static class IEcsProcessorExtensions { - public static bool IsRunner(this IEcsProcessor self) + public static bool IsRunner(this IEcsSystem self) { return self is IEcsRunner; } @@ -59,7 +65,7 @@ namespace DCFApixels.DragonECS _runnerTypes = new Dictionary(); foreach (var item in newRunnerTypes) { - Type intrf = item.GetInterfaces().Where(o => o != typeof(IEcsRunner) && o != typeof(IEcsProcessor)).First(); //TODO оптимизировать это место + Type intrf = item.GetInterfaces().Where(o => o != typeof(IEcsRunner) && o != typeof(IEcsSystem)).First(); //TODO оптимизировать это место _runnerTypes.Add(intrf.GUID, item); } @@ -84,7 +90,7 @@ namespace DCFApixels.DragonECS [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static void InitFor() where TInterface : IEcsProcessor + public static void InitFor() where TInterface : IEcsSystem { Type interfaceType = typeof(TInterface); Type nonGenericInterfaceType = interfaceType; @@ -109,8 +115,8 @@ namespace DCFApixels.DragonECS public interface IEcsRunner { } - public abstract class EcsRunner : IEcsProcessor, IEcsRunner - where TInterface : IEcsProcessor + public abstract class EcsRunner : IEcsSystem, IEcsRunner + where TInterface : IEcsSystem { internal static void Init(Type subclass) { @@ -128,19 +134,19 @@ namespace DCFApixels.DragonECS { throw new ArgumentException($"{typeof(TInterface).FullName} is not interface"); } - if (interfaces.Length != 1 || interfaces[0] != typeof(IEcsProcessor)) + if (interfaces.Length != 1 || interfaces[0] != typeof(IEcsSystem)) { - throw new ArgumentException($"{typeof(TInterface).FullName} does not directly inherit the {nameof(IEcsProcessor)} interface"); + throw new ArgumentException($"{typeof(TInterface).FullName} does not directly inherit the {nameof(IEcsSystem)} interface"); } #endif _subclass = subclass; } - public static TInterface Instantiate(IEnumerable targets, object filter) + public static TInterface Instantiate(IEnumerable targets, object filter) { Type interfaceType = typeof(TInterface); - IEnumerable newTargets; + IEnumerable newTargets; if (filter != null) { @@ -163,7 +169,7 @@ namespace DCFApixels.DragonECS return Instantiate(newTargets.Select(o => (TInterface)o).ToArray()); } - public static TInterface Instantiate(IEnumerable targets) + public static TInterface Instantiate(IEnumerable targets) { return Instantiate(targets.Where(o => o is TInterface).Select(o => (TInterface)o).ToArray()); } @@ -173,7 +179,7 @@ namespace DCFApixels.DragonECS EcsRunnerActivator.InitFor(); var instance = (EcsRunner)Activator.CreateInstance(_subclass); - return (TInterface)(IEcsProcessor)instance.Set(targets); + return (TInterface)(IEcsSystem)instance.Set(targets); } private static Type _subclass; diff --git a/test/Components.meta b/test/Components.meta new file mode 100644 index 0000000..9c37766 --- /dev/null +++ b/test/Components.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 44bc1d65f4a37af4fb55621ae2da09be +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/test/Components/EnemyTag.cs b/test/Components/EnemyTag.cs new file mode 100644 index 0000000..0bbe577 --- /dev/null +++ b/test/Components/EnemyTag.cs @@ -0,0 +1,7 @@ + +namespace DCFApixels.DragonECS +{ + public struct EnemyTag + { + } +} diff --git a/test/Components/EnemyTag.cs.meta b/test/Components/EnemyTag.cs.meta new file mode 100644 index 0000000..ca97167 --- /dev/null +++ b/test/Components/EnemyTag.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c7100cf6b7909824ba4ffcd869e64167 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/test/Components/PlayerTag.cs b/test/Components/PlayerTag.cs new file mode 100644 index 0000000..7f52051 --- /dev/null +++ b/test/Components/PlayerTag.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DCFApixels.DragonECS +{ + public struct PlayerTag + { + } +} diff --git a/test/Components/PlayerTag.cs.meta b/test/Components/PlayerTag.cs.meta new file mode 100644 index 0000000..08847d8 --- /dev/null +++ b/test/Components/PlayerTag.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 730345f3f95800a4dbd182950d4e9f19 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/test/Components/TransfromCom.cs b/test/Components/TransfromCom.cs new file mode 100644 index 0000000..93669f3 --- /dev/null +++ b/test/Components/TransfromCom.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using UnityEngine; + +namespace DCFApixels.DragonECS +{ + public struct TransfromCom + { + public Vector3 position; + } +} diff --git a/test/Components/TransfromCom.cs.meta b/test/Components/TransfromCom.cs.meta new file mode 100644 index 0000000..b8d4de8 --- /dev/null +++ b/test/Components/TransfromCom.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8c391c96db013de4780ce5e87c015fa1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/test/Components/Velocity.cs b/test/Components/Velocity.cs new file mode 100644 index 0000000..9783525 --- /dev/null +++ b/test/Components/Velocity.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using UnityEngine; + +namespace DCFApixels.DragonECS +{ + public struct Velocity + { + public Vector3 value; + } +} diff --git a/test/Components/Velocity.cs.meta b/test/Components/Velocity.cs.meta new file mode 100644 index 0000000..2478ef7 --- /dev/null +++ b/test/Components/Velocity.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8a819836b0a5354408897f028b67504c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/test/Components/View.cs b/test/Components/View.cs new file mode 100644 index 0000000..e5e7b46 --- /dev/null +++ b/test/Components/View.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using UnityEngine; + +namespace DCFApixels.DragonECS +{ + public struct View + { + public Transform Ref; + } +} diff --git a/test/Components/View.cs.meta b/test/Components/View.cs.meta new file mode 100644 index 0000000..5509e04 --- /dev/null +++ b/test/Components/View.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: df980941b94b3864c81750c212259b8f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/test/SharedData.cs b/test/SharedData.cs index 4c3f091..3fc449e 100644 --- a/test/SharedData.cs +++ b/test/SharedData.cs @@ -3,10 +3,14 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using UnityEngine; namespace DCFApixels.DragonECS { + [Serializable] public class SharedData { + public Transform view1; + public Transform view2; } } diff --git a/test/Startup.cs b/test/Startup.cs index 1730c2d..f2ee0b1 100644 --- a/test/Startup.cs +++ b/test/Startup.cs @@ -9,13 +9,18 @@ namespace DCFApixels.DragonECS { private EcsSession _ecsSession; + + [SerializeField] public SharedData _data = new SharedData(); private void Start() { _ecsSession = new EcsSession() - .Add(new TestSystem()) .Inject(_data) + .AddWorld(new EcsWorld()) + .Add(new TestSystem()) + .Add(new VelocitySystem()) + .Add(new ViewSystem()) .Init(); } diff --git a/test/TestSystem.cs b/test/TestSystem.cs index 50b9456..2cc0aec 100644 --- a/test/TestSystem.cs +++ b/test/TestSystem.cs @@ -1,28 +1,41 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Text; -using System.Threading.Tasks; using UnityEngine; namespace DCFApixels.DragonECS { - public class TestSystem : IEcsInject, IEcsSimpleCycleSystem + public class TestSystem : IEcsInject, IEcsInject, IEcsInitSystem { private SharedData _sharedData; + private EcsWorld _world; public void Inject(SharedData obj) => _sharedData = obj; + public void Inject(EcsWorldMap obj) { _world = obj.Get(); } public void Init(EcsSession session) { - Debug.Log("Init"); - } - public void Run(EcsSession session) - { - Debug.Log("Run"); - } - public void Destroy(EcsSession session) - { - Debug.Log("Destroy"); + var x1 = _world.GetFilter>(); + var x2 = _world.GetFilter>(); + var x3 = _world.GetFilter>(); + var x4 = _world.GetFilter>(); + var x5 = _world.GetFilter>(); + + int has1 = x1.GetHashCode(); + int has2 = x2.GetHashCode(); + int has3 = x3.GetHashCode(); + int has4 = x4.GetHashCode(); + int has5 = x5.GetHashCode(); + + var e = _world.NewEntity(); + e.Write().position = Vector3.zero; + e.Write().Ref = _sharedData.view1; + e.Write(); + + e = _world.NewEntity(); + e.Write().position = Vector3.zero; + e.Write().value = Vector3.one; + e.Write().Ref = _sharedData.view2; + e.Write(); } } } diff --git a/test/VelocitySystem.cs b/test/VelocitySystem.cs new file mode 100644 index 0000000..ebd3b23 --- /dev/null +++ b/test/VelocitySystem.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; + +namespace DCFApixels.DragonECS +{ + public class VelocitySystem : IEcsInject, IEcsRunSystem + { + private EcsWorld _world; + public void Inject(EcsWorldMap obj) { _world = obj.Get(); } + + public void Run(EcsSession session) + { + foreach (var item in _world.GetFilter>().Entities) + { + item.Write().position += item.Read().value * Time.deltaTime; + } + } + } +} diff --git a/test/VelocitySystem.cs.meta b/test/VelocitySystem.cs.meta new file mode 100644 index 0000000..c62d03a --- /dev/null +++ b/test/VelocitySystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 447778e02b3f0f8409c44680de9dbc0e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/test/ViewSystem.cs b/test/ViewSystem.cs new file mode 100644 index 0000000..cb7c5d3 --- /dev/null +++ b/test/ViewSystem.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; + +namespace DCFApixels.DragonECS +{ + public class ViewSystem : IEcsInject, IEcsRunSystem + { + private EcsWorld _world; + public void Inject(EcsWorldMap obj) { _world = obj.Get(); } + + public void Run(EcsSession session) + { + foreach (var item in _world.GetFilter>().Entities) + { + item.Write().Ref.position = item.Read().position; + } + } + + } +} diff --git a/test/ViewSystem.cs.meta b/test/ViewSystem.cs.meta new file mode 100644 index 0000000..e77c537 --- /dev/null +++ b/test/ViewSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 780f70f4504a08b45b58c4fe891b894f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: