Udon Graph 基础教程:同类型参数的储存与转移利器——Array[]数组
本章节将会教最基础的Array使用方式,更多使用方式请搜索unity-数组教程
Udon Graph:Array
基础认知
什么是数组:
数组是一个固定长度的存储相同数据类型的数据结构,数组中的元素被存储在一段连续的内存空间中。它是最简单的数据结构之一,大多数现代编程语言都内置数组支持。
为何使用数组存储一堆变量
与单独为每一个元素声明一个变量名相比,我们可以使用数组的索引值访问数组中的每一个元素。
例如:
你现在制作了一个游戏地图,你需要为这个地图制作了一个分数系统
我们需要实现一个系统来存储所有玩家的分数,传统的存储方式如下:
我们为每一个可能的玩家都设置一个变量。假设我们设定这个游戏的上限为四人,那我们需要为他们生成三个变量,如下:
当游戏上限增加的时候,我们需要创建更多的变量来存储玩家的分数。制作这样的系统非常麻烦,当地图的上限超过5个玩家时.逐一创建变量,并为每一个变量编写相同的程序,是十分繁琐且没有意义的事情。
数组数据结构的出现尝试解决这种问题。数组的特性之一就是,以一个名称保存多个相同数据类型的数据。
在这个例子中,我们可以添加一个INT数组来保存所有玩家的分数。
在游戏开始前,我们先为每一个玩家获取一个ID,这个ID代表了玩家的数据被储存在了数组的哪一层中。
在我们需要某一个玩家的数据时,我们只需要先获取玩家的ID,然后用ID作为索引,直接从数组里面获取对应的参数,我们只需要改变ID值,即可实现读取所有玩家的参数。
另外,当我们需要对计算类似于平均数/最大值一类的,需要调用所有同类型参数的计算中,数组的遍历优势才会真正显现。
如果我们需要计算平均值,那么我们就需要将所有的参数进行累加,然后除去参数的总数,我们需要2N+2个节点才能完成。
但是如果我们使用数组来制作,我们需要使用10个节点——没错这个是一个常数。
数组通过For循环进行遍历,将每一个参数都拿出来执行一遍Body挂载的程序,在遍历完成之后,For循环会终止并且开始执行Exit处的指令。
参数的数量越多,数组的作用就越明显数组的优点
数组的优点
相比其它类型的数据结构,数组有以下优点:
- 数组允许随机访问数组元素,每个存储在数组中的元素可以通过直接访问其索引来使用
- 数组对存储友好。这意味着在某些情况下,由于数组的线性存储方式,代码的执行顺序会大大提高
数组的缺点
- 声明数组时,需要指定数组的长度。初始声明数组的长度过长或过短,在移动数组元素时都会有导致效率变低
- 插入和删除元素之后保持数组的连续性代价是昂贵的,因为有可能需要重新排列所有数组元素。
数组使用方法
1:创建数组
在UdonGraph中,数组的创建十分的简单,点击左上角的添加变量,搜索对应的数组名,然后添加即可:
例如:string对应数组名为:string[] int对应数组名为:int[],以此类推
数组的类型多种多样,从普通的int,float,string基础的参数,到GameObject,VRCPlayerapi[],UdonBehviour[]——基本上每一个类都有属于自己的数组。
2:初始化数组
在UdonGraph中,Udon会自动完成初始化,但是你依旧需要提前给他设定数组长度以及初始值,部分的数组(如int[],float[]等)他们的初始值为0,而string[]则会默认为(NULL)
声明数组长度,我们可以通过设置Default Value来设置,点击Edit之后手动输入Size(即为数组长度)即可完成数组长度的设置。
数组长度决定了这个数组能够装多少数据,所以在编译前请确定并且设置好数组的长度
3.数组的遍历
数组中的每一个元素都可以通过索引访问到。数组的索引通常从0开始,即数组中第一个元素的索引为0.数组的最后一个元素位于(n-1)个索引处。我们将其称之为基于0的索引。数组也可以是基于其它数的,我们将其称之为基于n的索引。
使用for循环简单的遍历数组中的所有索引,可以访问数组中的所有元素。
我们可以通过一个简单的快捷键操作来完成FOR循环的设置
按住 “Shift+F”,然后单击输出数组类型的节点,以自动生成 foreach 循环 其中许多功能也可以在其各自节点的右键单击菜单中使用。
在对数组元素进行插入或者删除时,为了保持数组的顺序。需要处理数组中已经存在的其它数组元素。对于较大的数组,这项工作对性能的消耗是昂贵的。
4.写入元素到数组中
我们可以使用SetValue或者Set来向数组写入数据
instance用于指定需要写入的数组,第二个则是数据本身,用于指定数据所在的位置(索引)
5.从数组中读取元素
我们可以使用GetValue或者Get来向数组读取数据
在读取元素时:一般常用Get来获取参数
在写入元素时:一般常用SetValue来写入数据
6.在数组中搜索指定的参数
我们可以使用IndexOF 或者BinarySearch来搜索指定的参数,如果搜索到了会返回参数所在的位置,否则返回-1
其他方法(全)
数组操作一般会分布在xx[]和Array两个方法中,建议如果时两边都有的方法,优先使用XX[]中储存的方法,因为它对比Array中少了确认数组类型的一步,性能有所提升。
xx[]中储存的方法模块
待写
Array中储存的方法模块
待写
1 Comment
写的太棒辣!!⛹️