参数循环
最終更新: 2025年5月15日
使用Cubism 5 SDK R4或更高版本,可以获取Cubism Editor中设置的参数循环ON/OFF设置。
有关在Cubism Editor中设置循环的信息,请参考Editor手册的“循环”。
还可以根据需要通过编码从SDK控制循环设置。
概述
在Cubism SDK中,循环由以下标志管理。
- 每个参数的循环状态标志
- 用于在每个模型上覆盖循环状态标志的标志
- 每个模型覆盖时循环状态标志
- 用于根据每个参数覆盖循环状态标志的标志
- 每个参数覆盖时循环状态标志
为了在SDK上重现Cubism Editor中设置的参数循环,必须将以下设置为false。
- 用于在每个模型上覆盖循环状态标志的标志
- 用于根据每个参数覆盖循环状态标志的标志
但是,为了保持与Cubism SDK上现有动态的兼容性,根据每个模型覆盖循环状态标志的标志的初始值设置为true。
如何重现Cubism Editor中设置的参数循环
每个模型设置循环覆盖标志
将每个模型循环覆盖标志设置为false。默认为true。
为了在SDK上重现Cubism Editor中设置的参数循环,请变更Framework的CubismModel类的成员变量原始化时的设置。
Native
// C++ CubismModel::CubismModel(Core::csmModel* model) : _model(model) ... , _isOverriddenParameterRepeat(false) ... { }
Web
// TypeScript /** * 构造函数 * @param model 模型 */ public constructor(model: Live2DCubismCore.Model) { ... this._isOverriddenParameterRepeat = false; ... { }
Java
// Java /** * Model class created from Mclapoc data. */ public class CubismModel { ... private boolean isOverriddenParameterRepeat = false; ... { }
Unity
// C# /// <summary> /// Whether parameter repetition is performed for the entire model. /// </summary> [SerializeField] private bool _isOverriddenParameterRepeat = false;
在Unity中,您还可以通过操作Inspector中CubismModel的“Is Overridden Parameter Repeat”复选框来设置此项。

要动态变更标志,则使用CubismModel类的SetOverrideFlagForModelParameterRepeat(csmBool isRepeat)。
Native
// C++ model->GetModel()->SetOverrideFlagForModelParameterRepeat(false); // 循环每个模型的覆盖标志
Web
// TypeScript model.getModel().setOverrideFlagForModelParameterRepeat(false); // 循环每个模型的覆盖标志
Java
// Java model.getModel().setOverrideFlagForModelParameterRepeat(false); // 循环每个模型的覆盖标志
例如Cubism SDK for Native范例项目中定义了以CubismModel为基类来操作模型的LAppModel类,上述代码中的model就是LAppModel类。
它以GetModel()为中介从LAppModel类调用CubismModel类的函数。
Unity
// C# cubismModel.SetOverrideFlagForModelParameterRepeat(false); // 循环每个模型的覆盖标志
在SDK for Unity中,使用CubismModel组件的void SetOverrideFlagForModelParameterRepeat(bool isRepeat)。
如何使用SDK控制每个参数的循环参数
按照以下流程处理。
- 覆盖每个参数的标志设置
- 每个参数设置参数循环
1. 设置每个参数的覆盖标志
首先,将每个参数覆盖标志设置为true。默认为false。
示例
// C++ model->GetModel()->SetOverrideFlagForParameterRepeat(parameterIndex, true); // 将指定参数的覆盖标志设置为true
// TypeScript model.getModel().setOverrideFlagForParameterRepeat(parameterIndex, true); // 将指定参数的覆盖标志设置为true
// Java model.getModel().setOverrideFlagForParameterRepeat(parameterIndex, true); // 将指定参数的覆盖标志设置为true
例如,在Native中,于Framework的CubismModel类中定义了void SetOverrideFlagForParameterRepeat(csmInt32 parameterIndex, csmBool value)。
在Unity中,于CubismParameter类中定义了void SetRepeatFlagForParameterRepeat(bool value)。
// C# cubismParameter.SetOverrideFlagForParameterRepeat(true); // 将指定参数的覆盖标志设置为true
这也可以通过操作Inspector中CubismParameter的“Is Overridden”复选框来设置。

2. 每个参数设置参数循环
为每个参数设置循环的ON/OFF。
此设置仅当每个参数的覆盖标志为true时才有效。
示例
// C++ model->GetModel()->SetRepeatFlagForParameterRepeat(parameterIndex, true); // 将指定参数的循环设置为ON
// TypeScript model.getModel().setRepeatFlagForParameterRepeat(parameterIndex, true); // 将指定参数的循环设置为ON
// Java model.getModel().setRepeatFlagForParameterRepeat(parameterIndex, true); // 将指定参数的循环设置为ON
// C# cubismParameter.SetRepeatFlagForParameterRepeat(true); // 将指定参数的循环设置为ON
还可以通过操作Inspector中CubismParameter的“Is Parameter Repeated”复选框来设置SDK for Unity。

Tips
如果启用了基于每个模型覆盖循环状态标志的标志,则会忽略基于每个参数覆盖循环状态标志的标志设置。