< Return to Video

Building a Custom Inspector - Unity Official Tutorials

  • 0:00 - 0:04
    Unity ではカスタムインスペクターを作成して
  • 0:04 - 0:06
    スクリプト中の どのデータを表示するか
  • 0:06 - 0:08
    そしてエディター上でどう表示するかを制御できます
  • 0:09 - 0:12
    エディターを拡張できるということは
  • 0:12 - 0:15
    スクリプトがより強力かつ柔軟に使えるということで
  • 0:15 - 0:17
    ひいてはワークフローの改良にもつながります
  • 0:18 - 0:20
    たとえばレベルアップシステムを作っているとしましょう
  • 0:20 - 0:24
    これは経験値を 750 ポイント獲得すると
  • 0:24 - 0:25
    レベルがひとつ上がるシステムであるとします
  • 0:26 - 0:29
    レベルが低いうちは計算も簡単ですが
  • 0:29 - 0:32
    高レベルになるにつれてだんだんと
  • 0:32 - 0:34
    計算がめんどくさくなってきます
  • 0:34 - 0:36
    そこでカスタムインスペクターを
  • 0:36 - 0:38
    使って この作業を簡単にしてみましょう
  • 0:39 - 0:41
    ここに LevelScript というスクリプトがあります
  • 0:42 - 0:44
    このスクリプトが先ほどの経験値ベースの
  • 0:44 - 0:46
    レベルアップシステムです
  • 0:47 - 0:50
    スクリプトで最初に目に入るのが experience 変数ですね
  • 0:50 - 0:52
    この関数はキャラクターが獲得した
  • 0:52 - 0:54
    経験値の累計を格納します
  • 0:55 - 0:58
    次に Level というプロパティがあります
  • 0:59 - 1:01
    このプロパティは 現在の経験値を取り
  • 1:01 - 1:03
    対応するレベルを返します
  • 1:04 - 1:06
    プロパティの詳細については
  • 1:06 - 1:08
    下記リンク先にあるプロパティのレッスンをご覧ください
  • 1:10 - 1:13
    さて空っぽのゲームオブジェクトを配置して
  • 1:13 - 1:15
    それに LevelScript をアタッチしてみました
  • 1:15 - 1:17
    Experience(経験値)プロパティがインスペクターに
  • 1:17 - 1:19
    表示されているのが見えますね
  • 1:20 - 1:24
    経験値が 0 ならレベルを計算するのも簡単ですが
  • 1:24 - 1:27
    49865 だったらどうでしょう?
  • 1:28 - 1:30
    ここでインスペクターをカスタマイズして
  • 1:30 - 1:32
    レベルを表示してみましょう
  • 1:33 - 1:35
    インスペクターをカスタマイズするにはまずエディターの
  • 1:35 - 1:38
    スクリプトを格納するフォルダを作成する必要があります
  • 1:38 - 1:40
    Unity に認識させるためこのフォルダの名前は
  • 1:40 - 1:42
    Editor としてください
  • 1:43 - 1:45
    そしてフォルダ内に新規スクリプトを作成します
  • 1:46 - 1:48
    このスクリプトにカスタムインスペクターを含めます
  • 1:50 - 1:51
    名前は自由に付けられますが
  • 1:51 - 1:53
    今回は内容に沿って
  • 1:53 - 1:56
    LevelScriptEditor としましょう
  • 1:59 - 2:01
    それではこの LevelScriptEditor に
  • 2:01 - 2:03
    カスタムインスペクターを書いていきます
  • 2:05 - 2:08
    エディター固有のコードを書くときはまず
  • 2:08 - 2:10
    UnityEditor 名前空間を使うことを
  • 2:10 - 2:12
    宣言しなくてはいけません
  • 2:13 - 2:15
    名前空間の詳細については
  • 2:15 - 2:18
    下記リンク先にある名前空間のレッスンをご覧ください
  • 2:19 - 2:21
    次に継承元を MonoBehaviour から
  • 2:21 - 2:23
    Editor に変更します
  • 2:23 - 2:26
    エディタの拡張は基本的にこうして行います
  • 2:28 - 2:30
    継承の詳細については
  • 2:30 - 2:32
    下記リンク先にある継承のレッスンをご覧ください
  • 2:34 - 2:36
    さてここからは カスタムインスペクターに
  • 2:36 - 2:38
    属性を与えて どのスクリプトを
  • 2:38 - 2:40
    カスタマイズしているのかを示します
  • 2:41 - 2:43
    構文はまず開き角カッコ 続けて
  • 2:43 - 2:45
    キーワードCustomEditor
  • 2:45 - 2:48
    そしてカッコ
  • 2:50 - 2:53
    カッコの中にはキーワード
  • 2:53 - 2:55
    typeOf で型を指定します
  • 2:56 - 2:59
    そしてその中にさらにカッコの対を作り
  • 2:59 - 3:01
    スクリプトの名前を入力します
  • 3:02 - 3:04
    この例では ご覧のとおり
  • 3:04 - 3:07
    カスタマイズするのは LevelScript です
  • 3:09 - 3:11
    そして行を 閉じ角カッコで締めます
  • 3:13 - 3:16
    続いて LevelScriptEditor クラスの内部に
  • 3:16 - 3:19
    メソッド public override void OnInspectorGUI
  • 3:19 - 3:21
    を作ります
  • 3:22 - 3:24
    このメソッドはインスペクターが Unity 上で描画される際に
  • 3:24 - 3:26
    毎回呼び出されます
  • 3:27 - 3:29
    override キーワードの
  • 3:29 - 3:31
    挙動の詳細については
  • 3:31 - 3:34
    下記リンク先にあるオーバーライドのレッスンをご覧ください
  • 3:37 - 3:39
    これで LevelScript のインスペクターが
  • 3:39 - 3:41
    変更されました
  • 3:41 - 3:43
    この状態で Unity に戻ると
  • 3:43 - 3:45
    スクリプトのプロパティがひとつも
  • 3:45 - 3:47
    インスペクタービューに表示されないのがわかります
  • 3:49 - 3:51
    これではぜんぜん便利でないので
  • 3:51 - 3:53
    カスタマイズを進めていきましょう
  • 3:57 - 3:59
    LevelScriptEditor に戻って
  • 3:59 - 4:02
    インスペクターで表示するフィールドを作ってみます
  • 4:03 - 4:06
    OnInspectorGUI メソッドの内部には自動的に LevelScript
  • 4:06 - 4:10
    オブジェクトへの参照である target が含まれます
  • 4:11 - 4:13
    しかしこれは適切な型の変数に
  • 4:13 - 4:15
    キャストするまでは使えません
  • 4:16 - 4:18
    なのでまず myLevelScript という
  • 4:18 - 4:21
    LevelScript 変数を作り
  • 4:22 - 4:25
    継承した変数 target とイコールでつなぎます
  • 4:28 - 4:30
    そして最後に target 変数を
  • 4:30 - 4:32
    LevelScript 変数としてキャストします
  • 4:32 - 4:35
    これはカッコで囲んだ LevelScript を隣に書いて表現します
  • 4:38 - 4:40
    さてここでインスペクターに表示したい情報は
  • 4:41 - 4:43
    キャラクターの獲得した経験値合計と
  • 4:43 - 4:45
    現在のレベルの 2 つです
  • 4:47 - 4:49
    インスペクターに int フィールドを作るときは
  • 4:49 - 4:52
    EditorGUILayout クラスを使います
  • 4:53 - 4:56
    構文は 最初にクラス名
  • 4:56 - 4:58
    EditorGUILayout 続けて.(ピリオド)
  • 4:59 - 5:01
    そしてメソッド IntField
  • 5:01 - 5:03
    最後にカッコ
  • 5:06 - 5:09
    カッコの中にはフィールド名と
  • 5:09 - 5:11
    フィールドの値を指定します
  • 5:11 - 5:15
    今回はフィールド名に Experience(経験値)
  • 5:15 - 5:18
    値に myLevelScript の experience 変数の値を
  • 5:18 - 5:20
    指定します
  • 5:22 - 5:24
    このフィールドに experience 変数への書き込みも
  • 5:24 - 5:28
    させたいので 行全体を myLevelScript.experience と
  • 5:28 - 5:31
    イコールでつなぎます
  • 5:33 - 5:36
    Level フィールドもだいたい同じように処理していきます
  • 5:36 - 5:38
    ただし今回は
  • 5:38 - 5:42
    EditorGUILayout クラスの LabelField メソッドを使います
  • 5:44 - 5:46
    ラベルは読み取り専用なので
  • 5:46 - 5:48
    ユーザーがインスペクター上でレベルを
  • 5:48 - 5:50
    手動入力してしまうことは起きません
  • 5:52 - 5:55
    LabelField メソッドのカッコ内には
  • 5:56 - 5:58
    Level という名前と
  • 5:58 - 6:01
    値 myLevelScript.Level を指定します
  • 6:03 - 6:06
    ただしラベルのコントロールは文字列である必要があるので
  • 6:06 - 6:08
    ここで Level プロパティに対して
  • 6:08 - 6:10
    ToString メソッドを使い
  • 6:10 - 6:11
    文字列に変換します
  • 6:13 - 6:16
    これでカスタムインスペクターは完成です
  • 6:17 - 6:20
    さっそく Unity に戻って確認してみましょう
  • 6:22 - 6:24
    ご覧のとおり インスペクターには
  • 6:24 - 6:29
    経験値が 49865 のとき
  • 6:29 - 6:31
    レベルは 66 と表示されました
  • 6:32 - 6:34
    そして この経験値のフィールドで
  • 6:34 - 6:36
    値を変更していくと
  • 6:36 - 6:39
    自動的にレベルの値も変更されていきます
  • 6:42 - 6:44
    このようにスクリプト向けにエディターを
  • 6:45 - 6:47
    カスタマイズすると 手動では面倒くさい
  • 6:47 - 6:50
    さまざまな事柄が自動化できるわけです
Title:
Building a Custom Inspector - Unity Official Tutorials
Description:

more » « less
Video Language:
English
Duration:
06:53

Japanese subtitles

Revisions