Upload
keiichi-kobayashi
View
409
Download
1
Embed Size (px)
Citation preview
そうだプラグイン作ろう=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() { GUILayout.Button("c"); GUILayout.Button("d"); }); }); V(delegate() { GUILayout.Button("x"); GUILayout.Button("y"); }); GUILayout.Button("z"); }); });});
その他レイアウト
・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 Windowshttp://docs-jp.unity3d.com/Documentation/Components/editor-EditorWindows.html