Skip to content

Instantly share code, notes, and snippets.

@soraphis
Created July 30, 2016 13:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save soraphis/68327ba69249ea07a6f6071c3f62ebf1 to your computer and use it in GitHub Desktop.
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)
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