CubismParameterStore (Cocos Creator)

업데이트: 2023/03/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()로 실시하고 있습니다.

이 기사가 도움이 되었나요?
아니요
이 기사에 관한 의견 및 요청사항을 보내 주시기 바랍니다.