Unity エディタ拡張

68
Unity エディタ拡張 株式会社ハ・ン・ド プログラマ 馬場翔太

Transcript of Unity エディタ拡張

Page 1: Unity エディタ拡張

Unity エディタ拡張

株式会社ハ・ン・ド

プログラマ

馬場翔太

Page 2: Unity エディタ拡張

/68

自己紹介

• 馬場翔太

• 株式会社ハ・ン・ド

• プログラマ

• Twitter:@baba_s_

• Qiita:baba_s

2

Page 3: Unity エディタ拡張

/68

株式会社ハ・ン・ド

3

Page 4: Unity エディタ拡張

/68

株式会社ハ・ン・ド

4

Page 5: Unity エディタ拡張

/68

コガネブログ

http://baba-s.hatenablog.com/

5

Page 6: Unity エディタ拡張

/68

アジェンダ

1. エディタ拡張の基本

2. Hierarchyビューの拡張

3. Projectビューの拡張

4. Sceneビューの拡張

5. 参考アセット

6

Page 7: Unity エディタ拡張

/68

ターゲット

• エディタ拡張初学者の方

• Unity 5 以上

7

Page 8: Unity エディタ拡張

/68

アジェンダ

1. エディタ拡張の基本

2. Hierarchyビューの拡張

3. Projectビューの拡張

4. Sceneビューの拡張

5. 参考アセット

8

Page 9: Unity エディタ拡張

/68

いろいろな場所が拡張可能

9

Page 10: Unity エディタ拡張

/68

エディタ拡張の方法

1. 「Editor」フォルダを作成

2. エディタ拡張用のスクリプトを格納

3. スクリプトに処理を記述

10

Page 11: Unity エディタ拡張

/68

アジェンダ

1. エディタ拡張の基本

2. Hierarchyビューの拡張

3. Projectビューの拡張

4. Sceneビューの拡張

5. 参考アセット

11

Page 12: Unity エディタ拡張

/68

Hierarchyビューとは

シーン内に存在するオブジェクトの一覧

12

Page 13: Unity エディタ拡張

/68

Hierarchyビューの拡張サンプル

オブジェクトが編集可能かどうか変更するアイコンを表示

13

Page 14: Unity エディタ拡張

/68

Hierarchyビューの拡張サンプル

オブジェクトを複数選択できるチェックボックスを表示

14

Page 15: Unity エディタ拡張

/68

Hierarchyビューの拡張サンプル

無効なコンポーネントがアタッチされているかを表示

15

Page 16: Unity エディタ拡張

/68

Hierarchyビューの拡張サンプル

オブジェクトに設定されているアイコンを表示

16

Page 17: Unity エディタ拡張

/68

Hierarchyビューの拡張サンプル

オブジェクトが持つコンポーネントの一覧を表示

17

Page 18: Unity エディタ拡張

/68

Hierarchyビューの拡張サンプル

一行おきに色を変える

18

Page 19: Unity エディタ拡張

/68

Hierarchyビューの拡張サンプル

NGUIのUIWidgetの

depthを編集するGUIを表示

19

Page 20: Unity エディタ拡張

/68

ゲームオブジェクトのアクティブを変更できる

チェックボックスを表示してみる

Hierarchyビューの拡張

20

Page 21: Unity エディタ拡張

/68

Hierarchyビューの拡張

「Editor」フォルダを作成して

エディタ拡張用のスクリプトを格納

21

Page 22: Unity エディタ拡張

/68

Hierarchyビューの拡張

クラスを定義

22

using UnityEditor; using UnityEngine; public class ExampleClass { ... }

Page 23: Unity エディタ拡張

/68

Hierarchyビューの拡張

「EditorApplication.hierarchyWindowItemOnGUI」に

コールバック関数を登録

23

[InitializeOnLoadMethod] static void Example() { EditorApplication.hierarchyWindowItemOnGUI += OnGUI; } static void OnGUI( int instanceID, Rect selectionRect ) { ... }

Page 24: Unity エディタ拡張

/68

Hierarchyビューの拡張

「EditorUtility.InstanceIDToObject」で

ゲームオブジェクトの情報を取得

24

var obj = EditorUtility.InstanceIDToObject( instanceID ); var go = obj as GameObject; if ( go == null ) { return; } ...

Page 25: Unity エディタ拡張

/68

Hierarchyビューの拡張

「GUI.Toggle」でゲームオブジェクトの

アクティブを変更するチェックボックスを表示

25

var pos = selectionRect; pos.x = pos.xMax - 16; pos.width = 16; var newActive = GUI.Toggle( pos, go.activeSelf, string.Empty ); go.SetActive( newActive );

Page 26: Unity エディタ拡張

/68

Hierarchyビューの拡張

26

using UnityEditor; using UnityEngine; public static class ExampleClass { [InitializeOnLoadMethod] static void Example()

{ EditorApplication.hierarchyWindowItemOnGUI += OnGUI; } static void OnGUI( int instanceID, Rect selectionRect ) {

var obj = EditorUtility.InstanceIDToObject( instanceID ); var go = obj as GameObject; if ( go == null ) { return; } var pos = selectionRect; pos.x = pos.xMax - 16; pos.width = 16; var newActive = GUI.Toggle( pos, go.activeSelf, string.Empty ); go.SetActive( newActive );

} }

Page 27: Unity エディタ拡張

/68

Hierarchyビューの拡張サンプル一覧

オブジェクトのアクティブを変更するチェックボックスを表示

http://baba-s.hatenablog.com/entry/2015/04/28/121747

オブジェクトが編集可能かどうか変更するアイコンを表示

http://baba-s.hatenablog.com/entry/2015/04/27/101143

オブジェクトを複数選択できるチェックボックスを表示

http://baba-s.hatenablog.com/entry/2015/04/29/133141

無効なコンポーネントがアタッチされているかを表示

http://baba-s.hatenablog.com/entry/2015/05/04/171926

オブジェクトに設定されているアイコンを表示

http://baba-s.hatenablog.com/entry/2015/05/05/103647

27

Page 28: Unity エディタ拡張

/68

Hierarchyビューの拡張サンプル一覧

オブジェクトが持つコンポーネントの一覧を表示

http://baba-s.hatenablog.com/entry/2015/05/08/114119

一行おきに色を変える

http://baba-s.hatenablog.com/entry/2015/05/09/122713

NGUIのUIWidgetのdepthを編集するGUIを表示

http://baba-s.hatenablog.com/entry/2015/05/25/125552

28

Page 29: Unity エディタ拡張

/68

アジェンダ

1. エディタ拡張の基本

2. Hierarchyビューの拡張

3. Projectビューの拡張

4. Sceneビューの拡張

5. 参考アセット

29

Page 30: Unity エディタ拡張

/68

Projectビューとは

プロジェクトに含まれるリソースの一覧

30

Page 31: Unity エディタ拡張

/68

Projectビューの拡張サンプル

拡張子を表示

31

Page 32: Unity エディタ拡張

/68

Projectビューの拡張サンプル

容量を表示

32

Page 33: Unity エディタ拡張

/68

Projectビューの拡張サンプル

ファイル数を表示

33

Page 34: Unity エディタ拡張

/68

Projectビューの拡張サンプル

テクスチャのプレビューを表示

34

Page 35: Unity エディタ拡張

/68

Projectビューの拡張サンプル

一行おきに色を変える

35

Page 36: Unity エディタ拡張

/68

アセットが管理されているフォルダを

エクスプローラで開くことができるボタンを表示してみる

Projectビューの拡張

36

Page 37: Unity エディタ拡張

/68

Projectビューの拡張

「Editor」フォルダを作成して

エディタ拡張用のスクリプトを格納

37

Page 38: Unity エディタ拡張

/68

Projectビューの拡張

クラスを定義

38

using UnityEditor; using UnityEngine; public class ExampleClass { ... }

Page 39: Unity エディタ拡張

/68

Projectビューの拡張

「EditorApplication.projectWindowItemOnGUI」に

コールバック関数を登録

39

[InitializeOnLoadMethod] static void Example() { EditorApplication.projectWindowItemOnGUI += OnGUI; } static void OnGUI( string guid, Rect selectionRect ) { ... }

Page 40: Unity エディタ拡張

/68

Projectビューの拡張

「AssetDatabase.GUIDToAssetPath」で

アセットが存在するファイルのパスを取得

40

var path = AssetDatabase.GUIDToAssetPath( guid ); path = path.Replace( “/”, “¥¥” ); ...

Page 41: Unity エディタ拡張

/68

Projectビューの拡張

「GUI.Button」でフォルダを開くためのボタンを表示

41

var pos = selectionRect; pos.x = pos.xMax - 16; pos.width = 16; if ( !GUI.Button( pos, "!" ) ) { return; } ...

Page 42: Unity エディタ拡張

/68

Projectビューの拡張

「Process.Start」でフォルダを開く

42

Process.Start( "explorer.exe", "/select," + path );

Page 43: Unity エディタ拡張

/68

Projectビューの拡張

43

using System.Diagnostics; using UnityEditor; using UnityEngine; public class ExampleClass {

[InitializeOnLoadMethod] static void Example() { EditorApplication.projectWindowItemOnGUI += OnGUI; } static void OnGUI( string guid, Rect selectionRect ) {

var pos = selectionRect; pos.x = pos.xMax - 16; pos.width = 16; if ( !GUI.Button( pos, "!" ) ){ return; } var path = AssetDatabase.GUIDToAssetPath( guid ); path = path.Replace( "/", "¥¥" ); Process.Start( "explorer.exe", "/select," + path );

} }

Page 45: Unity エディタ拡張

/68

Projectビューの拡張サンプル一覧

一行おきに色を変える

http://baba-s.hatenablog.com/entry/2015/05/16/115549

45

Page 46: Unity エディタ拡張

/68

アジェンダ

1. エディタ拡張の基本

2. Hierarchyビューの拡張

3. Projectビューの拡張

4. Sceneビューの拡張

5. 参考アセット

46

Page 47: Unity エディタ拡張

/68

シーンの編集画面

Sceneビューとは

47

Page 48: Unity エディタ拡張

/68

Sceneビューの拡張サンプル

カメラを初期位置に戻すボタンを表示

48

Page 49: Unity エディタ拡張

/68

Sceneビューの拡張サンプル

Sceneビューと

Gameビューの

カメラを同期

49

Page 50: Unity エディタ拡張

/68

ボタンを表示してみる

Sceneビューの拡張

50

Page 51: Unity エディタ拡張

/68

Sceneビューの拡張

「Editor」フォルダを作成して

エディタ拡張用のスクリプトを格納

51

Page 52: Unity エディタ拡張

/68

Sceneビューの拡張

クラスを定義

52

using UnityEditor; using UnityEngine; public class ExampleClass { ... }

Page 53: Unity エディタ拡張

/68

Sceneビューの拡張

「SceneView.onSceneGUIDelegate」に

コールバック関数を登録

53

[InitializeOnLoadMethod] static void Example() { SceneView.onSceneGUIDelegate += OnGUI; } static void OnGUI( SceneView sceneView ) { ... }

Page 54: Unity エディタ拡張

/68

Sceneビューの拡張

「GUI.WindowFunction」で表示するボタンの一覧を作成

54

GUI.WindowFunction func = id => {

if ( GUILayout.Button( "Shaded" ) ) { // TODO } else if ( GUILayout.Button( "Wireframe" ) ) { // TODO }

}; ...

Page 55: Unity エディタ拡張

/68

Sceneビューの拡張

「GUILayout.Window」でボタンの一覧を表示

55

var rect = new Rect( 8, 24, 80, 0 ); GUILayout.Window( 1, rect, func, string.Empty );

Page 56: Unity エディタ拡張

/68

Sceneビューの拡張

56

using UnityEditor; using UnityEngine; public class ExampleClass {

[InitializeOnLoadMethod] static void Example() { SceneView.onSceneGUIDelegate += OnGUI; } static void OnGUI( SceneView sceneView ) { GUI.WindowFunction func = id =>

{ if ( GUILayout.Button( "Shaded" ) ) {} else if ( GUILayout.Button( “Wireframe" ) ) {}

}; var rect = new Rect( 8, 24, 80, 0 ); GUILayout.Window( 1, rect, func, string.Empty );

} }

Page 57: Unity エディタ拡張

/68

Sceneビューの拡張サンプル一覧

ボタンを表示

http://baba-s.hatenablog.com/entry/2015/06/19/103708

カメラを初期位置に戻すボタンを表示

http://baba-s.hatenablog.com/entry/2015/05/11/100630

SceneビューとGameビューのカメラを同期

https://github.com/anchan828/unitejapan2014

57

Page 58: Unity エディタ拡張

/68

アジェンダ

1. エディタ拡張の基本

2. Hierarchyビューの拡張

3. Projectビューの拡張

4. Sceneビューの拡張

5. 参考アセット

58

Page 59: Unity エディタ拡張

/68

参考アセット

• QHierarchy

• Favorites Tab[s]

• UNITY EDITOR ENHANCEMENTS

59

Page 60: Unity エディタ拡張

/68

QHierarchy

https://www.assetstore.unity3d.com/jp/#!/content/28577

60

Page 61: Unity エディタ拡張

/68

QHierarchy

61

Page 62: Unity エディタ拡張

/68

QHierarchy

62

Page 63: Unity エディタ拡張

/68

Favorites Tab[s]

https://www.assetstore.unity3d.com/jp/#!/content/4237

63

Page 64: Unity エディタ拡張

/68

Favorites Tab[s]

64

Page 66: Unity エディタ拡張

/68

まとめ

• エディタ拡張は簡単

• Hierarchyビューは拡張可能

• Projectビューも拡張可能

• Sceneビューも拡張可能

• 既に便利なアセットがたくさん

66

Page 67: Unity エディタ拡張

/68

知って得するUnity エディタ拡張編

http://www.slideshare.net/shotababa359/unity-32294734

67

Page 68: Unity エディタ拡張

/68 68

ありがとうございました