public override void Write(IValueStorage targetObject, T sourceObject)
            {
                UdonBehaviourHeapData heapStorage = UdonSharpBehaviourFormatterManager.GetHeapData(UdonSharpEditorUtility.GetBackingUdonBehaviour(sourceObject));

                if (heapStorage != null)
                {
                    writeDelegate(heapStorage.heapFieldValues, ref sourceObject, EditorApplication.isPlaying);
                }
            }
            public override void Read(ref T targetObject, IValueStorage sourceObject)
            {
                UdonBehaviourHeapData heapStorage = UdonSharpBehaviourFormatterManager.GetHeapData((UdonBehaviour)sourceObject.Value);

                if (heapStorage != null)
                {
                    readDelegate(heapStorage.heapFieldValues, ref targetObject, EditorApplication.isPlaying);
                }
            }
Exemple #3
0
            public override void Read(ref T targetObject, IValueStorage sourceObject)
            {
                UdonBehaviourHeapData heapStorage = UdonSharpBehaviourFormatterManager.GetHeapData((UdonBehaviour)sourceObject.Value);

                if (heapStorage != null)
                {
                    readDelegate(heapStorage.heapFieldValues, ref targetObject, EditorApplication.isPlaying && !UsbSerializationContext.CurrentPolicy.IsPreBuildSerialize);
                }
            }
Exemple #4
0
            public override void Write(IValueStorage targetObject, T sourceObject)
            {
                UdonBehaviour         backingBehaviour = UdonSharpEditorUtility.GetBackingUdonBehaviour(sourceObject);
                UdonBehaviourHeapData heapStorage      = UdonSharpBehaviourFormatterManager.GetHeapData(backingBehaviour);

                if (heapStorage == null)
                {
                    return;
                }

                writeDelegate(heapStorage.heapFieldValues, ref sourceObject, EditorApplication.isPlaying && !UsbSerializationContext.CurrentPolicy.IsPreBuildSerialize);

                if (!UsbSerializationContext.CollectDependencies && !EditorApplication.isPlaying)
                {
                    PrefabUtility.RecordPrefabInstancePropertyModifications(backingBehaviour);
                }
            }
Exemple #5
0
                public static UdonBehaviourHeapData GetHeapData(UdonBehaviour udonBehaviour)
                {
                    if (!UsbSerializationContext.UseHeapSerialization && _heapDataLookup.TryGetValue(udonBehaviour, out var heapData))
                    {
                        return(heapData);
                    }

                    if (fieldLayout == null)
                    {
                        throw new NullReferenceException($"Formatter manager {typeof(UdonSharpBehaviourFormatterManager).FullName} has not been initialized.");
                    }

                    IHeapStorage heapStorage = CreateHeapStorage(udonBehaviour);

                    if (heapStorage == null)
                    {
                        return(null);
                    }

                    IValueStorage[] heapFieldValues = new IValueStorage[fieldLayout.Length];

                    for (int i = 0; i < heapFieldValues.Length; ++i)
                    {
                        heapFieldValues[i] = heapStorage.GetElementStorage(fieldLayout[i]);
                    }

                    heapData = new UdonBehaviourHeapData()
                    {
                        heapStorage = heapStorage, heapFieldValues = heapFieldValues
                    };

                    if (!UsbSerializationContext.UseHeapSerialization)
                    {
                        _heapDataLookup.Add(udonBehaviour, heapData);
                    }

                    return(heapData);
                }