ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

UIElements开发人员指南 2 The Visual Tree(可视树)

2019-08-04 21:43:34  阅读:236  来源: 互联网

标签:layout 开发人员 可视 元素 Tree VisualElement Visual 面板 属性


原文链接:https://docs.unity3d.com/2019.3/Documentation/Manual/UIE-VisualTree.html

可视树保存窗口中的所有可视元素。它是由轻量级节点组成的对象图,称为视觉元素(visual elements)。

这些节点在C#堆上分配,可以手动或通过从UXML模板文件加载UXML资产。

每个节点都包含布局信息,其绘图和重绘选项,以及节点如何响应事件。

VisualElement(可视元素)

VisualElement是可视树中所有节点的公共基类。 VisualElement基类包含样式,布局数据,本地转换,事件处理程序等属性。

VisualElement有几个子类,用于定义其他行为和功能,包括专用控件。 VisualElement可能有子元素。

您不需要从VisualElement基类派生来使用UIElements。您可以通过样式表和事件回调自定义VisualElement的外观和行为。

Connectivity(连接)

可视树的根对象称为面板。在连接到面板之前,将忽略新元素。您可以向现有元素添加元素,以将用户界面附加到面板。

要验证VisualElement是否已连接到面板,您可以测试此元素的面板属性。未连接可视元素时,测试返回null。

使用UnityEditor.UIElements命名空间中容器对象的rootVisualElement元素向树中添加新元素。

Drawing order(绘图顺序)

可视树中的元素按以下顺序绘制:

父母在孩子面前被吸引
根据他们的兄弟姐妹名单抽取孩子
更改其绘制顺序的唯一方法是在其父级中重新排序VisualElementobjects。

Position, transforms, and coordinate systems(定位,变换和坐标系统)

不同的坐标系定义如下:

世界:坐标与面板空间相关。面板是可视树中的最高元素。
本地:坐标是相对于元素本身。
布局系统为每​​个元素计算VisualElement.layout属性(类型为Rect)。

layout.position表示为像素
 相对于其父级的坐标空间。虽然您可以直接为layout.position指定值,但建议您使用样式表和布局系统来定位元素。

每个VisualElement还有一个layout.transform属性(typeITransform),它将元素相对于其父元素定位。默认情况下,转换是标识。

VisualElement.layout.position和VisualElement.layout.transform属性定义如何在本地坐标系和父坐标系之间进行转换。

VisualElementExtensions静态类提供以下扩展方法,用于转换坐标系之间的点和矩形:

WorldToLocal将Vector2或Rect从Panel空间转换为元素中的引用。
LocalToWorld将Vector2或Rect转换为Panel空间参考
ChangeCoordinatesTo将Vector2或Rect从一个元素的局部空间转换为另一个元素的局部空间。
可视树层次结构
可视树层次结构

Visual tree hierarchy
Visual tree hierarchy


例如,在上图中,树的排列如下:

面板
标签部分(称为DockArea并标记为“坐标”)
Blue VisualElement充当根(称为“rootVisualContainer”)
Red VisualElement充当按钮的父级(“红色容器”)
按键
从小组的角度来看:

无论参考如何,面板的原点都是(0,0)
根的起源是世界空间中的(0,22)
红色容器的原点是世界空间中的(100,122)。它的position属性(在layout属性中定义)设置为(100,100),因为它相对于其父级:根容器。
按钮的原点是世界空间中的(100,122)。它的position属性(在layout属性中定义)设置为(0,0),因为它相对于其父级:红色容器。
元素的原点是它的左上角。

使用worldBound属性检索VisualElement的窗口空间坐标,同时考虑其祖先的变换和位置。

标签:layout,开发人员,可视,元素,Tree,VisualElement,Visual,面板,属性
来源: https://blog.csdn.net/AndrewFan/article/details/98474628

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有