CubismParameterStore (Cocos Creator)
업데이트: 2023/03/14
개요
CubismParameterStore를 사용하면 CubismModel 파라미터와 파츠값을 저장/복원할 수 있습니다.
CubismParameterStore를 사용하지 않으면 Expression 등으로 값을 가공한 결과가 올바르지 않을 수 있습니다.
Expression 등의 값 조작을 복원~저장 사이에서 실시했을 경우 값을 조작한 결과가 보존되기 때문에 복원된 조작 후의 값에 가산/곱해 버려 기대대로의 결과가 되지 않습니다.
값의 조작을 복원~저장 외에서 실시하는 경우 값을 조작하기 전의 상태가 복원되기 때문에 그 후의 가산/곱셈에 의한 값의 조작이 적정한 결과가 됩니다.
해당 튜토리얼 기사는 여기를 참조하십시오.
CubismModel의 파라미터와 파츠의 값을 보존/복원하려면 다음의 처리를 실시합니다.
- 저장/복원할 파라미터 및 파츠 참조 취득
- 파라미터 및 파츠값 저장
- 파라미터 및 파츠값 복원
저장/복원할 파라미터 및 파츠 참조 취득
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()
로 실시하고 있습니다.