環境 Unity 2019.2.11f1
はじめに
前回の記事からかなり時間が空いてしまいましたが、きました第2弾。
今回はいろんなGUIを試してみるという目的でやっていこうと思います!
どんなGUIがあるのか
まずはどんなものがあるか見たいと思いますが、実はUnityの中にサンプルが入ってたりします。
場所はWindow -> UI -> UIElements Samples
にあります。
実際にボタンを押せたりと動作するので、遊んでみると面白いと思います。
ただいきなりこのコードを見ていくのは辛いので、まずはUXML
だけに注目していきましょう。
今回のソースコード
前回の記事のコードをそっくり以下のコードに書き換えてみてください。
Text.uxml
<UXML xmlns="UnityEngine.UIElements" xmlns:uie="UnityEditor.UIElements"> <!-- ラベル --> <Label text="これはラベル"/> <!-- ボタン --> <Button text="これはボタン" /> <!-- スクロールバー --> <Scroller direction="Horizontal" low-value="0" high-value="100" /> <!-- トグル --> <Toggle label="これはトグル" /> <!-- テキストフィールド --> <TextField label="これはテキストフィールド" /> <!-- オブジェクトフィールド --> <uie:ObjectField label="これはオブジェクトフィールド" /> <!-- スライダー --> <Slider label="これはスライダー" low-value="0" high-value="100" /> <!-- ベクトルなんかもできる --> <uie:Vector3Field label="これはベクトル3フィールド" /> <!-- 色の入力 --> <uie:ColorField label="色の入力なんかもできるよ" /> <!-- カーブやグラデーションも --> <uie:CurveField label="これはカーブ" /> <uie:GradientField label="グラデーションなんかも" /> </UXML>
Test.uss
/* これはコメントです。今回も白紙のスタイルシートでOKです。 */
Test.cs
using UnityEditor; using UnityEngine; using UnityEngine.UIElements; using UnityEditor.UIElements; public class Test : EditorWindow { // エディタに独自ウィンドウを作成する [MenuItem("Window/UIElements/Test")] public static void Open() { // メニューの「window -> UIElements -> Test」を選択するとOpenメソッドが呼ばれる // GetWindow()にてウィンドウを表示させる Test wnd = GetWindow<Test>(); wnd.titleContent = new GUIContent("Test"); } // アクティブになったときに実行される public void OnEnable() { VisualElement root = rootVisualElement; // UXMLを取得 var visualTree = AssetDatabase.LoadAssetAtPath<VisualTreeAsset>("Assets/Editor/Test.uxml"); // USSを取得 var styleSheet = AssetDatabase.LoadAssetAtPath<StyleSheet>("Assets/Editor/Test.uss"); VisualElement UXML = visualTree.CloneTree(); // スタイルシートを適応 UXML.styleSheets.Add(styleSheet); root.Add(UXML); } }
あとは前回と同様にwindow -> UIElements -> Test
から画面を表示します。
こんな感じで色んなものが描画されているはずです。
実は先程のコードのTest.cs
は前回と全く同じもので、Text.uxml
しか書き換えていません。
UXML
にコードを書くだけでこのように実際にボタンを押したり、テキストを入力したりできるようになるわけですね。
さいごに
ただ残念なことに、これだけだと見た目はOKですが実際になにかが動作したり値が書き換わったりはしません。
そうするためにはTest.cs
側にコードを付け足す必要があります。いわゆるロジック側ですね。
ただUXML
にコードを書くだけでGUIが出てくるという流れをつかんでくれればなと思ってます。
次は実際にTest.cs
を書き換えていきたいと思うので、興味がある方は是非!