animation ssset in release version , I can’t rebind the animation asset to sequence
直接敲中文吧。
你是不是想说在PIE(运行中)修改sequence动画?
据我所知应该是不行的。
不知道你的需求是什么哈,我这里提个把动画用标签分开,不同时间用不同的标签播放。
我想问的问题是在打包出来的pc版本下,运行的时候,如何动态替换sequence 下面绑定轨道中的动画资源?因为我们角色不一样,对应的骨骼不一样,主角在实际播放sequence的时候会重新绑定,动画轨道对应的动画资源也要重新绑定。
在PIE模式下我试着重新指定了资源,是可以使用的,但是打出来PC版本之后就不生效了,我查到的原因是PIE模式下每次播放sequence都会编译。
试一试这个,sequence动态绑定。
这个只做了绑定角色,因为骨骼相同用所以动画可以播放,但是我的是两个主角骨骼不一样,要播放的动画资源也不同
你自己的角色是不是正常的人类骨骼?如果是的话看一下这一个视频了解什么是虚幻“骨骼重定向”,然后再用之前提到的动态绑定。
如果还不能解决你的问题的话建议阐述一下你想实现的功能,大家换个方向解决问题。
我来先描述一下我的问题:
背景:我制作了一个sequence,在里面的一个角色加了tag,角色添加了一条动画轨道,轨道里面添加了跟这个角色对应的动画。运行的时候能我会先跟据tag替换掉角色(因为角色的骨骼差别比较大,玩家选择的职业不同,没有办法重定向,资源是单独的,跟角色一一对应),然后在替换掉动画轨道上面的资源。现在是我对动画轨道上的资源进行替换但是不生效。
这是第一种我的验证:但是失败了
for (int m = 0; m < animationSections.Num(); m++)
{
UMovieSceneSection* Section = animationSections[m];
if (Section->GetClass()->IsChildOf(UMUMovieSceneSkeletalAnimationSection::StaticClass()))
{
MUSkeletalAnimationSection= CastChecked(Section);
MUSkeletalAnimationSection[i]->Params.Animation = AnimSequence;
}
}
这是第二种:也失败了
FGuid SectionGuid = MUSkeletalAnimationSection->GetSignature();
const TArray<UMovieSceneTrack*>SceneTrack = HeroBind->GetTracks();
for (int i = 0; i < SceneTrack.Num(); i++)
{
const FMovieSceneTrackEvaluationField EvaluationField = SceneTrack[i]->GetEvaluationField();
for (int j = 0; j < EvaluationField.Entries.Num(); j++)
{
if (EvaluationField.Entries[j].Section->GetSignature() == SectionGuid)
{
CastChecked(EvaluationField.Entries[j].Section)->Params.Animation = AnimSequence;
}
}
}
看完还是没明白你为什么需要替换角色。
既然是人和狗区别这么大那直接两个sequence不就行了?
替换的原因是工作量比较大,比如剧情,每个角色的剧情都是一样的,只是主角不同,替换主角的话一个sequence 就能保证所有角色的剧情是相同的。但是动画替换不了,
这是什么需求····
试一试不放在sequence里边儿吧,AI move to配合delay和play montage。
找到修改办法了 直接拿到当前运行的SectionTemplate,对里面的参数进行修改就可以了