そうだプラグイン作ろう
=Unityの巻=
@kobayan_tokyo
自己紹介
・@kobayan_tokyo
・http://blog.clock-up.jp/
・フリーランス。ツール開発業(?)。および講師。
・実はUnityでゲーム本体を作ったことが無い
・純Windowsユーザ (Mac分からない…)
そうだプラグイン作ろう
使うもの
・Unity
・MonoDevelop
・Visual Studio 2010
サンプルコード
https://github.com/kobake/unity-plugin-sample
今回紹介する事例をいくつが載せました。
組み込み方は?
Assets の中にソースコード置くだけ。
  ↓
自動でコンパイル走って
組み込まれます。
コード例
メニューを拡張しよう
Assets/TestDesu.cs
-----------------------------------
using UnityEngine;
using UnityEditor;
public class TestDesu{
[MenuItem("Hoge/Fuga")]
public static void Fugafuga(){
Debug.Log("Hello");
}
}
※波括弧の位置とかはスライド紙面の都合でほげほげ。
ウィンドウを出そう
// ウィンドウ定義
public class PiyoWin : EditorWindow{
}
// ウィンドウ表示
PiyoWin.GetWindow(
typeof(PiyoWin)
);
ウィンドウ内の部品
class PiyoWindow : EditorWindow{
void OnGUI()
{
GUILayout.Label("Hoge");
GUILayout.Button("Fuga");
}
}
イベントハンドリング
if (GUILayout.Button("FugaA"))
{
Debug.Log("A!!!");
}
if (GUILayout.Button("FugaB"))
{
Debug.Log("B!!!");
}
もっとレイアウト
GUILayout.BeginHorizontal();
GUILayout.Button("1");
GUILayout.Button("2");
GUILayout.Button("3");
GUILayout.EndHorizontal();
GUILayout.BeginHorizontal();
GUILayout.Button("4");
GUILayout.Button("5");
GUILayout.Button("6");
GUILayout.EndHorizontal();
レイアウト注意
GUILayout.BeginHorizontal();
GUILayout.Button("4");
GUILayout.Button("5");
GUILayout.Button("6");
GUILayout.EndHorizontal();
GUILayout.EndHorizontal(); // 終わり過ぎた
レイアウト注意
GUILayout.BeginHorizontal();
GUILayout.Button("4");
GUILayout.Button("5");
GUILayout.Button("6");
GUILayout.EndHorizontal();
GUILayout.EndHorizontal(); // 終わり過ぎた
過剰に怒られる。
レイアウトラップ(自前)
public void V(Action action)
{
GUILayout.BeginVertical("box");
try{
action();
}
catch (Exception ex){
Debug.Log(ex.ToString());
}
GUILayout.EndVertical();
}
ネストが込み入っても大丈夫!(?)
H(delegate()
{
H(delegate()
{
H(delegate()
{
H(delegate()
{
V(delegate()
{
GUILayout.Button("a");
GUILayout.Button("b");
});
V(delegate()
{
その他レイアウト
・EditorGUILayout.Foldout … 折り畳み
・GUILayout.Toggle … チェックボックス
・GUILayout.Space … 隙間あける
…等々。
ゲーム状態を監視しよう
class HogeWindow : EditorWindow{
void Update(){
if (data changed){
Repaint();
}
}
void OnGUI(){
GUILayout.Label(
"state:" + GameObject.find~~
);
}
}
ゲーム本体の構造
ツールの構造
ガンガン依存す
れば良い
あまり依存した
くない
デバッグ用コード切り分け
------------------------------
#if UNITY_EDITOR
プラグイン関連依存の処理
#endif
------------------------------
参考資料等
参考URL
Unity Manual - Editor Windows
http://docs-jp.unity3d.
com/Documentation/Components/editor-
EditorWindows.html

そうだプラグイン作ろう =Unityの巻=