Last active
October 25, 2015 10:28
-
-
Save mmj-the-fighter/21d36fa36725aa21a176 to your computer and use it in GitHub Desktop.
A Unity3D Editor script for copying and pasting local or global positons and rotations. And other convenient methods.
This file contains 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
//Copyright © 2015 Manoj M J | |
//All Rights Reserved | |
//Why I do copyright the code that I provide at gist.github.com | |
//( https://gist.github.com/mmj-the-fighter/bccd0a7ff57c638beee8 ) | |
/* | |
* File:/Editor/TransformCopier.cs - A utility for copying and pasting local or global positons and rotations. | |
* The method CopyTransformToClipboard is useful for pasting the transform to text file. | |
* The copy - paste of scale is avoided since global scale(lossy scale) is a read only property. | |
* | |
* | |
*/ | |
using UnityEngine; | |
using UnityEditor; | |
using System.Collections; | |
using System.Text; | |
public class TransformCopier : ScriptableObject { | |
public enum MethodID | |
{ | |
MethodNone, | |
MethodCopyTransformToClipboard, | |
MethodCopyGlobalPosition, | |
MethodPasteGlobalPosition, | |
MethodCopyLocalPosition, | |
MethodPasteLocalPosition, | |
MethodCopyGlobalRotation, | |
MethodPasteGlobalRotation, | |
MethodCopyLocalRotation, | |
MethodPasteLocalRotation, | |
}; | |
static MethodID recentlyExecutedMethodsID = MethodID.MethodNone; | |
static Vector3 globalPosition; | |
static Vector3 localPosition; | |
static Quaternion globalRotation; | |
static Quaternion localRotation; | |
static Vector3 tempPositionForUndoAction; | |
static Quaternion tempRotationForUndoAction; | |
static Transform undoTargetTransform; | |
[ MenuItem( "Tools/TransformCopier/DoPasteForLastCopy" ) ] | |
public static void PasteActionForLastCopy() | |
{ | |
switch(recentlyExecutedMethodsID) | |
{ | |
case MethodID.MethodCopyGlobalPosition: PasteGlobalPosition(); break; | |
case MethodID.MethodCopyLocalPosition: PasteLocalPosition(); break; | |
case MethodID.MethodCopyGlobalRotation: PasteGlobalRotation(); break; | |
case MethodID.MethodCopyLocalRotation: PasteLocalRotation(); break; | |
default:break; | |
} | |
} | |
[ MenuItem( "Tools/TransformCopier/CopyGlobalPosition" ) ] | |
public static void CopyGlobalPositionMainMenu() | |
{ | |
CopyGlobalPosition(); | |
} | |
[ MenuItem( "Tools/TransformCopier/PasteGlobalPosition" ) ] | |
public static void PasteGlobalPositionMainMenu() | |
{ | |
PasteGlobalPosition(); | |
} | |
[ MenuItem( "Tools/TransformCopier/CopyGlobalRotation" ) ] | |
public static void CopyGlobalRotationMainMenu() | |
{ | |
CopyGlobalRotation(); | |
} | |
[ MenuItem( "Tools/TransformCopier/PasteGlobalRotation" ) ] | |
public static void PasteGlobalRotationMainMenu() | |
{ | |
PasteGlobalRotation(); | |
} | |
[ MenuItem( "Tools/TransformCopier/Position/Global/Copy" ) ] | |
public static void CopyGlobalPosition() | |
{ | |
globalPosition = Selection.activeTransform.position; | |
recentlyExecutedMethodsID = MethodID.MethodCopyGlobalPosition; | |
} | |
[ MenuItem( "Tools/TransformCopier/Position/Global/Paste" ) ] | |
public static void PasteGlobalPosition() | |
{ | |
tempPositionForUndoAction = Selection.activeTransform.position; | |
undoTargetTransform = Selection.activeTransform; | |
Selection.activeTransform.position = globalPosition; | |
recentlyExecutedMethodsID = MethodID.MethodPasteGlobalPosition; | |
} | |
[ MenuItem( "Tools/TransformCopier/Position/Local/Copy" ) ] | |
public static void CopyLocalPosition() | |
{ | |
localPosition = Selection.activeTransform.localPosition; | |
recentlyExecutedMethodsID = MethodID.MethodCopyLocalPosition; | |
} | |
[ MenuItem( "Tools/TransformCopier/Position/Local/Paste" ) ] | |
public static void PasteLocalPosition() | |
{ | |
tempPositionForUndoAction = Selection.activeTransform.localPosition; | |
undoTargetTransform = Selection.activeTransform; | |
Selection.activeTransform.localPosition = localPosition; | |
recentlyExecutedMethodsID = MethodID.MethodPasteLocalPosition; | |
} | |
[ MenuItem( "Tools/TransformCopier/Rotation/Global/Copy" ) ] | |
public static void CopyGlobalRotation() | |
{ | |
globalRotation = Selection.activeTransform.rotation; | |
recentlyExecutedMethodsID = MethodID.MethodCopyGlobalRotation; | |
} | |
[ MenuItem( "Tools/TransformCopier/Rotation/Global/Paste" ) ] | |
public static void PasteGlobalRotation() | |
{ | |
tempRotationForUndoAction = Selection.activeTransform.rotation; | |
undoTargetTransform = Selection.activeTransform; | |
Selection.activeTransform.rotation = globalRotation; | |
recentlyExecutedMethodsID = MethodID.MethodPasteGlobalRotation; | |
} | |
[ MenuItem( "Tools/TransformCopier/Rotation/Local/Copy" ) ] | |
public static void CopyLocalRotation() | |
{ | |
localRotation = Selection.activeTransform.localRotation; | |
recentlyExecutedMethodsID = MethodID.MethodCopyLocalRotation; | |
} | |
[ MenuItem( "Tools/TransformCopier/Rotation/Local/Paste" ) ] | |
public static void PasteLocalRotation() | |
{ | |
tempRotationForUndoAction = Selection.activeTransform.localRotation; | |
undoTargetTransform = Selection.activeTransform; | |
Selection.activeTransform.localRotation = localRotation; | |
recentlyExecutedMethodsID = MethodID.MethodPasteLocalRotation; | |
} | |
[ MenuItem( "Tools/TransformCopier/RepeatLastAction" ) ] | |
public static void RepeatLastAction() | |
{ | |
switch(recentlyExecutedMethodsID) | |
{ | |
case MethodID.MethodCopyGlobalPosition: CopyGlobalPosition(); break; | |
case MethodID.MethodPasteGlobalPosition: PasteGlobalPosition(); break; | |
case MethodID.MethodCopyLocalPosition: CopyLocalPosition(); break; | |
case MethodID.MethodPasteLocalPosition: PasteLocalPosition(); break; | |
case MethodID.MethodCopyGlobalRotation: CopyGlobalRotation(); break; | |
case MethodID.MethodPasteGlobalRotation: PasteGlobalRotation(); break; | |
case MethodID.MethodCopyLocalRotation: CopyLocalRotation(); break; | |
case MethodID.MethodPasteLocalRotation: PasteLocalPosition(); break; | |
case MethodID.MethodCopyTransformToClipboard: CopyTransformToClipboard(); break; | |
default:break; | |
} | |
} | |
[ MenuItem( "Tools/TransformCopier/Undo" ) ] | |
public static void Undo() | |
{ | |
switch(recentlyExecutedMethodsID) | |
{ | |
case MethodID.MethodPasteGlobalPosition: | |
undoTargetTransform.position = tempPositionForUndoAction; | |
break; | |
case MethodID.MethodPasteLocalPosition: | |
undoTargetTransform.localPosition = tempPositionForUndoAction; | |
break; | |
case MethodID.MethodPasteGlobalRotation: | |
undoTargetTransform.rotation = tempRotationForUndoAction; | |
break; | |
case MethodID.MethodPasteLocalRotation: | |
undoTargetTransform.localRotation = tempRotationForUndoAction; | |
break; | |
} | |
} | |
private static string Vector3ToString(Vector3 v) | |
{ | |
return v.ToString("f4"); | |
} | |
private static string QuaternionToString(Quaternion q) | |
{ | |
return q.ToString("f4"); | |
} | |
[ MenuItem( "Tools/TransformCopier/CopyTransformToClipboard &%c" ) ] | |
public static void CopyTransformToClipboard() | |
{ | |
Transform activeTransform = Selection.activeTransform; | |
StringBuilder stringBuilder = new StringBuilder(); | |
stringBuilder.AppendFormat("{0}",activeTransform.gameObject.name); | |
stringBuilder.AppendLine(); | |
stringBuilder.AppendFormat("{0}{1}","GlobalPosition: ", Vector3ToString(activeTransform.position)); | |
stringBuilder.AppendLine(); | |
stringBuilder.AppendFormat("{0}{1}","GlobalRotationEulerAngles: ", Vector3ToString(activeTransform.rotation.eulerAngles)); | |
stringBuilder.AppendLine(); | |
stringBuilder.AppendFormat("{0}{1}","GlobalRotationQuaternion: ", QuaternionToString(activeTransform.rotation)); | |
stringBuilder.AppendLine(); | |
stringBuilder.AppendFormat("{0}{1}","GlobalScale: ", Vector3ToString(activeTransform.lossyScale)); | |
stringBuilder.AppendLine(); | |
// | |
stringBuilder.AppendFormat("{0}{1}","LocalPosition: ", Vector3ToString(activeTransform.localPosition)); | |
stringBuilder.AppendLine(); | |
stringBuilder.AppendFormat("{0}{1}","LocalRotationEulerAngles: ", Vector3ToString(activeTransform.localRotation.eulerAngles)); | |
stringBuilder.AppendLine(); | |
stringBuilder.AppendFormat("{0}{1}","LocalRotationQuaternion: ", QuaternionToString(activeTransform.localRotation)); | |
stringBuilder.AppendLine(); | |
stringBuilder.AppendFormat("{0}{1}","LocalScale: ", Vector3ToString(activeTransform.localScale)); | |
stringBuilder.AppendLine(); | |
EditorGUIUtility.systemCopyBuffer = stringBuilder.ToString(); | |
recentlyExecutedMethodsID = MethodID.MethodCopyTransformToClipboard; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment