Ejemplo n.º 1
0
        public static void CopyUdonToProxy(UdonSharpBehaviour proxy, ProxySerializationPolicy serializationPolicy)
        {
            if (serializationPolicy.MaxSerializationDepth == 0)
            {
                return;
            }

            UdonSharpProgramAsset programAsset = GetUdonSharpProgramAsset(proxy);

            if (programAsset.ScriptVersion < UdonSharpProgramVersion.CurrentVersion)
            {
                throw new InvalidOperationException($"Cannot run serialization on U# behaviour '{proxy}' with outdated script version, wait until program assets have compiled.");
            }

            if (programAsset.CompiledVersion < UdonSharpProgramVersion.CurrentVersion)
            {
                throw new InvalidOperationException($"Cannot run serialization on U# behaviour '{proxy}' with outdated behaviour version, wait until program assets have compiled.");
            }

            Profiler.BeginSample("CopyUdonToProxy");

            try
            {
                lock (UsbSerializationContext.UsbLock)
                {
                    var udonBehaviourStorage = new SimpleValueStorage <UdonBehaviour>(GetBackingUdonBehaviour(proxy));

                    ProxySerializationPolicy lastPolicy = UsbSerializationContext.CurrentPolicy;
                    UsbSerializationContext.CurrentPolicy = serializationPolicy;

                    object proxyObj = proxy;
                    Serializer.CreatePooled(proxy.GetType()).ReadWeak(ref proxyObj, udonBehaviourStorage);

                    UsbSerializationContext.CurrentPolicy = lastPolicy;
                }
            }
            finally
            {
                Profiler.EndSample();
            }
        }
        public static void CopyProxyToUdon(UdonSharpBehaviour proxy, ProxySerializationPolicy serializationPolicy)
        {
            if (serializationPolicy.MaxSerializationDepth == 0)
            {
                return;
            }

            Profiler.BeginSample("CopyProxyToUdon");

            SimpleValueStorage <UdonBehaviour> udonBehaviourStorage = new SimpleValueStorage <UdonBehaviour>(GetBackingUdonBehaviour(proxy));

            ProxySerializationPolicy lastPolicy = USBSerializationContext.currentPolicy;

            USBSerializationContext.currentPolicy = serializationPolicy;

            Serializer.CreatePooled(proxy.GetType()).WriteWeak(udonBehaviourStorage, proxy);

            USBSerializationContext.currentPolicy = lastPolicy;

            Profiler.EndSample();
        }
        public static void CopyUdonToProxy(UdonSharpBehaviour proxy, ProxySerializationPolicy serializationPolicy)
        {
            if (serializationPolicy.MaxSerializationDepth == 0)
            {
                return;
            }

            Profiler.BeginSample("CopyUdonToProxy");

            SimpleValueStorage <UdonBehaviour> udonBehaviourStorage = new SimpleValueStorage <UdonBehaviour>(GetBackingUdonBehaviour(proxy));

            ProxySerializationPolicy lastPolicy = USBSerializationContext.currentPolicy;

            USBSerializationContext.currentPolicy = serializationPolicy;

            object proxyObj = proxy;

            Serializer.CreatePooled(proxy.GetType()).ReadWeak(ref proxyObj, udonBehaviourStorage);

            USBSerializationContext.currentPolicy = lastPolicy;

            Profiler.EndSample();
        }