unity エディタ拡張

Post on 13-Aug-2015

1.258 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Unity エディタ拡張

株式会社ハ・ン・ド

プログラマ

馬場翔太

/68

自己紹介

• 馬場翔太

• 株式会社ハ・ン・ド

• プログラマ

• Twitter:@baba_s_

• Qiita:baba_s

2

/68

株式会社ハ・ン・ド

3

/68

株式会社ハ・ン・ド

4

/68

コガネブログ

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

5

/68

アジェンダ

1. エディタ拡張の基本

2. Hierarchyビューの拡張

3. Projectビューの拡張

4. Sceneビューの拡張

5. 参考アセット

6

/68

ターゲット

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

• Unity 5 以上

7

/68

アジェンダ

1. エディタ拡張の基本

2. Hierarchyビューの拡張

3. Projectビューの拡張

4. Sceneビューの拡張

5. 参考アセット

8

/68

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

9

/68

エディタ拡張の方法

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

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

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

10

/68

アジェンダ

1. エディタ拡張の基本

2. Hierarchyビューの拡張

3. Projectビューの拡張

4. Sceneビューの拡張

5. 参考アセット

11

/68

Hierarchyビューとは

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

12

/68

Hierarchyビューの拡張サンプル

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

13

/68

Hierarchyビューの拡張サンプル

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

14

/68

Hierarchyビューの拡張サンプル

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

15

/68

Hierarchyビューの拡張サンプル

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

16

/68

Hierarchyビューの拡張サンプル

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

17

/68

Hierarchyビューの拡張サンプル

一行おきに色を変える

18

/68

Hierarchyビューの拡張サンプル

NGUIのUIWidgetの

depthを編集するGUIを表示

19

/68

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

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

Hierarchyビューの拡張

20

/68

Hierarchyビューの拡張

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

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

21

/68

Hierarchyビューの拡張

クラスを定義

22

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

/68

Hierarchyビューの拡張

「EditorApplication.hierarchyWindowItemOnGUI」に

コールバック関数を登録

23

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

/68

Hierarchyビューの拡張

「EditorUtility.InstanceIDToObject」で

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

24

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

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

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

} }

/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

/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

/68

アジェンダ

1. エディタ拡張の基本

2. Hierarchyビューの拡張

3. Projectビューの拡張

4. Sceneビューの拡張

5. 参考アセット

29

/68

Projectビューとは

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

30

/68

Projectビューの拡張サンプル

拡張子を表示

31

/68

Projectビューの拡張サンプル

容量を表示

32

/68

Projectビューの拡張サンプル

ファイル数を表示

33

/68

Projectビューの拡張サンプル

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

34

/68

Projectビューの拡張サンプル

一行おきに色を変える

35

/68

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

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

Projectビューの拡張

36

/68

Projectビューの拡張

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

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

37

/68

Projectビューの拡張

クラスを定義

38

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

/68

Projectビューの拡張

「EditorApplication.projectWindowItemOnGUI」に

コールバック関数を登録

39

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

/68

Projectビューの拡張

「AssetDatabase.GUIDToAssetPath」で

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

40

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

/68

Projectビューの拡張

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

41

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

/68

Projectビューの拡張

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

42

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

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

} }

/68

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

一行おきに色を変える

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

45

/68

アジェンダ

1. エディタ拡張の基本

2. Hierarchyビューの拡張

3. Projectビューの拡張

4. Sceneビューの拡張

5. 参考アセット

46

/68

シーンの編集画面

Sceneビューとは

47

/68

Sceneビューの拡張サンプル

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

48

/68

Sceneビューの拡張サンプル

Sceneビューと

Gameビューの

カメラを同期

49

/68

ボタンを表示してみる

Sceneビューの拡張

50

/68

Sceneビューの拡張

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

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

51

/68

Sceneビューの拡張

クラスを定義

52

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

/68

Sceneビューの拡張

「SceneView.onSceneGUIDelegate」に

コールバック関数を登録

53

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

/68

Sceneビューの拡張

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

54

GUI.WindowFunction func = id => {

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

}; ...

/68

Sceneビューの拡張

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

55

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

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

} }

/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

/68

アジェンダ

1. エディタ拡張の基本

2. Hierarchyビューの拡張

3. Projectビューの拡張

4. Sceneビューの拡張

5. 参考アセット

58

/68

参考アセット

• QHierarchy

• Favorites Tab[s]

• UNITY EDITOR ENHANCEMENTS

59

/68

QHierarchy

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

60

/68

QHierarchy

61

/68

QHierarchy

62

/68

Favorites Tab[s]

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

63

/68

Favorites Tab[s]

64

/68

まとめ

• エディタ拡張は簡単

• Hierarchyビューは拡張可能

• Projectビューも拡張可能

• Sceneビューも拡張可能

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

66

/68

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

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

67

/68 68

ありがとうございました

top related