参数循环

最終更新: 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. 覆盖每个参数的标志设置
  2. 每个参数设置参数循环

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

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

请问这篇文章对您有帮助吗?
关于本报道,敬请提出您的意见及要求。