Merge pull request #42 from mackysoft/feature/copy-paste-property
Implement copy and paste property
This commit is contained in:
commit
343d930155
@ -0,0 +1,66 @@
|
|||||||
|
#if UNITY_2019_3_OR_NEWER
|
||||||
|
using UnityEditor;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace MackySoft.SerializeReferenceExtensions.Editor
|
||||||
|
{
|
||||||
|
public static class CopyAndPasteProperty
|
||||||
|
{
|
||||||
|
|
||||||
|
const string kCopiedPropertyPathKey = "SerializeReferenceExtensions.CopiedPropertyPath";
|
||||||
|
const string kClipboardKey = "SerializeReferenceExtensions.CopyAndPasteProperty";
|
||||||
|
|
||||||
|
static readonly GUIContent kPasteContent = new GUIContent("Paste Property");
|
||||||
|
|
||||||
|
[InitializeOnLoadMethod]
|
||||||
|
static void Initialize ()
|
||||||
|
{
|
||||||
|
EditorApplication.contextualPropertyMenu += OnContextualPropertyMenu;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void OnContextualPropertyMenu (GenericMenu menu, SerializedProperty property)
|
||||||
|
{
|
||||||
|
if (property.propertyType == SerializedPropertyType.ManagedReference)
|
||||||
|
{
|
||||||
|
// NOTE: When the callback function is called, the SerializedProperty is rewritten to the property that was being moused over at the time,
|
||||||
|
// so a new SerializedProperty instance must be created.
|
||||||
|
SerializedProperty clonedProperty = property.Copy();
|
||||||
|
|
||||||
|
menu.AddItem(new GUIContent($"Copy \"{property.propertyPath}\" property"), false, Copy, clonedProperty);
|
||||||
|
|
||||||
|
string copiedPropertyPath = SessionState.GetString(kCopiedPropertyPathKey, string.Empty);
|
||||||
|
if (!string.IsNullOrEmpty(copiedPropertyPath))
|
||||||
|
{
|
||||||
|
menu.AddItem(new GUIContent($"Paste \"{copiedPropertyPath}\" property"), false, Paste, clonedProperty);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
menu.AddDisabledItem(kPasteContent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void Copy (object customData)
|
||||||
|
{
|
||||||
|
SerializedProperty property = (SerializedProperty)customData;
|
||||||
|
string json = JsonUtility.ToJson(property.managedReferenceValue);
|
||||||
|
SessionState.SetString(kCopiedPropertyPathKey, property.propertyPath);
|
||||||
|
SessionState.SetString(kClipboardKey, json);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void Paste (object customData)
|
||||||
|
{
|
||||||
|
SerializedProperty property = (SerializedProperty)customData;
|
||||||
|
string json = SessionState.GetString(kClipboardKey, string.Empty);
|
||||||
|
if (string.IsNullOrEmpty(json))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Undo.RecordObject(property.serializedObject.targetObject, "Paste Property");
|
||||||
|
JsonUtility.FromJsonOverwrite(json, property.managedReferenceValue);
|
||||||
|
property.serializedObject.ApplyModifiedProperties();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 734d3eb8da4785b49919aea6db62d877
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
Loading…
x
Reference in New Issue
Block a user