public static void Duplicate <TComponent>(TComponent[] targets) where TComponent : Component { for (int n = targets.Length - 1; n >= 0; n--) { #if DEV_MODE && PI_ASSERTATIONS Debug.Assert(targets[n] != null, "Duplicate - " + typeof(TComponent) + " " + (n + 1) + " / " + n + " was null!"); #endif #if UNITY_EDITOR UnityEditorInternal.ComponentUtility.CopyComponent(targets[n]); UnityEditorInternal.ComponentUtility.PasteComponentAsNew(targets[n].gameObject); #else var source = targets[n]; var clone = source.gameObject.AddComponent(source.GetType()); byte[] bytes = null; System.Collections.Generic.List <UnityEngine.Object> references = null; #if !DONT_USE_ODIN_SERIALIZER Sisus.OdinSerializer.UnitySerializationUtility.SerializeUnityObject(source, ref bytes, ref references, OdinSerializer.DataFormat.Binary, true); Sisus.OdinSerializer.UnitySerializationUtility.DeserializeUnityObject(clone, ref bytes, ref references, OdinSerializer.DataFormat.Binary); #else PrettySerializer.SerializeUnityObject(source, ref bytes, ref references); PrettySerializer.DeserializeUnityObject(bytes, clone, ref references); #endif #endif } }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { string stringData = reader.Value as string; if (string.IsNullOrEmpty(stringData) || string.Equals(stringData, "null")) { return(null); } var unityObjectToOverwrite = existingValue as Object; PrettySerializer.DeserializeUnityObject(stringData, unityObjectToOverwrite); return(unityObjectToOverwrite); }
public static bool TryPasteUnityObject(Object objectToOverwrite) { try { PrettySerializer.DeserializeUnityObject(Content, objectToOverwrite, ref objectReferences); lastOperationFailed = false; return(true); } #if DEV_MODE catch (Exception e) { Debug.LogError("TryPasteUnityObject failed for " + objectToOverwrite.name + " of type " + StringUtils.TypeToString(objectToOverwrite) + ": " + e); lastOperationFailed = true; return(false); } #else catch { lastOperationFailed = true; return(false); } #endif }