UnityのEditorを拡張する方法について

前回はアプリケーション内からアップデートの通知を行う方法についてご紹介しました。
今回はUnityのEditorを拡張する方法についてご紹介します。

EdtiorとはUnityのメニューバーにある機能をさします。

null

Editorを拡張することによって通常の操作を短縮できます。
たとえば、UnityでAndroid、iOSアプリを開発するとします。
Defineを使用して、AndroidとiOSに分けてそれぞれ異なる処理を記載してビルドしますが、
スクリプトを開いてAndroid用(iOS用)のDefineに切り替えてビルドする必要があるので、
時間がかかってしまいます。

これを、チェックボックスでDefineを切り替える処理を用意してEditorの拡張をしておくことで
ビルド時のアクションを1つ減らすことができます。

Editorの拡張には、C#(.cs)で記載したソースコードが必要です。
今回は初歩的でありますが下記に簡単なメニューを作成しました。

①のほうはただ単純にGameObjectを生成するだけのもので
生成時の名前を変える程度です。

②のほうはGameObjectのPositionの小数を切り捨てるものです。
画面上でPositionを変更したときに値が細かくなるでこのメニューを使用したら
自動的に整数(小数を切り捨て)になおしてくれます。

■EditorTest01.cs

using UnityEngine;
using System.Collections;
using UnityEditor;

public static class EditorTest01{

	//新しくゲームオブジェクトを生成①.
	[MenuItem("Tools/Custom Game Object")]			//メニューバーに表示される名前※自由に変更できます。
	static void CustomGameObject(MenuCommand menuCommand) {
		GameObject go =  new GameObject("CustomGameObject");

		GameObjectUtility.SetParentAndAlign(go, menuCommand.context as GameObject);

		Undo.RegisterCreatedObjectUndo(go, "Create " + go.name);

		Selection.activeObject = go;
	}

	//小数点を切り捨て②.
	[MenuItem("Tools/TruncationPosition")]
	static void TruncationPosition(){
		foreach (GameObject obj in Selection.gameObjects) {
			Vector3 v = obj.transform.localPosition;
			int x = (int)v.x;
			int y = (int)v.y;
			int z = (int)v.z;
			obj.transform.localPosition = new Vector3((float)x, (float)y, (float)z);
		}
	}
}

このcsファイルは
Assets/Editorに入れてください。
null

下の図のようにメニューが追加されるかと思います。
null

最後までご覧いただきありがとうございます。
これからこんな機能があったら便利かもというのがあればご紹介できたらと思います。


弊社では全国各地の請負い(ご自宅)で作業協力頂ける、フリーランスエンジニアの方を常時探しております。
ご興味ある方は、お気軽にお問い合わせ下さい。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*