Closed dragonpoint closed 1 year ago
这些日志不是已经告诉你无效的骨骼名称了吗,你使用自定义映射(BonePreset = Custom),但是你的 RemapAsset 资产没有指定骨骼, 请仔细阅读一下文档~~这不是一个不看文档就可以使用的插件,不想阅读文档也请下载 Demo 工程学习
我确认已经按照文档要求设置过了,完全符合你文档的要求,创建了RemapAsset并且设置了 变量,我的错误描述中第二行你可能没注意。deomo中我没有找到RemapAsset关联的例子,或者我找的不够仔细。demo中只有一个RemapAsset资源,并没有其应用的点的例子程序。
上传一个完整日志文件
看起来没问题,project settings--->MediaPipe4U 截个图
从日志里面我很难知道你的问题,但是日志显示的流程是缺少步骤的,M4U 大致的逻辑大概是这样:
从日志看你没有执行任何映射表的操作,我猜测你不是一个很正常的蓝图,中间或许有某种动态的行为,普通蓝图映射完成后会在日志中打印骨骼映射表,但是你的日志中是直接就开始求解过程。
如果要进一步排查问题我需要清楚你的动画蓝图逻辑和 MediaPipe4U 前置节点情况
明天我查看一下代码,看看影响映射表创建的因素,如果是多人网络游戏的环境,可能会影响功能,目前 M4U 不支持网络传输
不是网络游戏,我可以做一下测试,排除我这里所有不相干的逻辑,只用你的插件看看行不行
我做了一个干净的测试,确实可以驱动,看来是我的动画类可能比较复杂,我自己排查一下别的问题,谢谢帮助
Pose Solver 节点是最复杂的节点,移除所有 M4U 蓝图节点,仅添加 Hand Solver 节点,观察日志和查看是否可以驱动手指
问题基本解决。我的动画类有点复杂,一开始并没有使用Pose Solver ,根据情况动态切换的。 我测试了一下,默认使用Pose Solver ,就可以解决问题。 我自己改一下流程吧。
嗯?难道你不是用蓝图吗? 如果你适用 C++, 可以禁用算解器:
参考代码:
UMediaPipeAnimInstance animInstance;
solverProvder = animInstance->GetPoseSolver();
if(solverProvider)
{
solverProvider->GetSolver().SetDisabled(true);
}
但是,这个操作应该放在 AnimInstance 的 NativeThreadSafeUpdateAnimation 或者 Tick 中,因为蓝图节点是多线程求解的
我是使用蓝图的。蓝图的动画中,有很多状态,好几个不同序列动画的切换,不是一开始就使用了mediapipe的函数,只有需要的时候才会调用相关函数。目前我在动画一启动就先调用一下Solver,后面需要的时候再做切换,一切正常。 所以问题的重点在于,必须在动画类初始化第一次就必须调用一次相关的Solver函数一次??以前,我的动画初始为其他序列动画,不是动捕部分。
不懂你说的调用是什么意思,没有约束一开始就要初始化,很多用户的蓝图都很复杂,你可以使用状态机配合子动画蓝图或者直接切换网格体的 AnimationClass ,有关切换动画蓝图你需要阅读文档,有专门说明,切换以后要手动connect一次,因为如果开始不是 M4U的蓝图,begin play的代码会被遗漏
MediaPipe4U 版本
20230628
UnrealEngine 版本
5.1.x
UnrealEngine 类型
Launcher
问题类型
运行错误
错误详细描述
MediaPipeRemapAsset 无法正常工作,我确信一切配置都按照你的文档设置好了 MediaPipeAnimInstance-->BonePreset=Custom & BoneRemap=NewMediaPipeRemapAsset
log errors LogMediaPipe: Error: Invalid bone 'None' for joint Hip (SolveJoint(Hip)). LogMediaPipe: Error: Invalid bone 'None' for joint Spine (SolveJoint(Spine)). LogMediaPipe: Error: Invalid bone 'None' for joint Chest (SolveJoint(Chest)). LogMediaPipe: Error: Invalid bone 'None' for joint LeftShoulder (SolveJoint(LeftShoulder)). LogMediaPipe: Error: Invalid bone 'None' for joint LeftElbow (SolveJoint(LeftElbow)). LogMediaPipe: Error: Required bones not found for ik chain : [NULL] --> [LeftElbow] --> [NULL] (SolveJointIK(LeftElbow)) LogMediaPipe: Error: Invalid bone 'None' for joint RightShoulder (SolveJoint(RightShoulder)). LogMediaPipe: Error: Invalid bone 'None' for joint RightElbow (SolveJoint(RightElbow)). LogMediaPipe: Error: Required bones not found for ik chain : [NULL] --> [RightElbow] --> [NULL] (SolveJointIK(RightElbow)) LogMediaPipe: Error: Invalid bone 'None' for joint LeftHip (SolveJoint(LeftHip)). LogMediaPipe: Error: Invalid bone 'None' for joint LeftKnee (SolveJoint(LeftKnee)). LogMediaPipe: Error: Required bones not found for ik chain : [NULL] --> [LeftKnee] --> [NULL] (SolveJointIK(LeftKnee)) LogMediaPipe: Error: Invalid bone 'None' for joint LeftAnkle (SolveJoint(LeftAnkle)). LogMediaPipe: Error: Invalid bone 'None' for joint RightHip (SolveJoint(RightHip)). LogMediaPipe: Error: Invalid bone 'None' for joint RightKnee (SolveJoint(RightKnee)). LogMediaPipe: Error: Required bones not found for ik chain : [NULL] --> [RightKnee] --> [NULL] (SolveJointIK(RightKnee)) LogMediaPipe: Error: Invalid bone 'None' for joint RightAnkle (SolveJoint(RightAnkle)). LogMediaPipe: Error: Invalid bone 'None' for joint Head (SolveJoint(Head)). LogMediaPipe: Error: Joint 'LeftAnkle' was not mapped to bone. LogMediaPipe: Error: Joint 'RightAnkle' was not mapped to bone.