Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Editor スクリプティング 入門

21,945 views

Published on

Unite Japan
Editorスクリプティング入門

公式ページで公開するまで仮でアップします。
公式ページで公開されたらここのは削除します。

  • DOWNLOAD FULL BOOKS, INTO AVAILABLE FORMAT ......................................................................................................................... ......................................................................................................................... 1.DOWNLOAD FULL. PDF EBOOK here { https://tinyurl.com/y3nhqquc } ......................................................................................................................... 1.DOWNLOAD FULL. EPUB Ebook here { https://tinyurl.com/y3nhqquc } ......................................................................................................................... 1.DOWNLOAD FULL. doc Ebook here { https://tinyurl.com/y3nhqquc } ......................................................................................................................... 1.DOWNLOAD FULL. PDF EBOOK here { https://tinyurl.com/y3nhqquc } ......................................................................................................................... 1.DOWNLOAD FULL. EPUB Ebook here { https://tinyurl.com/y3nhqquc } ......................................................................................................................... 1.DOWNLOAD FULL. doc Ebook here { https://tinyurl.com/y3nhqquc } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Editor スクリプティング 入門

  1. 1. Editor スクリプティング 入門誰もが使えるそんな環境づくり
  2. 2. 私はこんな人Unity Technologies JapanフィールドエンジニアEditor拡張にお熱@kyusyukeigo安藤 圭吾
  3. 3. Editorスクリプトってなんだ
  4. 4. EditorスクリプトってなんだUnityEditorを拡張するためのスクリプト
  5. 5. Editorスクリプトってなんだインスペクターを拡張したり
  6. 6. Editorスクリプトってなんだインスペクターを拡張したり ウィンドウを作成したり
  7. 7. Editorスクリプトってなんだ自動でテスターにアプリ配信したり
  8. 8. EditorスクリプトってなんだJenkinsさんにお願いしたりEmotional Jenkins - https://cacoo.com/store/items/10148
  9. 9. EditorスクリプトってなんだJenkinsさんにお願いしたり 怒られたりEmotional Jenkins - https://cacoo.com/store/items/10148
  10. 10. Editorスクリプトってなんだ開発をスムーズに行うために手助けをするもの
  11. 11. 時間割いてまでやる必要あるの?必要か?
  12. 12. 実際にあったことを少しだけご紹介こんなことって...ない?
  13. 13. 初期パラメータはwikiに書いてますこんなことって...ない?
  14. 14. コピペスプレッドシートに一覧初期パラメータはwikiに書いてますこんなことって...ない?
  15. 15. こんなことって...ない?パラメータはContextMenuで管理
  16. 16. using UnityEngine;public class NewBehaviourScript : MonoBehaviour{ [ContextMenu("Hoge")] public void Hoge () { HogeScript h = GetComponent<HogeScript> (); h.str = "hoge"; } [ContextMenu("Fuga")] public void Fuga (){} [ContextMenu("Foo")] public void Foo (){}}ContextMenuのためのScript...パラメータはContextMenuで管理こんなことって...ない?
  17. 17. こんなことって...ない?パラメータはContextMenuで管理ランライム側余計なコードエディター側に書け!
  18. 18. ちょっとどこ触ってんの!こんなことって...ない?
  19. 19. こんなことって...ない?ちょっとどこ触ってんの!なんか動かないんだけど... どれどれ...
  20. 20. こんなことって...ない?ちょっとどこ触ってんの!−90じゃなくて 270にして!
  21. 21. こんなことって...ない?ちょっとどこ触ってんの!触ってほしくない所を触ってる!
  22. 22. こんなことって...ない?ちょっとどこ触ってんの!触ってほしくない所を触ってる!2DのときZ軸は大丈夫?
  23. 23. こんなことって...ない?ちょっとどこ触ってんの!Transform
  24. 24. こんなことって...ない?ちょっとどこ触ってんの!Z軸削除Transform
  25. 25. こんなことって...ない?見せないCustomEditorを使う触らせたくないものちょっとどこ触ってんの!
  26. 26. Editorスクリプトはこんな時に便利
  27. 27. コンパクト見やすい / 目立つEditorスクリプトはこんな時に便利
  28. 28. Editorスクリプトはこんな時に便利using UnityEngine;using UnityEditor;using UnityEditor.Callbacks;public class PostProcess{ [PostProcessBuild] static void OnPostprocessBuild (BuildTarget target, string pathToBuiltProject) { //フレームワーク追加とか } [PostProcessScene] static void OnPostprocessScene () { //デバッグ時のみに追加したいマネージャー(GameObject)追加とか }}ビルド前後の処理自動化
  29. 29. Editorスクリプトはこんな時に便利using UnityEngine;using UnityEditor;public class AssetModification : UnityEditor.AssetModificationProcessor{ static void OnWillCreateAsset (string path){} static void OnWillSaveAssets (string[] paths){} static AssetMoveResult OnWillMoveAsset (string from, string to) { return AssetMoveResult.FailedMove; //ここでアセット移動制限 } static AssetDeleteResult OnWillDeleteAsset (string path, RemoveAssetOptions option) { return AssetDeleteResult.FailedDelete; //ここでアセット削除制限 }}アセット管理移動すんな!削除すんな!
  30. 30. 今回話すことGUI周りについて
  31. 31. PropertyDrawer
  32. 32. PropertyDrawerPropertyDrawerって何
  33. 33. PropertyDrawerPropertyDrawerって何(シリアライズされたフィールドで)カスタマイズするためのものインスペクターに表示されるGUIを
  34. 34. ...PropertyDrawerって何これつまりpublic変数PropertyDrawerpublic Vector3 vector3;
  35. 35. パッと見たいときに少し使いづらいPropertyDrawer...PropertyDrawerって何
  36. 36. [Compact]public Vector3 vector3;https://github.com/anchan828/property-drawer-collection/tree/master/CompactAttributePropertyDrawer...PropertyDrawerって何
  37. 37. 自分で作れるPropertyDrawer
  38. 38. 自分で作れるPropertyDrawer[Compact]public Vector3 vector3;using UnityEngine;public class CompactAttribute : PropertyAttribute {}
  39. 39. using UnityEngine;using UnityEditor;[CustomPropertyDrawer(typeof(CompactAttribute))]public class CompactDrawer : PropertyDrawer{ public override void OnGUI (Rect position, SerializedProperty property, GUIContent label) { ... }}自分で作れるPropertyAttributePropertyDrawerusing UnityEngine;public class CompactAttribute : PropertyAttribute {}PropertyDrawer
  40. 40. using UnityEngine;using UnityEditor;[CustomPropertyDrawer(typeof( Hoge ))]public class CompactDrawer : PropertyDrawer{ public override void OnGUI (Rect position, SerializedProperty property, GUIContent label) { ... }}自分で作れるシリアライズされたクラス[System.Serializable]public class Hoge{public float number;}PropertyDrawerFindPropertyRelative
  41. 41. 唯一、使い回し出来るEditor拡張(だと思ってる)プロジェクトと切り分けてコードを書くことが容易PropertyDrawer
  42. 42. ネタPreviewTexturehttps://github.com/anchan828/property-drawer-collection/tree/master/PreviewTextureAttributePropertyDrawer
  43. 43. AnimatorParameterLabelSearchPasswordPopupSceneName要望/バグあればissueお願いhttps://github.com/anchan828/property-drawer-collectionPropertyDrawer
  44. 44. EditorWindow
  45. 45. EditorWindowEditorWindowって何UnityEditorはEditorWindowで成り立っている
  46. 46. EditorWindow
  47. 47. EditorWindow
  48. 48. EditorWindow
  49. 49. EditorWindow
  50. 50. EditorWindow
  51. 51. EditorWindow
  52. 52. EditorWindowEditorWindowの作り方EditorWindowはScriptableObject継承
  53. 53. EditorWindowEditorWindowの作り方EditorWindowはScriptableObject継承なのでCreateInstanceで生成できる
  54. 54. EditorWindowEditorWindowの作り方CreateInstance複数同じEditorWindow生成
  55. 55. EditorWindowEditorWindowの作り方CreateInstanceGetWindow<T>複数同じEditorWindow生成必ず1つのEditorWindow生成
  56. 56. EditorWindowEditorWindowの作り方GetWindowについて• 内部でCreateInstanceが呼び出される
  57. 57. EditorWindowEditorWindowの作り方GetWindowについて• 内部でCreateInstanceが呼び出される• 生成されたEditorWindowはキャッシュされる
  58. 58. EditorWindowEditorWindowの作り方GetWindowについて• 内部でCreateInstanceが呼び出される• 生成されたEditorWindowはキャッシュされる• Showが呼ばれる
  59. 59. EditorWindowEditorWindowの種類• Normal ( Show )• Aux• Popup• Utility• DropDown• ScriptableWizard• Preference用途に合わせて使い分けるhttp://docs.unity3d.com/Documentation/ScriptReference/EditorWindow.htmlhttp://anchan828.hatenablog.jp/entry/2013/02/17/020603
  60. 60. EditorWindowEditorWindowでGUIUnityのGUIStyleを使いたい
  61. 61. EditorWindowEditorWindowでGUIEditorGUIUtility.GetBuildinSkin
  62. 62. EditorWindowEditorWindowでGUIEditorGUIUtility.GetBuiltinSkinGameSceneInspectorSkin
  63. 63. EditorWindowEditorWindowでGUIEditorGUIUtility.GetBuiltinSkinGameSceneInspectorLabelButtonToggleSkinStyle
  64. 64. EditorWindowEditorWindowでGUIEditorStylesEditorGUIUtility.GetBuiltinSkinGameSceneInspectorLabelButtonToggleSkinStyle
  65. 65. EditorWindowEditorWindowでGUIEditorStylesEditorGUIUtility.GetBuiltinSkinGameSceneInspectorLabelMini ButtonToggleLabelButtonToggleSkinStyle
  66. 66. EditorWindowEditorWindowでGUIビルドインされてるGUISkinのCustomStyleを使いたいUnityのGUIStyleを使いたい
  67. 67. EditorWindowビルドインのGUISkinにあるCustomStyle名を知る
  68. 68. EditorWindow現在ではCustomStyle名を知る術はないビルドインのGUISkinにあるCustomStyle名を知る
  69. 69. EditorWindow現在ではCustomStyle名を知る術はないむりやり知るには、ScriptableObjectで保存ビルドインのGUISkinのCustomStyle名を知る
  70. 70. EditorWindowusing UnityEngine;using UnityEditor;public class BuildinSkins : ScriptableObject{public GUISkin game = EditorGUIUtility.GetBuiltinSkin (EditorSkin.Game);public GUISkin inspector = EditorGUIUtility.GetBuiltinSkin (EditorSkin.Inspector);public GUISkin scene = EditorGUIUtility.GetBuiltinSkin (EditorSkin.Scene);}AssetDatabase.CreateAsset (ScriptableObject.CreateInstance<BuildinSkins> (), "Assets/BuildinSkins.asset");BuildInSkinのCustomStyle名を知るhttp://anchan828.hatenablog.jp/entry/2013/02/17/024650
  71. 71. EditorWindow.assetで保存してInspectorで見る400以上CustomStyleがあるBuildInSkinのCustomStyle名を知る
  72. 72. EditorWindowBuildInSkinのCustomStyle名を知るただしStyle名は今後変更される可能性があるので注意.assetで保存してInspectorで見る400以上CustomStyleがある
  73. 73. EditorWindowUnityらしいEditorWindowを作成する混乱を招かないように
  74. 74. GUIを知るはじめの一歩• CustomEditor ( Attribute )• Editor ( Class )この2つを知ること
  75. 75. EditorEditorクラスって何?インスペクターとシーンビューのGUIを表示するためのクラス
  76. 76. EditorOnInspectorGUI インスペクターのGUIを描画する
  77. 77. EditorOnInspectorGUIOnPreviewGUI プレビューを描画するインスペクターのGUIを描画する
  78. 78. EditorOnInspectorGUIOnPreviewGUI プレビューを描画するインスペクターのGUIを描画するOnSceneGUI シーンビューのGUIを描画する
  79. 79. EditorOnInspectorGUI3rd Person Controller ( Prefab )
  80. 80. EditorOnInspectorGUIOnPreviewGUI3rd Person Controller ( Prefab )
  81. 81. EditorOnInspectorGUIOnPreviewGUI3rd Person Controller ( Prefab )OnSceneGUI
  82. 82. Editor3rd Person Controller ( Prefab )
  83. 83. EditorGameObjectInspectorTransformInspectorCharacterControllerEditorAnimationEditorMonoScriptInspector
  84. 84. EditorTransform Inspectorみたいなのを作るにはCustomEditorを使う
  85. 85. CustomEditorCustomEditorって何Editorを継承したクラスを使用するためのAttribute
  86. 86. CustomEditorCustomEditorって何[CustomEditor(typeof(HogeScript))][CanEditMultipleObjects]public class Custom : Editor{ public override void OnInspectorGUI () { EditorGUIUtility.LookLikeInspector (); HogeScript h = (HogeScript)target; EditorGUI.BeginChangeCheck (); string str = EditorGUILayout.TextField ("label", h.str); if (EditorGUI.EndChangeCheck ()) { h.str = str; EditorUtility.SetDirty (h); } }}Editorを継承CustomEditorCanEditMultipleObjects
  87. 87. OnInspectorGUIOnPreviewGUIこの部分を自由にカスタマイズできるようになるOnSceneGUICustomEditor
  88. 88. editorForChildClassesでサブクラス(子クラス)を拡張CustomEditorusing UnityEngine;using UnityEditor;[CustomEditor(typeof(Component), true)]public class CustomComponent : Editor{ private string memo = ""; public override void OnInspectorGUI () { EditorGUI.BeginChangeCheck (); string _memo = EditorGUILayout.TextArea (memo); if (EditorGUI.EndChangeCheck ()) { memo = _memo; } }}
  89. 89. EditorGUI使いたいけどどうするの?Editor.CreateEditorでEditor作ってOnInspectorGUIEditor.CreateEditor ( transform );
  90. 90. EditorPreview使いたいけどどうするの?Editor.CreateEditorでEditor作ってOnPreviewGUIEditor.CreateEditor ( material );
  91. 91. Editorこんな感じでEditorを生成するEditor.CreateEditor ( transform );Editor.CreateEditor ( material );CustomEditorが複数ある場合はEditor.CreateEditor ( transform, typeof(CustomTransform) );
  92. 92. EditorEditorクラスを理解することがエディタ拡張(GUI)のスタートライン
  93. 93. 各WindowのOnGUI既にUnityに実装してあるEditorWindow
  94. 94. EditorWindow
  95. 95. 各WindowのOnGUIOnGUIイベントをデリゲートに登録できる• プロジェクトウィンドウEditorApplication.projectWindowItemOnGUI• ヒエラルキーウィンドウEditorApplication.hierarchyWindowItemOnGUI
  96. 96. 各WindowのOnGUI• プロジェクトウィンドウprojectWindowItemOnGUIファイルサイズ表示
  97. 97. 各WindowのOnGUI• ヒエラルキーウィンドウhierarchyWindowItemOnGUIアイコン表示
  98. 98. Handles
  99. 99. HandlesHandles って何3D GUI を表示するためのクラス
  100. 100. Handles3D GUI の種類まだ沢山ある
  101. 101. Handlesどこで使う?Editor の OnSceneGUI で書くvoid OnSceneGUI (){ transform.position = Handles.DoPositionHandle (transform.position, Quaternion.identity);}シーンビューで使用する
  102. 102. Handles2D GUI と 3D GUI の棲み分け2D GUIを使うときはHandles.BeginGUIvoid OnSceneGUI (){ GUILayout.Label ("表示されない"); }void OnSceneGUI (){ Handles.BeginGUI (); GUILayout.Label ("表示される"); Handles.EndGUI ();}
  103. 103. HandlesSceneViewをカスタマイズしよう
  104. 104. GUIのお話終わり
  105. 105. 時間割いてまでやる必要あるの?必要か?
  106. 106. 最後のまとめ開発者自身がEditor拡張は必要!と思うこと触らせたくないものは見せるな!Editorクラスを正しく理解すること
  107. 107. Questions ?
  108. 108. ご清聴ありがとうございました

×