Unity│知っておくと便利!エディタ拡張まとめ 9選

エディタ拡張を使うと、Unityの標準で搭載されていない機能を作ることができます。

実際に使ってみて便利だったエディタ拡張を紹介します。

目次

先頭や最後尾に文字を追加するエディタ拡張

選択したオブジェクトの名前の先頭や最後尾に文字を追加できます。

リネームの動作

使い方

  1. リネームしたいオブジェクトを選択
  2. メニューバーからツールを起動
  3. 実行すると階層下すべてリネームされる

コンポーネントを削除するエディタ拡張

消したいスクリプトがAdd Componentされていた場合に便利です。複数選択にも対応しています。

using UnityEngine;
using UnityEditor;

public class RemoveComponent : Editor
{
    [MenuItem("Tools/Remove NewBehaviourScript")]
    static void Remove()
    {
        foreach (GameObject obj in Selection.gameObjects)
        {
            var component = obj.GetComponent<NewBehaviourScript>();
            if (component != null)
            {
                DestroyImmediate(component);
            }
        }
    }
}

Outlineコンポーネントを消したい場合はusing UnityEngine.UI;を追加して、obj.GetComponent<Outline>()とすると削除できます。

※エディタ拡張ではDestroyではなく、すぐ削除できるDestroyImmediateを使用します。

文字列の最後に連番を追加するエディタ拡張

階層内の数を見て、文字列の最後に連番をつけます。

連番追加の動作

ポイント:

  • string number = "0";にすれば0から始まる
  • .transform.GetSiblingIndexで同階層における順序数を取得
  • {0}{1}は数値の書式指定(0埋め1桁)

マスク素材用のマテリアルを作成してアサインするエディタ拡張

指定したオブジェクトにマテリアルをインスタンス化し、シェーダー選択、カラー指定後にアサインするスクリプトです。

複数オブジェクトにマスク用マテリアルをアサイン

アサインしたいオブジェクトに「Mask」というTagを付けておきます。

using UnityEngine;

public class ExampleClass : MonoBehaviour
{
    void Start()
    {
        GameObject[] obstacles = GameObject.FindGameObjectsWithTag("Mask");
        foreach (GameObject obs in obstacles)
        {
            Renderer rend = obs.GetComponent<Renderer>();
            // シェーダー作成・アサイン
            rend.material = new Material(Shader.Find("Unlit/Color"));
            // カラーを変更
            rend.material.color = Color.red;
        }
    }
}

自分で色を指定したい場合:

rend.material.color = new Color(1f, 0f, 0f);

ゲームビューのスクリーンショットを撮る方法

Photoshopで作ったレイアウトとUnityで作成したものを正確に見比べるために、原寸のGameビューのスクリーンショットを撮るエディタスクリプトです。

スクリーンショットの保存先
スクリーンショットの結果

Ctrl + Shift + F12で保存。ダイアログで保存先を指定できます。

using UnityEditor;
using UnityEngine;

public class CaptureScreenshotFromEditor : Editor
{
    [MenuItem("Edit/CaptureScreenshot #%F12")]
    private static void CaptureScreenshot()
    {
        string path = EditorUtility.SaveFilePanel(
            "Save Screenshot",
            Application.dataPath,
            System.DateTime.Now.ToString("yyyyMMdd-HHmmss"),
            "png"
        );
        ScreenCapture.CaptureScreenshot(path);
        
        var assembly = typeof(EditorWindow).Assembly;
        var type = assembly.GetType("UnityEditor.GameView");
        var gameview = EditorWindow.GetWindow(type);
        gameview.Repaint();
        
        Debug.Log("ScreenShot: " + path);
    }
}

選択したオブジェクトをCtrl+Gでグループ化するエディタ拡張

Mayaでよく使う機能です。選択した要素の上に親のGameObjectを作成します。

using UnityEngine;
using UnityEditor;
using System.Linq;

public class CreateEmptyParent : Editor
{
    [MenuItem("Edit/Group Selected %g")]
    static void Group()
    {
        if (Selection.transforms.Length == 0) return;

        var sorted = Selection.transforms
            .OrderBy(t => t.GetSiblingIndex())
            .ToArray();

        GameObject group = new GameObject("Group");
        Undo.RegisterCreatedObjectUndo(group, "Group Selected");

        group.transform.SetParent(sorted[0].parent);
        group.transform.SetSiblingIndex(sorted[0].GetSiblingIndex());

        foreach (Transform t in sorted)
        {
            Undo.SetTransformParent(t, group.transform, "Group Selected");
        }
    }
}

参考:https://answers.unity.com/questions/118306/grouping-objects-in-the-hierarchy.html

使用コンポーネント名からオブジェクトを検索するエディタ拡張

MaskやOutlineなど、デフォルトで入っているコンポーネントがどこで使われているか調べられます。

コンポーネント検索ウィンドウ

ウィンドウを起動してSearch Forから探したいコンポーネント名(Mask、Outline、AspectRatioFitterなど)を入力してFind Nextボタンを押します。

参考:http://panzersoft.blog.fc2.com/blog-entry-66.html

無料の多機能リネーマー「Mulligan Renamer」

複数選択での置換など、高機能なリネーマーです。

Mulligan Renamerの画面

Window → Red Blue → Mulligan Renamerから起動します。記号や数字を削除できる機能も便利です。

ダウンロード:https://github.com/redbluegames/unity-mulligan-renamer

日本語のリネーマー

日本語UIが良い場合はこちらが便利です。

日本語リネーマー

参考:http://artawa.hatenablog.com/entry/2016/11/21/002242

複数プロジェクト共通でエディタ拡張する方法

プロジェクトを作るごとにエディタスクリプトを入れ直すのが面倒な場合、共通化できます。

手順

  1. 共通化したいスクリプトを用意
  2. Unityのインストール先のEditor\Data\UnityExtensions\Unityにフォルダを作成
  3. バッチファイルでDLLを生成
  4. ivy.xmlを作成して配置

フォルダ構成:

Unity
  └ Custom
      ├ Editor
      │   ├ CustomMenu.cs
      │   ├ CaptureScreenshotFromEditor.cs
      │   └ EditorScript.dll
      └ ivy.xml
DLL生成の準備
共通化の確認

新規プロジェクトを作成してUnityを起動すると、メニューが表示され、共通のエディタ拡張が使えるようになります。

参考:https://qiita.com/r-ngtm/items/493fdcbd62eb94031c6e

まとめ

  • リネーム系:先頭・最後尾に文字追加、連番追加
  • コンポーネント操作:削除、検索
  • グループ化:Ctrl+Gで親オブジェクト作成
  • スクリーンショット:ショートカット一発で保存
  • マテリアル操作:マスク用マテリアルの一括アサイン
  • 共通化:DLL化して全プロジェクトで使用可能
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次