CubismUpdateController

最終更新: 2026年9月29日

5.4 alpha版现已开放体验! alpha 版相关公告页面请点击此处。

概述

通过在Actor中追加CubismUpdateControllerComponent,您可以控制Cubism SDK for Unreal Engine中各组件的执行顺序。

由于各组件的执行顺序在OW方法中很重要,因此必须使用CubismUpdateController并遵守规格。
如果因为不需要控制执行顺序而不使用CubismUpdateController,则组件的执行顺序由Unreal Engine侧决定,根据执行顺序,可能无法正确处理Expression等功能。

要控制用户创建的组件的执行顺序,请在该组件上实装ICubismUpdatableInterface。

CubismUpdatableInterface的实装

在执行顺序的控制对象组件中继承ICubismUpdatableInterface接口。

编码

  • GetExecutionOrder()

    返回该组件的执行顺序。
    这个值越小,则越早被调用。
    Cubism SDK for Unreal Engine的各组件的执行顺序在CubismUpdateExecutionOrder中定义。
     如果用户追加了控制执行顺序的组件,请参考CubismUpdateExecutoinOrder的定义,并注意何时使用此处返回的值进行调用。
    示例(如果您想在CubismLookController和CubismPhysicsController之间的时间调用自己的组件):
    CubismLookController设置为700、CubismPhysicsController设置为800,因此将您自己的组件设置为返回750。

    constexpr int32 CUBISM_EXECUTION_ORDER_MOTION = 100;
    constexpr int32 CUBISM_EXECUTION_ORDER_RAYCAST = 110;
    
    constexpr int32 CUBISM_EXECUTION_ORDER_POSE = 200;
    
    constexpr int32 CUBISM_EXECUTION_ORDER_EXPRESSION = 300;
    constexpr int32 CUBISM_EXECUTION_ORDER_EYEBLINK = 400;
    constexpr int32 CUBISM_EXECUTION_ORDER_LIPSYNC = 500;
    
    constexpr int32 CUBISM_EXECUTION_ORDER_PHYSICS = 600;
    
    constexpr int32 CUBISM_EXECUTION_ORDER_MODEL = 900;
    
    constexpr int32 CUBISM_EXECUTION_ORDER_RENDERER = 1000;
  • OnCubismUpdate()

    当执行顺序由CubismUpdateController控制时,此函数将作为更新处理调用。
    描述该组件执行的更新处理。

    void UCubismRendererComponent::TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction)
    {
    	Super::TickComponent(DeltaTime, TickType, ThisTickFunction);
    	if (IsControlledByUpdateController())
    	{
    		// 如果未启用CubismUpdateController,则从其自身的TickComponent进行处理。 
    		return;
    	}
    	OnCubismUpdate(DeltaTime);
    }
    void UCubismRendererComponent::OnCubismUpdate(float DeltaTime)
    {
    	// 实装Tick处理
    }
    int32 UCubismRendererComponent::GetExecutionOrder() const
    {
    	return CUBISM_EXECUTION_ORDER_RENDERER;
    }
    
    执行过程中追加或删除组件时的注意事项
    CubismUpdateController控制执行顺序的组件在OnEnable()的时机执行。 如果所有组件都预先附加到Actor上,则不会有问题。但是,如果在场景运行时动态追加或删除组件,则需要显式调用CubismUpdateControllerComponent.RefreshUpdatables()来重新进行导入。
  • IsControlledByUpdateController()

    此函数控制CubismUpdateController是否执行更新。
    如果为true,则不会通过Tick执行更新。

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