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 void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { string serializedString; if (value == null) { serializedString = "null"; } else { List <Object> objectReferences = null; serializedString = PrettySerializer.SerializeUnityObject(value as Object, ref objectReferences); } writer.WriteRawValue(serializedString); }