0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Unity】UI ToolkitでSerializedReferenceのSerializeFieldをInspectorに表示したい

Last updated at Posted at 2024-06-17

自己紹介

U/DAYに参加できそうで、ニコニコな大学生

今回やること

前回…

前回、上記の記事でSubClassSelectorと呼ばれるエディター拡張をUI Toolkitで再現してみるというのをやりました。

その続き

今回はその続きで、SerializeReferenceに登録したクラスがもつSerializeFieldをInspectorから触れるようにします。

ソースコード

    // CreatePropertyGUIの中(詳しくは前回の記事で)
    
    foreach (SerializedProperty serializedField in property.Copy())
    {
        var element = new PropertyField(serializedField, serializedField.displayName);
        root.Add(element);
    }

propertyをforeachで回す

propertyforeachで回すと、その子であるSerializedFieldがすべて取得できます。
これちょっとわかりにくいですね。

よく分からないPropertyの仕様

当初以下のコードを書いていました。

    foreach (SerializedProperty serializedField in property)
    {
        var element = new PropertyField(serializedField, serializedField.displayName);
        root.Add(element);
    }

Copyメソッドを使っていないんですね。
これをすると、2回目以降に大きなバグが発生しました。
propertyが参照する値が、別の変数に置きわかっているようです。

詳細を追う時間もなく、技術もなかったので詳しくは不明ですが、for文を直接回すことで内部的に何かが変わるんでしょうね(適当)

もしわかる人がいたら教えてほしいです。

回避方法

Copyメソッドを使って、回避することができました。
ここでCopyしているのにもかかわらず、正しく値が更新されるのも不思議な挙動ですよね。

まとめ

あとは一段ずらすだけなのですが、まぁUSSの問題ですし本題とはそれるので、この辺で。
SerializePropertyやその周辺知識があればもっと簡単だったのでしょうが、私はまだまだ勉強不足で、まぁまぁ苦戦しました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?