CubismParameterStore (Cocos Creator)

最終更新: 2023年3月14日

概述

通过使用CubismParameterStore,您可以保存/恢复CubismModel的参数和部件值。

如果不使用CubismParameterStore,则通过Expression等处理值的结果可能不正确。

如果在恢复~保存之间进行了Expression等值的操作,值的操作结果会被保存,所以将与恢复的操作后的值进行加算/正片叠底,不会得到预期的结果。
如果您在恢复~保存之外操作该值,则您操作该值之前的状态会被恢复,因此之后通过加算/正片叠底操作值的结果将是正确的。

请参考此处查看相关教程文章。

执行以下处理来保存/恢复CubismModel的参数和部件值。

  1. 获取保存/恢复的参数和部件参考
  2. 保存参数和部件值
  3. 恢复参数和部件值

获取保存/恢复的参数和部件参考

在CubismParameterStore.onEnable中缓存对CubismModel参数和部件的参考。

    if (this.destinationParameters == null) {
      this.destinationParameters =
        ComponentExtensionMethods.findCubismModel(this)?.parameters ?? null;
    }

    if (this.destinationParts == null) {
      this.destinationParts = ComponentExtensionMethods.findCubismModel(this)?.parts ?? null;
    }

这个处理由CubismParameterStore.onEnable()执行。

保存参数和部件值

保存模型的当前参数和部件值。
在应用动画之后和在Cubism各个组件中操作值之前保存值。

    // save parameters value
    if (this.destinationParameters != null && this._parameterValues == null) {
      this._parameterValues = new Array<number>(this.destinationParameters.length);
    }

    if (this._parameterValues != null && this.destinationParameters != null) {
      for (let i = 0; i < this._parameterValues.length; ++i) {
        if (this.destinationParameters[i] != null) {
          this._parameterValues[i] = this.destinationParameters[i].value;
        }
      }
    }

    // save parts opacity
    if (this.destinationParts != null && this._partOpacities == null) {
      this._partOpacities = new Array(this.destinationParts.length);
    }

    if (this._partOpacities != null && this.destinationParts != null) {
      for (let i = 0; i < this._partOpacities.length; ++i) {
        this._partOpacities[i] = this.destinationParts[i].opacity;
      }
    }

这个处理由CubismParameterStore.saveParameters()执行。

恢复参数和部件值

恢复保存的参数和部件值。
在应用动画之前恢复值。

    // restore parameters value
    if (this._parameterValues != null && this.destinationParameters != null) {
      for (let i = 0; i < this._parameterValues.length; ++i) {
        this.destinationParameters[i].value = this._parameterValues[i];
      }
    }

    // restore parts opacity
    if (this._partOpacities != null && this.destinationParts != null) {
      for (let i = 0; i < this._partOpacities.length; ++i) {
        this.destinationParts[i].opacity = this._partOpacities[i];
      }
    }

这个处理由CubismParameterStore.restoreParameters()执行。

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