尝试使用 find_objects 函数

本教程将介绍如何使用 find_objects 函数来批量获取多个对象。
前面的教程中介绍了用于操作CRI Atom Craft的各种函数,这些函数都是调用一次后可获取一个对象的函数。
find_objects 函数非常方便,只需调用一次就能获取多个对象。


以下将编写在工作单元内的所有波形区域上设置Voice限数组的脚本。

本教程使用了 项目的创建和在Cue上注册波形文件 教程中创建的项目。
没有打开项目时,请打开项目,或执行 项目的创建和在Cue上注册波形文件 所创建的脚本后开始此教程。

脚本文件的准备

选择脚本菜单上的“脚本列表...”显示脚本列表窗口。
按脚本列表窗口的“新建”按钮,使用以下名称创建脚本文件。

脚本的保存目标脚本文件名
tutorials [CRI] tutorial05-2_use_find_objects.py

脚本说明

双击已创建的脚本,用 从脚本编辑器运行脚本 打开。
要通过脚本列表窗口确认脚本概要,按照以下脚本说明来编写。

# --Description:[教程]使用find_objects函数和在波形区域中统一设置Voice限数组


模块的导入

编写脚本说明后,导入以下模块来用脚本操作CRI Atom Craft。

import sys
import cri.atomcraft.debug as acdebug
import cri.atomcraft.project as acproject

导入 Project模块 以进行项目操作,同时导入 debug模块 以输出日志。

获取要设置的Voice限数组

获取要在波形区域中设置的Voice限数组。
要获取Voice限数组时,与在 游戏数据(ACF, ACB)的输出 教程中获取目标配置相同,使用以下函数。

函数名 说明
get_global_folder 获取总体设置正下方的各对象文件夹
get_child_object 指定父对象后获取子对象

使用以上函数获取Voice限数组可以如下编写脚本。

# 获取Voice限数组文件夹
voicelimit_group_folder = acproject.get_global_folder("VoiceLimitGroupFolder")["data"]
# 获取Voice限数组“VoiceLimitGroup_0”
voicelimit_group = acproject.get_child_object(voicelimit_group_folder, "VoiceLimitGroup", "VoiceLimitGroup_0")["data"]

用于管理同时发声数的Voice限数组是使用 get_global_folder 函数,从总体设置中的Voice限数组中进行获取。
获取了Voice限数组后,使用 get_child_object 函数, 获取Voice限数组文件夹正下方的Voice限数组“VoiceLimitGroup_0”,保存在voicelimit_group变量中。

获取用于设置Voice限数组的波形区域

接下来,使用以下函数获取工作单元下方的所有波形区域。

函数名 说明
get_workunit 获取工作单元
find_objects 执行递归搜索并以列表格式获取匹配的对象

使用以上函数进行波形区域的获取可以如下编写脚本。

# 获取工作单元
workunit = acproject.get_workunit("WorkUnit_Tutorial")["data"]
# 使用find_objects来获取Cue Sheet中包含的波形区域列表
waveform_regions = acproject.find_objects(workunit, "WaveformRegion")["data"]

通过find_objects获取多个波形区域的解说

使用 find_objects 函数,以列表形式获取工作单元下方的所有波形区域。
find_objects 函数中指定“作为搜索根的对象”和“要获取的对象类型”。
由于是获取工作单元下方的所有波形区域,因此是指定workunit变量、"WaveformRegion" (波形区域的类型名),将获取的列表保存在waveform_regions变量中。

设置各波形区域中的Voice限数组

从刚才获取的波形区域列表的中逐个提取出波形区域,然后设置Voice限数组。
使用for控制语句从波形区域的列表中提取波形区域。

# 使用for,从波形区域列表中逐个提取出波形区域
for region in waveform_regions:
# 在波形区域中设置Voice限数组
acproject.set_value(region, "VoiceLimitGroup", voicelimit_group)
acdebug.log("[教程]使用find_objects函数和在波形区域中统一设置Voice限数组完成")

脚本的保存和执行

本教程的脚本编写到此为止。
请保存并执行脚本。
正常运行脚本后,会在工作单元内的所有波形区域中设置Voice限数组“VoiceLimitGroup_0”,显示如下。

criatom_tools_atomcraft_api_tutorial_search_and_edit_voicelimitgroup.png