You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RealityKit中如何同时播放角色动画并控制骨骼移动?

在RealityKit中同时播放角色动画并调整骨骼姿态(如行走时转向)

要实现角色行走动画与骨骼定向调整的同时进行,核心是通过**FromToByAnimation创建骨骼姿态过渡动画**,再结合**BlendTreeAnimation将其与基础动画混合**。以下是具体实现步骤与代码示例:

1. 基础准备:加载模型与基础动画

首先加载角色模型并获取需要播放的基础动画(比如行走动画):

guard let perso = try? await ModelEntity(named: "Personnage1") else { return }
root.addChild(perso)

// 获取基础行走动画
guard let walkAnimation = perso.availableAnimations.first else { return }

2. 创建骨骼转向的FromToByAnimation

FromToByAnimation是RealityKit中对应SceneKitCABasicAnimation的骨骼姿态过渡工具,我们用它创建角色转向的动态骨骼动画:

// 目标关节路径
let targetJoint = "Dos3/DJambe1/DJambe2"

// 获取角色的骨骼姿态组件与默认姿态
guard var posesComponent = perso.components[SkeletalPosesComponent.self],
      let defaultPose = posesComponent.poses.default else { return }

// 找到目标关节的索引
guard let jointIndex = defaultPose.jointNames.firstIndex(of: targetJoint) else { return }

// 获取关节初始变换
let initialTransform = defaultPose.jointTransforms[jointIndex]

// 定义目标旋转(这里是绕X轴转-90度)
let targetRotation = simd_quatf(angle: -90 * (.pi / 180), axis: [1, 0, 0])
let targetTransform = Transform(rotation: targetRotation, scale: initialTransform.scale, translation: initialTransform.translation)

// 创建骨骼过渡动画
let turnAnimation = FromToByAnimation(
    jointName: targetJoint,
    from: initialTransform,
    to: targetTransform,
    duration: 0.5,  // 过渡时长
    repeatMode: .loop  // 可选:循环播放
)

3. 使用BlendTreeAnimation混合两个动画

通过BlendTreeAnimation可以将基础行走动画和转向动画叠加,让两者同时生效:

// 创建混合树,按权重混合两个动画
let blendTree = BlendTreeAnimation(
    animations: [
        walkAnimation,
        turnAnimation
    ],
    weights: [1.0, 1.0]  // 权重可按需调整,值越大对应动画影响越强
)

// 播放混合后的动画
perso.playAnimation(blendTree)

关键说明

  • 直接修改SkeletalPosesComponent是静态设置骨骼姿态,无法与播放中的动画实时混合;而FromToByAnimation是创建动态的骨骼动画轨道,能和原有动画通过混合树叠加。
  • 混合权重(weights)支持动态调整,比如需要角色逐渐转向时,可通过动画曲线将转向动画的权重从0过渡到1。
  • 若需更复杂的混合逻辑(比如基于移动速度调整转向强度),可通过BlendTreeAnimation的blendFunction自定义混合规则。

内容的提问来源于stack exchange,提问作者jeremyjoron

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 16:45:04