うにてぃブログ

主にUnityとC#に関する記事を書いていきます

【Unity】VisualElement のサイズが取得できない

VisualElement の 生成タイミングでサイズを取得してみると NaN になり正しいサイズが取得できない

例えば下記のコードを試してみる

public void OnEnable()
{
    var root = rootVisualElement;
    var e = new VisualElement();
    root.Add(e);
    var label = new Label(e.contentRect.width.ToString());
    root.Add(label);
}

とこのように NaN が表示される

f:id:hacchi_man:20201105223736p:plain:w200

これは 生成後すぐだと、レイアウトの構築が済んでいないため発生している

つまり、レイアウト構築が済んだあとに取得すれば正しいサイズが取得できる

そのために、RegisterCallback<GeometryChangedEvent> を利用する

GeometryChangedEvent はレイアウトの構築が終わったあとに呼び出されるイベントで
先程のコードにこれを利用すると下記になる

public void OnEnable()
{
    var root = rootVisualElement;
    var e = new VisualElement();
    root.Add(e);
    e.RegisterCallback<GeometryChangedEvent>(v =>
    {
        var label = new Label(e.contentRect.width.ToString());
        root.Add(label);
    });
}

結果を見てみると正しく値が取得できている

f:id:hacchi_man:20201105224132p:plain:w200