1
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?

ひとりアドベントカレンダーAdvent Calendar 2024

Day 5

【Unity】Instantiate vs CloneTree【UIToolkit】

Last updated at Posted at 2024-12-04

概要

ある要素の子としてvisualTreeAssetを追加したい時がある

ネット上に転がっている情報では

visualTreeAsset.CloneTree(root)

var el = visualTreeAsset.Instantiate()
root.Add(el)

という書き方が混在している

どちらが正しいか迷ったので備忘録

結論?:thinking:

Instantiateが正しい
CloneTreeはUIElements時代の名残であり、現在は非推奨となっている

実装上もInstantiate()の処理と同等なので、完全に置き換えてしまって大丈夫

VisualTreeAsset.cs
// CloneTree()の中身は完全にInstantiate()
public TemplateContainer CloneTree() => this.Instantiate();
This function will be deprecated. Use VisualTreeAsset.Instantiate instead.

この関数は非推奨になります。代わりに VisualTreeAsset.Instantiate を使用してください。

ちょっと待って。ここからがマグマなんです。 :muscle_tone2:

非推奨になるのは CloneTree()CloneTree(string bindingPath) だけで、CloneTree(VisualElement target)は残る。
そもそもCloneTree()+CloneTree(string bindingPath)CloneTree(VisualElement target)は挙動が違う

Instantiate() CloneTree() CloneTree(string bindingPath)
このメソッドたちは、元となったVisualElementが TemplateContainer要素の子となりターゲットの下につく

CloneTree(VisualElement target)
は、TemplateContainerが作られず直接要素が追加される

自分はこれに1敗したのでみんな注意してください

1
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
1
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?