立即稳定模型显示后的物理模拟

追加了在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();
        }
    }
}
请问这篇文章对您有帮助吗?
关于本报道,敬请提出您的意见及要求。