모델 표시 직후의 물리 연산을 즉시 안정화

Cubism 4 SDK R5로 물리 연산을 즉시 안정화하는 기능이 추가되었습니다.
Cubism SDK에서 모델을 표시할 때 파라미터의 값이 초기값이 아닌 경우 물리 연산이 격하게 작동할 수 있으며 이를 즉시 안정화하는 데 사용됩니다.

물리적 연산을 즉시 안정화하려면 모델 초기화 직후 또는 배치 직후에 Native에서는 CubismPhysics::Stabilization(), Web에서는 CubismPhysics.stabilization(), Unity에서는 CubismPhysics.Stabilization()을 호출합니다.

다음은 Cubism SDK의 샘플 장면을 이용하여 모델 초기화 직후에 물리 연산을 안정화하는 스니펫입니다.

Native

모델의 첫 번째 프레임만 물리 연산 처리 직전에 안정화 함수를 호출합니다.

bool isUpdateFirst = true;

void LAppModel::Update()
{
    ...

    // 물리 연산 설정
    if (_physics ! = NULL)
    {

        if (isUpdateFirst)
        {

            // 초기화 직후의 물리 연산을 안정화
            _physics->Stabilization(_model);
          
            isUpdateFirst = false;
        }

        _physics->Evaluate(_model, deltaTimeSeconds);
    }

    ...

Web

모델의 첫 번째 프레임만 물리 연산 처리 직전에 안정화 함수를 호출합니다.

_isUpdateFirst: boolean = true;

public update(): void {
  ...

  // 물리 연산 설정
  if (this._physics ! = null) {

    if (this._isUpdateFirst) {

      // 초기화 직후의 물리 연산을 안정화
      this._physics.stabilization(this._model);

      this._isUpdateFirst = false;
    }
    
    this._physics.evaluate(this._model, deltaTimeSeconds);
  }
  
  ...

Unity

다음 구성 요소를 모델의 프리팹 루트에 연결하면 모델의 첫 번째 프레임만 물리 연산 처리 직전에 안정화 함수를 호출합니다.

using Live2D.Cubism.Framework;
using Live2D.Cubism.Framework.Physics;
using UnityEngine;

public class PhysicsStabilizer : MonoBehaviour, ICubismUpdatable
{
    private bool _isUpdateFirst = true;

    public bool HasUpdateController { get; set; }

    public int ExecutionOrder
    {
        get { return CubismUpdateExecutionOrder.CubismPhysicsController - 1; }
    }

    public bool NeedsUpdateOnEditing
    {
        get { return false; }
    }

    public void OnLateUpdate()
    {
        if (! _isUpdateFirst)
        {
            return;
        }

        // 초기화 직후의 물리 연산을 안정화
        GetComponent<CubismPhysicsController>().Stabilization();

        _isUpdateFirst = false;
    }

    public void Start()
    {
        HasUpdateController = (GetComponent<CubismUpdateController>() ! = null);
    }

    private void LateUpdate()
    {
        if (!HasUpdateController)
        {
            OnLateUpdate();
        }
    }
}
이 기사가 도움이 되었나요?
아니요
이 기사에 관한 의견 및 요청사항을 보내 주시기 바랍니다.