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

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

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

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

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

@kobayan_tokyo

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

自己紹介

・@kobayan_tokyo・http://blog.clock-up.jp/・フリーランス。ツール開発業(?)。および講師。

・実はUnityでゲーム本体を作ったことが無い

・純Windowsユーザ (Mac分からない…)

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

そうだプラグイン作ろう

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

使うもの

・Unity・MonoDevelop・Visual Studio 2010

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

サンプルコード

https://github.com/kobake/unity-plugin-sample

今回紹介する事例をいくつが載せました。

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

組み込み方は?

Assets の中にソースコード置くだけ。

  ↓自動でコンパイル走って

組み込まれます。

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

コード例

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

メニューを拡張しよう

Assets/TestDesu.cs-----------------------------------using UnityEngine;using UnityEditor;public class TestDesu{

[MenuItem("Hoge/Fuga")]public static void Fugafuga(){

Debug.Log("Hello");}

}

※波括弧の位置とかはスライド紙面の都合でほげほげ。

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

ウィンドウを出そう

// ウィンドウ定義

public class PiyoWin : EditorWindow{}

// ウィンドウ表示

PiyoWin.GetWindow( typeof(PiyoWin));

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

ウィンドウ内の部品

class PiyoWindow : EditorWindow{ void OnGUI() { GUILayout.Label("Hoge"); GUILayout.Button("Fuga"); }}

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

イベントハンドリング

if (GUILayout.Button("FugaA")){ Debug.Log("A!!!");}if (GUILayout.Button("FugaB")){ Debug.Log("B!!!");}

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

もっとレイアウト

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();

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

レイアウト注意

GUILayout.BeginHorizontal();GUILayout.Button("4");GUILayout.Button("5");GUILayout.Button("6");GUILayout.EndHorizontal();

GUILayout.EndHorizontal(); // 終わり過ぎた

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

レイアウト注意

GUILayout.BeginHorizontal();GUILayout.Button("4");GUILayout.Button("5");GUILayout.Button("6");GUILayout.EndHorizontal();

GUILayout.EndHorizontal(); // 終わり過ぎた

過剰に怒られる。

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

レイアウトラップ(自前)

public void V(Action action){ GUILayout.BeginVertical("box"); try{ action(); } catch (Exception ex){ Debug.Log(ex.ToString()); } GUILayout.EndVertical();}

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

ネストが込み入っても大丈夫!(?)H(delegate(){ H(delegate() { H(delegate() { H(delegate() { V(delegate() { GUILayout.Button("a"); GUILayout.Button("b"); }); V(delegate() { GUILayout.Button("c"); GUILayout.Button("d"); }); }); V(delegate() { GUILayout.Button("x"); GUILayout.Button("y"); }); GUILayout.Button("z"); }); });});

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

その他レイアウト

・EditorGUILayout.Foldout … 折り畳み

・GUILayout.Toggle … チェックボックス

・GUILayout.Space … 隙間あける

…等々。

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

ゲーム状態を監視しよう

class HogeWindow : EditorWindow{ void Update(){ if (data changed){ Repaint(); } } void OnGUI(){ GUILayout.Label( "state:" + GameObject.find~~

); }}

ゲーム本体の構造

ツールの構造

ガンガン依存すれば良い

あまり依存したくない

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

デバッグ用コード切り分け

------------------------------#if UNITY_EDITOR プラグイン関連依存の処理

#endif

------------------------------

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

参考資料等