ナナヤ 学習帳

書きたいことを書くブログ

【Unity】【Editor拡張】Transformの値をクリップボードに保存してみた。

初めに

今回作成したのは、

汎用的な用途ではなくとある一点にのみ有用なEditor拡張として君臨します。

ほんとに用途は限定的です。。。

使用用途

Transformの値をコピーして、そのコピーした内容をClipboardに保存してしまおうという機能です。 単純にそれだけです。 なお、エクセルにペーストしても問題ないように(というか特化)一応別セルへ分けれるようにはなっております。

使用方法

1.Hierarchyでオブジェクトを選択して、コンポーネント右上のメニュー(点が縦に三連なっているやつ)を選択します。

その中にある、「CustomCopy」を選択します。 f:id:nanaya7896:20200621193621p:plain

選択するとConsoleにコピーした値が表示されます。

※Debug.Logが有効の場合のみ

f:id:nanaya7896:20200621194258p:plain

終了!

ちなみに

スプシにPasteするとこうなります。

f:id:nanaya7896:20200621194730p:plain

ね?便利でしょ?()

コード全文

クリックすると展開されます

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
#if DEBUG
using UnityEditor;
#endif
using System.Text;


public class CustomCopyComponent : Editor
{
#if DEBUG
    // コピー対象のオブジェクト
    public static GameObject copyObject;
    // コピー対象のオブジェクトのTransform
    public static Transform copyComponent;
    // context menu へ追加
    [MenuItem("CONTEXT/Component/Custom Copy", false,100)]
    static void ComponentCopy()
    {
        // 現在選択されているオブジェクト
        copyObject = Selection.activeGameObject;
        if(copyObject == null)
        {
            return;
        }
        copyComponent = copyObject.transform;
        if(copyComponent == null)
        {
            return;
        }
        Vector3[] copyTransform = new Vector3[3];
        // 必要なTransformの要素を取得
        copyTransform[0] = copyComponent.localPosition;
        copyTransform[1] = copyComponent.localEulerAngles;
        copyTransform[2] = copyComponent.localScale;

        StringBuilder strBuilder = new StringBuilder();

        foreach(var c in copyTransform)
        {
             // 文字列結合
            strBuilder.AppendFormat("{0} ", c);
        }
        // 末尾のタブ列は不要なため削除
        strBuilder.ToString().TrimEnd('   ');
        Debug.Log(strBuilder.ToString());
        // システムのバッファへコピー
        GUIUtility.systemCopyBuffer = strBuilder.ToString();
    }
#endif
}

ちょっとだけ解説

Selection.activeGameObject;

Unity上で現在選択されているオブジェクトがこの中に入っています。

GUIUtility.systemCopyBuffer = strBuilder.ToString();

いつも使うコピー(Ctrl+C)と同じ動作をすると思えばきっと問題なさそう。 コピーされたものはクリップボードにも保存されます。 (Windows+Vで確認できます。)

下に公式を張っておきます。

docs.unity3d.com