Unity Editor基本編(二):カスタムインspectorパネル
16728 ワード
本論文の参照:http://mp.weixin.qq.com/s/Y5Rn5Y-5o-SB73z7Kc5f_Q 本文は私の学习の上でつながったノートのために変えました.以上のリンクをクリックして原文を调べてください.
ユーザー定義のInspectorプロパティパネル
公式接続:http://www.ceeger.com/Script/Editor/Editor.html
エディトトリガーLayoutエディタのインターフェースレイアウト これはエディタークラスです.使いたいなら、それをプロジェクトディレクトリの下に置く必要があります.エディター類はUnityEditorの名前空間にあります.したがって、C((zhi)脚本を使うときは、スクリプトの前に「using UnityEditor」を参照してください.
次に作成を開始した私たち自身のInpectorは、カスタムInpectorパネルに対してEditoGUILayoutのAPIを参照することができます.
Begin FadeGroup
隠し/表示可能なグループを開始し、この変換を有効にします.
Begin Horizontal
水平のグループを開始し、その矩形を取得します.
Begin ScrrollView
自動レイアウトのscrollviewを起動します.
Begin TogleGroup
一つのスイッチで垂直なグループを起動して、すべてのコントロールを同時に有効または無効にします.
Begin Vetical
垂直なグループを開始し、その矩形を取得します.
Bounds Field
中心と区域を境界域に入れる.
Bounds IntField
弾性のある領域に入るために位置と大きさの場を作製した.
ColorField
色を選択するためのフィールドを作成します.
CurveField
アニメーション曲線を編集するための領域を作成します.
DelayedDouble Field
ダブル精度の数を入力するための遅延テキストフィールドを作成します.
Delayed Float Field
浮動小数点に入るための遅延テキストフィールドを設定します.
Delayed Int Field
入力整数の遅延テキストフィールドを作成します.
DelayedText Field
テキストフィールドの遅延を作成します.
Double Field
ダブル値を入力するテキストフィールドを作成します.
Dropdown Button
ボタンを作って、マウスに反応して、自分のドロップダウンを表示します.
EndFadeGroup
開始グループから開始するグループを閉じます.
EndHorizontal
レベルを開始するグループを閉じます.
EndScrrollView
scrollviewを終了し、Begin ScrrollViewを起動します.
EndTogleGroup
グループを閉じて、最初のグループから始まります.
EndVerical
垂直に開始するグループを閉じます.
EnumFlags Field
クリックすると、列挙の種類の値が付いたオプションメニューが表示されます.値が0のオプションは「なし」で、値0のオプションは常にメニューの上部に表示されます.値0と0の名称は、これらの値をenumタイプで定義することによって過度に使用することができます.
EnumPopp
enumポップアップ選択フィールドを作成します.
Flooat Field
浮動値を入力するためにテキストフィールドを作成します.
Foldout
左に折りたたみ矢印でラベルを作ります.
Get Control Rect
エディタコントロールのrectを取得します.
HelpBox
メッセージ付きヘルプボックスをユーザに提供する.
インspectoTitlebar
チェックウィンドウと似たタイトルバーを作成します.
Int Field
入力整数のテキスト枠を作成します.
IntPopp
整数ポップアップ選択フィールドを作成します.
IntSlider
スライダーを作成します.ユーザはドラッグして最小値と最大値の間の整数値を変更できます.
Label Field
ラベルフィールドを作成します.(読み取り専用情報を表示するために使用します.)
Layer Field
レイヤー選択フィールドを作ります.
LongField
長い整数を入力するためにテキストフィールドを作成します.
Mask Field
仮面の場所を作る.
MinMaxSlider
特殊なスライダを作成します.ユーザーはそれを使って最小値と最大値の範囲を指定できます.
Object Field
任意のオブジェクトタイプを受信するフィールドを作成します.
Password Field
テキストフィールドを作成します.ユーザはパスワードを入力できます.
ポプラ
共通のポップアップ選択フィールドを作成します.
PrefixLabel
いくつかのコントロールの前にラベルを作ります.
ProptyField
シリアル化された属性のフィールドを作成します.
RectField
Rectを入力するためにX、Y、W、Hフィールドを作成します.
RectInt Field
X,Y,W&Hフィールドを作り、再着色します.
Selectabl Label
選択可能なラベルフィールドを作成します.(コピー&ペースト可能な読み取り専用情報を表示するために)
スライダー
スライダーを作成します.ユーザはドラッグして最小値と最大値の間の値を変更できます.
スペース
前のコントロールと下のコントロールの間に小さなスペースを作ります.
TagField
選択フィールドをマークします.
TextArea
テキスト範囲を作成します.
Text Field
テキストボックスを作成します.
Togg le
を選択します
TogleLeft
スイッチは左にあります.ラベルはすぐ右にあります.
V ector 2 Field
X&Yフィールドを作成して、ベクトル2を入力します.
Vector 2 IntField
X&Y整数フィールドを作成して、Vector 2 Intを入力します.
V ector 3 Field
X、Y&Zフィールドを作成してベクトルを入力します.
Vector 3 IntField
X、Y&Z整数フィールドを入力して、Vector 3 Intを入力します.
V ector 4 Field
X、Y、Z&Wフィールドを作って、ベクトル図を入力します.
最終効果:
準備: Scripptsフォルダに新しいC〓〓スクリプトを作成し、「Player」と名づけて、コードを追加します.
よく使うカスタムInspectorのインターフェースレイアウトの属性:
現在はEditorフォルダにC〓スクリプトを作成しています.
1.Verical-垂直レイアウト デフォルトのインターフェースレイアウトは垂直配置ですが、番組の効果のためには、やはりそれを書いたほうがいいです.設定要素は垂直配列のために、この兄弟を使って声明します.
上の図に示すように、ページ全体の要素は垂直方向に配置されています.
2.Horizontal-水平レイアウト
設定要素を水平配列にするには、この兄弟を使って宣言します.
私たちは上のサークルで選んだところにHorizontalという兄弟を使っていますので、この兄弟の中の要素は全部水平方向に並べられています.
3.空行 Editor GUILayout.Spaceを使用して、2つの要素の間に1つの行を空けることができます.
4.各種フィールドの描画 フィールドを描画するには、以下の方法があります.
1はラベルフィールドです 2は整形フィールドです 3はテキストフィールドです 4.テキスト範囲
5.スライダ、プログレスバー 1.スライダ:EditorigILayout.Slider() スライダーを作成するユーザはドラッグして値を変更できます.最小と最大の間に
エディトトリガーLayout.スライダー()を描画するために使用されています.上から分かります.
最初のパラメータはスライダの名前です. 二つ目のパラメータはスライダが変更する値です. 3番目と4番目のパラメータはスライダの範囲です. 効果は下図の通りです.
2/進捗条:EditoGUI.ProgessBar() 進捗バーを作成します.
EditoGUI.ProgessBar()は、プログレスバーを作成するために使用されています.
最初のパラメータは、プログレスバーのサイズを設定し、タイプはRectです. 2番目のパラメータは表示の値を設定します. 3番目のパラメータはプログレスバーの名前です.
ヒント: 1.最初のパラメータは、GUI LayoutUtility.GetRect()ツール類のGetRect()方法を使って設定された長方形枠を返します.ケースには50*50サイズの矩形枠を設けました.
6.ヘルプボックス ヘルプボックス:EditorigILayout.HelpBox()
EditorigILayout.HelpBoxは箱を描くために使われています.その後、箱の中にヒント情報が表示されます.上図から分かります.
最初のパラメータは着信メッセージです. 2番目のパラメータはメッセージの種類です.
効果図:
6.灰色地帯(禁止区域) EditoGUI.BeginaDispladGroupは、Trueの時に無効にすることができる一連の描画表示を作成します. EditorigILayout.BeginnagleGroupはスイッチボタンを持つ垂直グループを開始し、ここですぐにコントロールを有効または無効にします. 例えば:
グループ描画制御を無効にします.(EditorAppleication.isPlayingOrWillCharePlaymodeを使用して実行する場合は操作を無効にします.)
ユーザー定義のInspectorプロパティパネル
公式接続:http://www.ceeger.com/Script/Editor/Editor.html
エディトトリガーLayoutエディタのインターフェースレイアウト これはエディタークラスです.使いたいなら、それをプロジェクトディレクトリの下に置く必要があります.エディター類はUnityEditorの名前空間にあります.したがって、C((zhi)脚本を使うときは、スクリプトの前に「using UnityEditor」を参照してください.
次に作成を開始した私たち自身のInpectorは、カスタムInpectorパネルに対してEditoGUILayoutのAPIを参照することができます.
Begin FadeGroup
隠し/表示可能なグループを開始し、この変換を有効にします.
Begin Horizontal
水平のグループを開始し、その矩形を取得します.
Begin ScrrollView
自動レイアウトのscrollviewを起動します.
Begin TogleGroup
一つのスイッチで垂直なグループを起動して、すべてのコントロールを同時に有効または無効にします.
Begin Vetical
垂直なグループを開始し、その矩形を取得します.
Bounds Field
中心と区域を境界域に入れる.
Bounds IntField
弾性のある領域に入るために位置と大きさの場を作製した.
ColorField
色を選択するためのフィールドを作成します.
CurveField
アニメーション曲線を編集するための領域を作成します.
DelayedDouble Field
ダブル精度の数を入力するための遅延テキストフィールドを作成します.
Delayed Float Field
浮動小数点に入るための遅延テキストフィールドを設定します.
Delayed Int Field
入力整数の遅延テキストフィールドを作成します.
DelayedText Field
テキストフィールドの遅延を作成します.
Double Field
ダブル値を入力するテキストフィールドを作成します.
Dropdown Button
ボタンを作って、マウスに反応して、自分のドロップダウンを表示します.
EndFadeGroup
開始グループから開始するグループを閉じます.
EndHorizontal
レベルを開始するグループを閉じます.
EndScrrollView
scrollviewを終了し、Begin ScrrollViewを起動します.
EndTogleGroup
グループを閉じて、最初のグループから始まります.
EndVerical
垂直に開始するグループを閉じます.
EnumFlags Field
クリックすると、列挙の種類の値が付いたオプションメニューが表示されます.値が0のオプションは「なし」で、値0のオプションは常にメニューの上部に表示されます.値0と0の名称は、これらの値をenumタイプで定義することによって過度に使用することができます.
EnumPopp
enumポップアップ選択フィールドを作成します.
Flooat Field
浮動値を入力するためにテキストフィールドを作成します.
Foldout
左に折りたたみ矢印でラベルを作ります.
Get Control Rect
エディタコントロールのrectを取得します.
HelpBox
メッセージ付きヘルプボックスをユーザに提供する.
インspectoTitlebar
チェックウィンドウと似たタイトルバーを作成します.
Int Field
入力整数のテキスト枠を作成します.
IntPopp
整数ポップアップ選択フィールドを作成します.
IntSlider
スライダーを作成します.ユーザはドラッグして最小値と最大値の間の整数値を変更できます.
Label Field
ラベルフィールドを作成します.(読み取り専用情報を表示するために使用します.)
Layer Field
レイヤー選択フィールドを作ります.
LongField
長い整数を入力するためにテキストフィールドを作成します.
Mask Field
仮面の場所を作る.
MinMaxSlider
特殊なスライダを作成します.ユーザーはそれを使って最小値と最大値の範囲を指定できます.
Object Field
任意のオブジェクトタイプを受信するフィールドを作成します.
Password Field
テキストフィールドを作成します.ユーザはパスワードを入力できます.
ポプラ
共通のポップアップ選択フィールドを作成します.
PrefixLabel
いくつかのコントロールの前にラベルを作ります.
ProptyField
シリアル化された属性のフィールドを作成します.
RectField
Rectを入力するためにX、Y、W、Hフィールドを作成します.
RectInt Field
X,Y,W&Hフィールドを作り、再着色します.
Selectabl Label
選択可能なラベルフィールドを作成します.(コピー&ペースト可能な読み取り専用情報を表示するために)
スライダー
スライダーを作成します.ユーザはドラッグして最小値と最大値の間の値を変更できます.
スペース
前のコントロールと下のコントロールの間に小さなスペースを作ります.
TagField
選択フィールドをマークします.
TextArea
テキスト範囲を作成します.
Text Field
テキストボックスを作成します.
Togg le
を選択します
TogleLeft
スイッチは左にあります.ラベルはすぐ右にあります.
V ector 2 Field
X&Yフィールドを作成して、ベクトル2を入力します.
Vector 2 IntField
X&Y整数フィールドを作成して、Vector 2 Intを入力します.
V ector 3 Field
X、Y&Zフィールドを作成してベクトルを入力します.
Vector 3 IntField
X、Y&Z整数フィールドを入力して、Vector 3 Intを入力します.
V ector 4 Field
X、Y、Z&Wフィールドを作って、ベクトル図を入力します.
最終効果:
準備: Scripptsフォルダに新しいC〓〓スクリプトを作成し、「Player」と名づけて、コードを追加します.
public class Player : MonoBehaviour {
public int id;
public string playerName;
public string backStory;
public float health;
public float damage;
public float weaponDamage1, weaponDamage2;
public string shoeName;
public int shoeSize;
public string shoeType;
void Start()
{
health = 50;
}
}
Playerクラスは、ID、名前、背景物語、ライフ値、ダメージなど、Playerの基礎情報を記録しています.よく使うカスタムInspectorのインターフェースレイアウトの属性:
現在はEditorフォルダにC〓スクリプトを作成しています.
using System.Collections;
using UnityEngine;
using UnityEditor;
//CustomEditor(typeof())
[CustomEditor(typeof(Player))]
// Editor, UnityEditor
public class PlayerInspector : Editor {
Player player;
bool showWeapons;
void OnEnable()
{
// Inspector
player = (Player)target;
}
//
public override void OnInspectorGUI()
{
//
EditorGUILayout.BeginVertical();
//
EditorGUILayout.Space();
EditorGUILayout.Space();
// palyer
EditorGUILayout.LabelField("Base Info");
player.id = EditorGUILayout.IntField("Player ID",player.id);
player.playerName = EditorGUILayout.TextField("PlayerName",player.playerName);
//
EditorGUILayout.Space();
EditorGUILayout.Space();
EditorGUILayout.Space();
// Player
EditorGUILayout.LabelField("Back Story");
player.backStory = EditorGUILayout.TextArea(player.backStory,GUILayout.MinHeight(100));
//
EditorGUILayout.Space();
EditorGUILayout.Space();
EditorGUILayout.Space();
// Player
player.health = EditorGUILayout.Slider("Health",player.health,0,100);
//
if(player.health<20){
GUI.color = Color.red;
}
else if(player.health>80){
GUI.color = Color.green;
}
else
{
GUI.color = Color.gray;
}
//
Rect progressRect = GUILayoutUtility.GetRect(50,50);
//
EditorGUI.ProgressBar(progressRect,player.health/100.0f,"Health");
// ,
GUI.color = Color.white;
//
EditorGUILayout.Space();
EditorGUILayout.Space();
EditorGUILayout.Space();
//
player.damage = EditorGUILayout.Slider("Damage",player.damage,0,20);
//
if(player.damage<10){
EditorGUILayout.HelpBox(" !!", MessageType.Error);
}
else if(player.damage>15){
EditorGUILayout.HelpBox(" !!", MessageType.Warning);
}
else{
EditorGUILayout.HelpBox(" !!", MessageType.Info);
}
//
EditorGUILayout.Space();
EditorGUILayout.Space();
EditorGUILayout.Space();
//
showWeapons=EditorGUILayout.Foldout(showWeapons,"Weapons");
if(showWeapons){
player.weaponDamage1=EditorGUILayout.FloatField("Weapon 1 Damage",player.weaponDamage1);
player.weaponDamage2=EditorGUILayout.FloatField("Weapon 2 Damage",player.weaponDamage2);
}
//
EditorGUILayout.Space();
EditorGUILayout.Space();
EditorGUILayout.Space();
//
EditorGUILayout.LabelField("Shoe");
//
EditorGUILayout.BeginHorizontal();
EditorGUILayout.LabelField("Name",GUILayout.MaxWidth(50));
player.shoeName=EditorGUILayout.TextField(player.shoeName);
EditorGUILayout.LabelField("Size",GUILayout.MaxWidth(50));
player.shoeSize=EditorGUILayout.IntField(player.shoeSize);
EditorGUILayout.LabelField("Type",GUILayout.MaxWidth(50));
player.shoeType=EditorGUILayout.TextField(player.shoeType);
EditorGUILayout.EndHorizontal();
EditorGUILayout.EndVertical();
}
}
Okey、これから一つ一つ分析してみます.備考はすでにありますが.1.Verical-垂直レイアウト デフォルトのインターフェースレイアウトは垂直配置ですが、番組の効果のためには、やはりそれを書いたほうがいいです.設定要素は垂直配列のために、この兄弟を使って声明します.
EditorGUILayout.BeginVertical();
EditorGUILayout.EndVertical();
この兄弟の中で作ったレイアウトは全部垂直方向に並べられています.上の図に示すように、ページ全体の要素は垂直方向に配置されています.
2.Horizontal-水平レイアウト
設定要素を水平配列にするには、この兄弟を使って宣言します.
EditorGUILayout.BeginHorizontal();
EditorGUILayout.EndHorizontal();
この兄弟の中で作ったレイアウトは全部水平方向に並べられています.私たちは上のサークルで選んだところにHorizontalという兄弟を使っていますので、この兄弟の中の要素は全部水平方向に並べられています.
3.空行 Editor GUILayout.Spaceを使用して、2つの要素の間に1つの行を空けることができます.
4.各種フィールドの描画 フィールドを描画するには、以下の方法があります.
EditorGUILayout.LabelField()
EditorGUILayout.IntField()
EditorGUILayout.FloatField()
EditorGUILayout.TextField()
EditorGUILayout.Vector2Field()
EditorGUILayout.Vector3Field()
EditorGUILayout.Vector4Field()
EditorGUILayout.ColorField()
彼らの法則は方法名がFieldで終わるので、みんなは描くタイプによって対応する方法を選ぶことができます. 一般的な括弧の中のパラメータは、最初のフィールドの名前(stringタイプ)を描画し、2番目のフィールドの値は以下の通りです. 1はラベルフィールドです 2は整形フィールドです 3はテキストフィールドです 4.テキスト範囲
5.スライダ、プログレスバー 1.スライダ:EditorigILayout.Slider() スライダーを作成するユーザはドラッグして値を変更できます.最小と最大の間に
static float Slider(float value,float leftValue,float rightValue,GUILayoutOptionp[] params options)
static float Slider(string label,float value,float leftValue,float rightValue,GUILayoutOptionp[] params options)
static float Slider(GUIContent label,float value,float leftValue,float rightValue,GUILayoutOptionp[] params options)
パラメータ: label:エントリの前のオプションラベル value:編集の値 leftValue、right Value:スライダーの一番左右の値 options:追加のレイアウト属性のオプションリストを指定します.ここで任意の値を伝えます.上書きスタイルで定義されている設定です.エディトトリガーLayout.スライダー()を描画するために使用されています.上から分かります.
最初のパラメータはスライダの名前です. 二つ目のパラメータはスライダが変更する値です. 3番目と4番目のパラメータはスライダの範囲です. 効果は下図の通りです.
2/進捗条:EditoGUI.ProgessBar() 進捗バーを作成します.
static void ProgressBar(Rect position,float value,string text)
パラメータ: Position:画面上の長方形領域を、全体として使用するこの2つのコントロール value:表示する値EditoGUI.ProgessBar()は、プログレスバーを作成するために使用されています.
最初のパラメータは、プログレスバーのサイズを設定し、タイプはRectです. 2番目のパラメータは表示の値を設定します. 3番目のパラメータはプログレスバーの名前です.
ヒント: 1.最初のパラメータは、GUI LayoutUtility.GetRect()ツール類のGetRect()方法を使って設定された長方形枠を返します.ケースには50*50サイズの矩形枠を設けました.
2. , player.health / 100.0f。 1, 100 , 1 , , , 100 ( , )。
効果図: 6.ヘルプボックス ヘルプボックス:EditorigILayout.HelpBox()
EditorigILayout.HelpBoxは箱を描くために使われています.その後、箱の中にヒント情報が表示されます.上図から分かります.
最初のパラメータは着信メッセージです. 2番目のパラメータはメッセージの種類です.
効果図:
6.灰色地帯(禁止区域) EditoGUI.BeginaDispladGroupは、Trueの時に無効にすることができる一連の描画表示を作成します. EditorigILayout.BeginnagleGroupはスイッチボタンを持つ垂直グループを開始し、ここですぐにコントロールを有効または無効にします. 例えば:
private SerializedProperty m_EditorResourceMode = null;
EditorGUI.BeginDisabledGroup(EditorApplication.isPlayingOrWillChangePlaymode);
{
m_EditorResourceMode.boolValue = EditorGUILayout.BeginToggleGroup("Editor Resource Mode", m_EditorResourceMode.boolValue);
{
EditorGUILayout.HelpBox("Editor resource mode option is only for editor mode. Game Framework will use editor resource files, which you should validate first.", MessageType.Warning);
//EditorGUILayout.PropertyField(m_EditorLanguage);
EditorGUILayout.HelpBox("Editor language option is only use for localization test in editor mode.", MessageType.Info);
}
EditorGUILayout.EndToggleGroup();
}
効果: スイッチンググループ制御 グループ描画制御を無効にします.(EditorAppleication.isPlayingOrWillCharePlaymodeを使用して実行する場合は操作を無効にします.)