Last active
October 11, 2015 04:57
-
-
Save AngryAnt/3806123 to your computer and use it in GitHub Desktop.
Example code for "CopyInspector" blog post on AngryAnt.com
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using UnityEngine; | |
using UnityEditor; | |
using System.Collections; | |
using System.Collections.Generic; | |
using System.Reflection; | |
public class CopyInspector : Editor | |
{ | |
static System.Type m_OriginalType; | |
static Dictionary <PropertyInfo, object> m_Values; | |
private List GetProperties (Component component) | |
{ | |
List <string> ignoredProperties; | |
List properties; | |
properties = new List (); | |
ignoredProperties = new List <string> (); | |
foreach (PropertyInfo propertyInfo in typeof (Component).GetProperties ()) | |
{ | |
ignoredProperties.Add (propertyInfo.Name); | |
} | |
foreach (PropertyInfo propertyInfo in component.GetType ().GetProperties ()) | |
{ | |
if (ignoredProperties.Contains (propertyInfo.Name)) | |
{ | |
continue; | |
} | |
properties.Add (propertyInfo); | |
} | |
return properties; | |
} | |
public override void OnInspectorGUI () | |
{ | |
DrawDefaultInspector (); | |
OnCopyInspectorGUI (); | |
} | |
public void OnCopyInspectorGUI () | |
{ | |
bool enabled; | |
List properties; | |
Component component; | |
component = target as Component; | |
if (component == null) | |
{ | |
return; | |
} | |
GUILayout.Space (10.0f); | |
Color backgroundColor = GUI.backgroundColor; | |
GUI.backgroundColor = new Color (0.8f, 0.8f, 0.8f); | |
GUILayout.BeginVertical ("Toolbar"); | |
GUI.backgroundColor = backgroundColor; | |
GUILayout.BeginHorizontal (); | |
GUILayout.Space (10.0f); | |
GUILayout.Label ("Copied: " + (m_OriginalType != null ? m_OriginalType.Name : "Nothing"), "MiniLabel"); | |
GUILayout.FlexibleSpace (); | |
if (GUILayout.Button (new GUIContent ("Copy", "Copy component values"), "MiniLabel")) | |
{ | |
m_OriginalType = target.GetType (); | |
properties = GetProperties (component); | |
m_Values = new Dictionary <PropertyInfo, object> (); | |
foreach (PropertyInfo property in properties) | |
{ | |
m_Values [property] = property.GetValue (component, null); | |
} | |
} | |
enabled = GUI.enabled; | |
GUI.enabled = target.GetType () == m_OriginalType; | |
GUILayout.Space (10.0f); | |
if (GUILayout.Button (new GUIContent ("Paste", "Paste component values"), "MiniLabel")) | |
{ | |
properties = GetProperties (component); | |
foreach (PropertyInfo property in properties) | |
{ | |
if (!property.CanWrite) | |
{ | |
continue; | |
} | |
property.SetValue (component, m_Values [property], null); | |
} | |
} | |
GUILayout.Space (10.0f); | |
GUI.enabled = enabled; | |
GUILayout.EndHorizontal (); | |
GUILayout.EndVertical (); | |
GUILayout.Space (-2.0f); | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using UnityEngine; | |
using UnityEditor; | |
using System.Collections; | |
[CustomEditor (typeof (Transform))] | |
public class CopyTransformInspector : CopyInspector | |
{ | |
public override void OnInspectorGUI () | |
{ | |
Transform transform; | |
Vector3 localPosition, localScale; | |
Quaternion localRotation; | |
transform = target as Transform; | |
localPosition = EditorGUILayout.Vector3Field ("Position", transform.localPosition); | |
localRotation = Quaternion.Euler (EditorGUILayout.Vector3Field ("Rotation", transform.localRotation.eulerAngles)); | |
localScale = EditorGUILayout.Vector3Field ("Scale", transform.localScale); | |
if (GUI.changed) | |
{ | |
transform.localPosition = localPosition; | |
transform.localRotation = localRotation; | |
transform.localScale = localScale; | |
} | |
OnCopyInspectorGUI (); | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using UnityEngine; | |
using UnityEditor; | |
using System.Collections; | |
[CustomEditor (typeof (YourComponentType))] | |
public class CopyYourComponentTypeInspector : CopyInspector{} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Hello.
I've forked this code => https://gist.github.com/mushutehk/6636510
and modified it so that it works 100%
it can also now handle the copying of multiple components (though currently only the Transform component is implemented).
@AngryAnt Thanks for sharing the original code. I'm new and hence don't yet know the general conduct of Git so if it's not considered "nice" to go around forking everyones code, let me know and I can take it down.
Otherwise I hope people can find this as useful as I have.