Skip to main content

制作一个用于收集物状态统计系统

本期我们来制作一个收集物统计系统

 相信制作过游戏地图的朋友们都知道,收集物是游戏的一个很重要的元素。本期我们来制作一个完整的收集物系统。


第零步:

首先需要为可收集物制作一个脚本,通过“开关”自己来实现可收集的感觉。

比较简单,直接放图。

image.png

这个脚本的效果就是将自身关闭。后面我们也是通过Active状态来确认收集物是否被收集。


收集物统计系统

PART1:程序目标设计

这个我们需要这个系统输出以下信息

1:收集物名单(gameobject[])

2:已收集数量(int)

3:未收集数量(int)

4:未收集名单(int[])(未收集的部分在数组中对应的位置)

 

我们需要向系统输入以下信息

1:收集物名单(gameobject[])

image.png

我们通过一个Public的gameobject[]来完成输入,并且这个也是需要输出的信息之一

Event 事件选择

这个选择可以十分的多元,既可以选择常规的interact触发,也可以选择例如OnPlayerTriggerEnter让玩家进入某一个区域后触发。

选择十分宽泛,这里不做指定。

 

Variables 参数选择

在参数上我们需要以下参数:

1:收集物名单(gameobject[])

2:已收集数量(int)

3:未收集数量(int)

4:未收集名单(int[])(未收集的部分在数组中对应的位置)

命名如下:

image.png

Part:2 设计程序

由于这个脚本理论上需要被重复触发,大部分的参数又都是本地参数,在开始之前我们需要对本地参数进行归零处理。

image.png

归零后正式进入数据处理,首先我们需要制作一个For循环,每一次循环从名单中获取一个gameobject来进入后续的处理。

image.png

使用官方的快捷键可以快速生成一个FOR循环,请在GET后增加一个NULL检测,以防止脚本崩溃。

获取了收集物之后,我们需要对他的状态进行检测,并且且将结果值输出到判定器来判定是否已被收集

image.png

在获得该收集物的收集状态后,已收集的物品会执行True流,而未收集则会执行False流。

 

False流——物品已收集

image.png

倘若物品已经被收集,已收集int值+1,结束,回到循环

 

Ture流——物品未收集

image.png

倘若物品没有被收集,从FOR中获取该物品在数组中的位置,保存在int[]数组中,数组位置等于【未收集数int+1值】,然后为未收集数int+1值,结束,回到循环。

在循环结束之后,会执行EXIT处的流,我们将这个流接入输出,将值输出到其他脚本

image.png

以上就是收集物统计系统的全部,下面是udon Graph全代码

image.png

感谢您的观看,我是麦哲伦,咱们下期再见~

鸣谢:

VRCD中文创作者协会

代理猫猫

 

PS:谢谢猫猫老师帮我修bug呜呜呜呜呜呜呜