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
            }
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
 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
 }