CubismUpdateController
最終更新: 2026年9月29日
概述
通过在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执行更新。