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