Matsuno
- — 10 months ago

こんにちは、マツノです。
Unityやってますか?
Unityで作業をしていると同じ手順の作業を沢山のObject相手に何度も繰り返し行ったりすることが結構あって、やっている途中にミスが発生したり、何より面倒ですよね。
そんな時にスクリプトで作業を自動で行うようにできる機能がUnityには存在します、拡張エディタと言います。
UnityAssetStoreを探せばいくつも便利な拡張エディタが見つかりますが市販されている物は基本的に汎用性が高い物が多く、自分が今やりたいな~って思うような局所的な作業に対応しているツールはありません。
そんな時、自分で拡張エディタを作成することができれば作業効率は上昇すること間違いなしです。 普段からUnityで何か作っているなら簡単に作成することができるでしょう。
初回なので、簡単で基本的な拡張エディタを紹介します。
using UnityEngine;
using UnityEditor;
public class Set_Prefab : EditorWindow {
private Vector3 pos;
private GameObject prefab;
[MenuItem("GameObject/SetPrefab")]
static void init()
{
EditorWindow.GetWindow<Set_Prefab>(”Set_Prefab”);
}
private void OnGUI()
{
prefab = EditorGUILayout.ObjectField("prefab", prefab, typeof(GameObject), true) as GameObject;
pos = EditorGUILayout.Vector3Field("postion", pos);
if (GUILayout.Button("set"))
{
GameObject obj = Instantiate(prefab);
obj.transform.position = pos;
}
}
}
Editor/Set_Prefab.cs
指定したオブジェクトを指定した座標に配置する拡張エディタです。 拡張エディタを作るにはUnityが標準で生成するC#ファイルに追加でUnityEditor宣言し、継承クラスをMonoBehiberからEditorWindowに変えます。
[MeneItem()]属性をつけたメソッドは引数に指定したメニューより呼び出すことができます、この場合はGameObjectメニューの中にSetPrefabという項目が追加され、それを選択することでinitメソッドが呼び出されます。
EditorWindow.GetWindowは指定クラスのEditorWindowを表示します、引数に指定した文字列で表示時のタブの文字列を変更することが可能です。
onGUIメソッドでウィンドウに表示する内容を設定することが可能です。
Windowが表示されている時にMonoBehaviour.Update()と同じ感じで呼び出されます。
EditorGUILayoutやGUILayoutに様々なパーツがあるのでそれを組み合わせるなりして作成します、基本的に上から順に一列ずつ作成されていきます。
ここで使ってないパーツはUnityScriptReferenceを参照してください。 だいたいインスペクターで見たことあるパーツがあります。
GUILayout.Button("set")はボタンを生成し、押されているかをBoolで返してくるのでifで受け取って処理本文を記述します。
そして最後に大事なことですが、拡張エディターのC#ファイルは必ずEditorというフォルダを作成し、その中に入れてください。 Editorフォルダ下はビルド時や再生時にコンパイルの対象外になり、もし外にあるとエラーの原因になります。
基本的な拡張エディタの書き方は以上です。
Matsuno
AR VR Engineer
Unity拡張エディタを作ろう! Unity拡張エディタを作ろう! 2020-04-20 08:13:19- CentOS7にNextCloudを導入する 1 year ago
- Laravel mix vue No.1 - Docker Environment - Dockerでlaravel環境 (laradockを使わない) 10 months ago
- DockerでCodeigniter4 betaを動かす 1 year ago
- Windows10 Home+WSL2でLinux(CentOS7)を動かす 6 months ago
- Asterisk16について調べてみた 1 year ago
- PipenvによるWindows上でのPython仮想環境の構築について 10 months ago
- 負荷試験ツール「Gatling」を試してみた。【Windows 10 編】 10 months ago
- PHP7.4のpreloadでLaravel7を高速化!? 6 months ago
- 【Docker環境】FluentdとMySQLのbulk insertを使用したログ収集【前編】 9 months ago
- CentOS6を使ったルーティング 1 year ago
- PHPからJavaScriptに変数の受け渡しで躓いた事 4 days ago
- Unity初心者がawsサーバーとWebSocketを使ってのリアルタイム同期通信について学ぶ② 3 weeks ago
- Unity初心者がawsサーバーとWebSocketを使ってのリアルタイム同期通信について学ぶ① 1 month ago
- Dockerコンテナ(Fluentd)のTimeZoneをUTCからJSTに変更する 2 months ago
- 端末でのサマータイム確認でログインできない 3 months ago
- laravelを経験した後のEC-CUBE3の所感 3 months ago
- Amazon Auroraのレプリケーション 3 months ago
- Asteriskの音声ガイダンスを日本語化 4 months ago
- AsteriskでCDR(通信履歴)をODBC接続でMySQLへ保存する 4 months ago
- AsteriskのRealtime DatabaseでODBCを使わずにMySQLへ接続する 4 months ago