Created
July 30, 2016 13:03
-
-
Save soraphis/68327ba69249ea07a6f6071c3f62ebf1 to your computer and use it in GitHub Desktop.
Unity Script to be able to copy multiple transform components in edito mode (preview here: https://sendvid.com/w7i0jddd)
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 System.Collections.Generic; | |
using UnityEditor; | |
[InitializeOnLoad] | |
public class MultiTransformClipboard { | |
const string ComponentName = "Transform"; | |
static MultiTransformClipboard() | |
{ | |
EditorApplication.playmodeStateChanged += PlayModeState; | |
lastGameMode = EditorApplication.isPlaying; | |
} | |
static void PlayModeState () | |
{ | |
if (EditorApplication.isPlaying && !lastGameMode) { | |
Clipboard.Clear(); | |
} | |
lastGameMode = EditorApplication.isPlaying; | |
} | |
private struct TransformClipboard { | |
public Vector3? position; | |
public Quaternion? rotation; | |
public Vector3? scale; | |
} | |
private static bool lastGameMode = false; | |
private static Dictionary<int, TransformClipboard> Clipboard = new Dictionary<int, TransformClipboard>(); | |
[MenuItem("CONTEXT/"+ComponentName+"/+Copy", true)] static bool AddToCopyQueue() { | |
return EditorApplication.isPlaying && ! Clipboard.ContainsKey(Selection.activeGameObject.GetInstanceID()); | |
} | |
[MenuItem("CONTEXT/"+ComponentName+"/+Copy")] | |
static void AddToCopyQueueFunc() { | |
var tc = new TransformClipboard(); | |
tc.position = Selection.activeTransform.localPosition; | |
tc.rotation = Selection.activeTransform.localRotation; | |
tc.scale = Selection.activeTransform.localScale; | |
Clipboard.Add(Selection.activeGameObject.GetInstanceID(), tc); | |
} | |
[MenuItem("CONTEXT/"+ComponentName+"/-Copy", true)] | |
static bool RemoveFromCopyQueue() { return EditorApplication.isPlaying && Clipboard.ContainsKey(Selection.activeGameObject.GetInstanceID()); } | |
[MenuItem("CONTEXT/"+ComponentName+"/-Copy")] | |
static void RemoveFromCopyQueueFunc() { Clipboard.Remove(Selection.activeGameObject.GetInstanceID()); } | |
[MenuItem("CONTEXT/"+ComponentName+"/Paste", true)] | |
static bool PasteQueue() { return ! EditorApplication.isPlaying && Clipboard.ContainsKey(Selection.activeGameObject.GetInstanceID()); } | |
[MenuItem("CONTEXT/"+ComponentName+"/Paste")] static void PasteQueueFunc() { | |
var tc = Clipboard[Selection.activeGameObject.GetInstanceID()]; | |
Selection.activeTransform.localPosition = tc.position ?? Selection.activeTransform.localPosition; | |
Selection.activeTransform.localRotation = tc.rotation ?? Selection.activeTransform.localRotation; | |
Selection.activeTransform.localScale = tc.scale ?? Selection.activeTransform.localScale; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment