Unity 備忘録テクニック(Unity エディタのメニュー 2)




皆さんこんにちは、プロクラスの野間です。

今回は Unity Editor メニューカスタマイズの続きになります。
第二回となる今回は GameObject を作ってみます。
と、その前に問題点とその対策から。

■プラットフォーム変更でエラーになる
実は「using UnityEditor;」で使用するものは名前が示す通り Unity Editor 専用です。
つまり、例えばプラットフォームを変更(スマホ等に変更)するとエラーになります。
(正しくは別プラットフォーム用に Build するときにエラーになる)
何が面倒かって、プラットフォームを変更したときにはメニュー用のプログラムを無効にする必要があります。
(注釈にするなど)
そして、作ったメニューを使いたいときには一旦プラットフォームを戻して、メニュー用のプログラムを有効に戻す必要があります。
非常に面倒です。
こんな単純な作業は人間がやることではないです。自動化したいものです・・・。

てな訳で、自動化しちゃいましょう。

■プラットフォームを判定して無効化する
やらないといけない事は2つです。
・プラットフォームを判定する
・プラットフォームによってはプログラムを無効化する
実はこれ、一発で出来ます。


#if UNITY_EDITOR
using UnityEditor;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MenuScript : MonoBehaviour {
	[MenuItem("Custom/Craete")]
	static void Start () {
		Debug.Log ("面倒なことは機械にさせよう!");
	}
}

#endif

ポイントは先頭の「#if UNITY_EDITOR」と末尾の「#endif」です。
その他は前回やったものと同様と考えてください。
Unity Editor で編集しているときには「UNITY_EDITOR」の文字が定義されています。
そして、別のプラットフォームに変更したときには「UNITY_EDITOR」の定義が消えるので、この範囲のプログラムコードが無効になります。
これで自動で対応してくれるプログラムの完成です。

00

01

意味が分からない方は必ず書くものと思っておまじない的に書いておくことをお勧めします。
書いておいて損になるものではないですからね。

■GameObject の作成
大げさに表題をきりましたが、実際には作成がポイントなのでは無いです。
とりあえず GameObject を作ります。


public class MenuScript : MonoBehaviour {
	[MenuItem("Custom/Craete")]
	static void Start () {
		new GameObject ("Hoge");
	}
}

これでメニューを選ぶと Hierarchy に「Hoge」が出来ました。

02
特に何も問題ないですね。
では、もう一度メニューを選んでください。

03
もう一つ出来ましたね。
メニューを選ぶ度に増やしてよいなら問題ないのですが、メニューを選んだら「作り直し」たい場合があります。
早い話が既に「Hoge」があるなら削除したい場合です。
これはちょっと普段とは違います。
これをやるために new GameObject をやりました。(笑)

■GameObject の削除
通常、GameObject の削除には Destroy(●) を使うと思います。
ですが、ここでは使えません。

04
※メニューを選んで実行した時にエラーになります。
その代わりに使うのが
DestroyImmediate(●) です。

GameObject.Find(●) は使えますので、これで「あったら削除」が出来ますね。
今回はここまで。
でも、これだけでは使い道が弱いので、まだ続けます。
また次回にお会いしましょう。