容器
警告
UnigineScript的应用范围仅限于实现与材料相关的逻辑(材料表达式,可编写脚本的材料,画笔材料)。 不要将UnigineScript用作应用程序逻辑的语言,请改用C#/C++,因为这些API是首选的。 无法保证UnigineScipt中新引擎功能的可用性(超出其应用范围),因为当前的支持级别仅假设已解决关键问题。
Vector向量#
Vector是一种序列式容器,这种容器代表具有灵活尺寸的数组。可使用向量元素的指数对其进行随机访问。请注意与C++数组一样,Unigine向量使用基于0的标准。
可使用下列指令创建固定尺寸的向量:
源代码 (UnigineScript)
int vector[10];
vector[3] = 30;
- 如果要在向量上添加值,可使用append()容器函数。
在下面的例子中,在向量的最后添加一个新值:
源代码 (UnigineScript)
vector.append(20);
- 当然也可以移除向量的元素。
源代码 (UnigineScript)
vector.remove(1); //移除第二个元素
- 使用resize()函数更改向量的大小。也可扩大或减小向量大小。例如可将向量大小减少到5:
源代码 (UnigineScript)
vector.resize(5);
- 要获取向量大小,使用size()函数。
源代码 (UnigineScript)
int size = vector.size();
- 有时需要删除所有的向量元素。如果要将向量大小设置为0,需使用clear()函数。
注意clear函数并不会删除向量。源代码 (UnigineScript)
vector.clear();
- 可通过升序的方式将向量进行分类。如果sort() 函数将接收到的向量作为参数,将通过第一个向量值对此参数进行分类。
源代码 (UnigineScript)
vector1[0] = ( 3, 2, 10, 8 ); vector2[0] = ( 2, 1, 5, 7 ); vector1.sort(); vector1.sort(vector2);
- 使用find()寻找某个元素的位置。如果未找到元素,下列示例中的函数会返回-1 。当然此函数可接收一个 或 两个 参数。源代码 (UnigineScript)
int id = vector.find(value);
请注意在声明某个空向量时,需要指定此向量的尺寸:
源代码 (UnigineScript)
int vector[0];
在初始化时可使用数值对向量进行填充。
源代码 (UnigineScript)
int array[5] = ( 1, -4, 2, 10, 73 );
注意
在UnigineScript中,向量条款列表被封装在简单的parentheses ()中而非在C++中使用的弯曲braces {} 。
可在一个向量中将几种不同类型的组件混合在一起。
源代码 (UnigineScript)
int a[6] = ( 0, 1, 2, vec3(1,2,3), -7.83, "end" );
注意通常使用参考点对向量进行操作,并不使用向量自身进行工作。这正是当将一种向量分配另一种向量时,仅需将参考点进行复制的原因。一旦向量遭到损坏,其参考点也不再起任何作用。
注意
向量中不能再包含其它的向量和贴图。如果需要使用此函数,使用由data/core/scripts/array.h文件提供的 Unigine::Vector and Unigine::Map类。
也可以为四个组件的向量编写索引。但对于这种类型的数组索引仅支持ivec4类型。会如下所示方式返回四个值:
(对于某种类型而言,会检查数值的第一个数值。)源代码 (UnigineScript)
int array[0] = ( 0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 );
ivec4 vector = array[ivec4( 0, 3, 5, 9 )];
// 向量组件为: ( 0, 30, 50, 90 )
Maps贴图#
贴图是一种会将values映射到 keys的类型。贴图元素使用键-值对进行呈现。
使用Keys(键)对贴图元素进行鉴别。每个键对应一个value(值)。但 key(键) 和 value(值)可为不同的类型。 例如,下面的示例中,键为整数型而值为字符串型。:
源代码 (UnigineScript)
int map[] = ( 1 : "one", 2 : "two", 3 : "three", 4 : "four" );
可通过与创建向量的相同方式来创建贴图。
源代码 (UnigineScript)
可使用容器函数更改贴图:
int map[];
map["key"] = 20;
- 使用append()为贴图添加键和值。可附加一个新键或键-值对到贴图上。
注意在下面的示例中,附件一个键-值对到贴图上:如果已存在这样的键,接下来此键的值会被新值所取代。源代码 (UnigineScript)
map.append("key",20);
- 当然也可以使用key键移除元素。
源代码 (UnigineScript)
map.remove(key);
- 要获取贴图的尺寸使用size()函数。
源代码 (UnigineScript)
int size = map.size();
- 如果要删除所有的贴图元素,需使用clear()函数。
注意clear函数并不会删除贴图。源代码 (UnigineScript)
map.clear();
- 要找到value元素的位置,需使用find()。如果未能找到值,下列实例中的函数会返回-1。当然此函数可接收一个或两个参数。源代码 (UnigineScript)
int id = map.find(value);
请注意在声明某个空贴图时,需要指定此贴图的尺寸:
源代码 (UnigineScript)
int map[];
在初始化时可使用数值对贴图进行填充。
注意
在UnigineScript中,向量条款列表被封装在简单的parentheses ()中而非在C++中使用的弯曲braces {} 。
源代码 (UnigineScript)
int map[] = ( "red" : 2, "black" : 5, "yellow" : 0 );
可在一副贴图中将几种不同类型的值混合在一起,但所有贴图的键必须具有相同的类型,因为此处应存在为所有键定义的比较运算符。
源代码 (UnigineScript)
int a[] = ( "red" : 1, "blue" : -1.82, "green" : vec3(1,2,3), "black" : "end" );
注意通常使用参考点对贴图进行操作,并不使用贴图自身进行工作。这正是当将一种贴图分配另一种贴图时,仅需将参考点进行复制的原因。一旦贴图遭到损坏,其参考点也不再起任何作用。
注意
贴图不应包含其它的向量和贴图。如果需要这种函数,使用由data/core/scripts/array.h文件提供的Unigine::Vector 和 Unigine::Map文件。
最新更新:
2021-04-29
Help improve this article
Was this article helpful?
(or select a word/phrase and press Ctrl+Enter)