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); } }
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); } }
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); } }
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); }