属性
为了使物体正确地融入世界,定义其位置,固有特性和外观将是不够的。 属性指定对象的行为方式以及与其他对象和场景环境的交互方式。
什么是属性?#
可以将属性视为应用程序逻辑的“材质”。它代表一组与逻辑相关的 参数 。您可以根据属性的哪些参数在 UnigineEditor 中变得可用/不可用来定义条件。
属性参数可以有多种类型-从代表角色命中点的简单整数到节点,材质,文件(用于纹理,网格,声音等),或属性,从而简化了对各种资源的访问。
您还可以在属性中使用复杂的数据类型,这为实现应用程序逻辑提供了更大的灵活性。这些数据类型如下:
-
Structure-可以认为是“属性内属性的定义”。因此,结构也由属性支持的任何类型的参数组成,包括数组。
与属性一样,结构也可以包含其他结构(嵌套),并且可以通过层次结构进行组织,并具有参数继承和重载功能(类似于面向对象的编程)。继承结构时,其所有参数均从父级继承。如果为父项更改了参数值,则该参数值也将为子项自动更改,除非在此之前为子项覆盖(设置为其他值)。
如果属性具有结构参数( struct ),则*.prop文件中此结构的定义必须出现在参数之前。当一个结构继承自另一个结构时,情况也是如此:父级必须在其子级之前定义。 -
Array-它是参数的集合,所有参数都具有相同的类型,并使用通用名称后跟索引进行访问: array [0] 。
数组可以具有多个维度(数组的数组),但要小心:数组所需的内存量随每个维度呈指数增长。还支持结构的数组。
UNIGINE的属性系统包括以下内容:
- 程序员实现的 Manual 属性(包括 base 的)。
- 用户属性是从手动属性继承而来的,并且由3D艺术家通过UnigineEditor进行了调整。
项目中的所有属性都按层次结构进行组织。
手动属性#
手动属性是手动创建和编辑的:它们在UnigineEditor中显示为只读。可以在运行时通过 API 修改它们(如果设置了相应标志),但不会保存此类更改。要自定义手动属性,您应该从中继承一个新的用户属性或直接编辑相应的*.prop文件。
在手册属性的*.prop文件中,存储了其名称。如果一个手册属性是从另一个手册属性继承的,则子级的*.prop文件将向父级存储一个基于名称的引用。 manual属性的 GUID 由其名称唯一确定,并在运行时生成。
基本属性#
基本属性是没有父级的manual属性,基本属性位于层次结构的顶层,所有其他属性均继承自它们。
默认情况下,UNIGINE提供2内置的只读基本属性:node_base和surface_base。您还可以创建自己的自定义基本属性。
用户属性#
用户属性是通过 UnigineEditor 从任何其他属性继承的属性,它覆盖其父级的参数。
用户属性的*.prop文件包含其 GUID 和对父属性的基于 GUID的引用。在UnigineEditor中继承新属性时,会自动创建此类文件。用户属性参数集由其父级确定,而其值可以修改。
内部属性#
内部属性是没有名称的属性。克隆或继承属性时,每个新属性都将变为内部属性,直到为其分配了名称。当您将属性分配给节点时,也会创建内部属性。