Animations
Creat new clip in the Editor
Kemo III:
Make a new animation clip. Right click in the resource browser and create override (there's a bug if you try creating one that's not an override)
You can then rename it if you don't want to override an existing clip.
SetActionChannel
Activates animation on the agent
Agent.SetActionChannel(1, ActionIndexCache.act_none, false, (ulong)agent.GetCurrentActionPriority(1), 0f, 1f, 2f, 0.4f, 0f, false, -0.2f, 0, true);
public bool SetActionChannel(int channelNo, ActionIndexCache actionIndexCache, bool ignorePriority = false, ulong additionalFlags = 0UL, float blendWithNextActionFactor = 0f, float actionSpeed = 1f, float blendInPeriod = -0.2f, float blendOutPeriodToNoAnim = 0.4f, float startProgress = 0f, bool useLinearSmoothing = false, float blendOutPeriod = -0.2f, int actionShift = 0, bool forceFaceMorphRestart = true)
ActionIndexCache myAction = ActionIndexCache.Create("nameOfTheAction");
targetAgent.SetActionChannel(0, myAction, true);
channelNo
for agent.SetActionChannel(0, _actionIndexCache);, what's the difference between channel 0 and channel 1?
channel 0 is for movement, channel 1 is for combat anims (like swings and stuff)
hunharibo: afaik 0 is full body, 1 is upper body only (leg anims are still driven by movement)
blendInPeriod
float blendInPeriod
- sets how fast animation should blend-in from the previous animation. Sometimes the best looking results to go to the .act_none state are achieved with 1f or 2f values
default -0.2f is too fast ant looks unnatural
Example
Cheer example
private readonly ActionIndexCache[] _CheerActions = new ActionIndexCache[]
{
ActionIndexCache.Create("act_cheering_low_01"),
ActionIndexCache.Create("act_cheering_low_02"),
ActionIndexCache.Create("act_cheering_low_03"),
ActionIndexCache.Create("act_cheering_low_04"),
ActionIndexCache.Create("act_cheering_low_05"),
ActionIndexCache.Create("act_cheering_low_06"),
ActionIndexCache.Create("act_cheering_low_07"),
ActionIndexCache.Create("act_cheering_low_08"),
ActionIndexCache.Create("act_cheering_low_09"),
ActionIndexCache.Create("act_cheering_low_10"),
ActionIndexCache.Create("act_cheer_1"),
ActionIndexCache.Create("act_cheer_2"),
ActionIndexCache.Create("act_cheer_3"),
ActionIndexCache.Create("act_cheer_4"),
ActionIndexCache.Create("act_cheering_high_01"),
ActionIndexCache.Create("act_cheering_high_02"),
ActionIndexCache.Create("act_cheering_high_03"),
ActionIndexCache.Create("act_cheering_high_04"),
ActionIndexCache.Create("act_cheering_high_05"),
ActionIndexCache.Create("act_cheering_high_06"),
ActionIndexCache.Create("act_cheering_high_07"),
ActionIndexCache.Create("act_cheering_high_08")
};
agent.SetActionChannel(1, _CheerActions[MBRandom.RandomInt(_CheerActions.Length)], false, 0UL, 0f, 1f, 1f, 0.4f, 0f, false, -0.2f, 0, true);
agent.MakeVoice(SkinVoiceManager.VoiceType.Victory, SkinVoiceManager.CombatVoiceNetworkPredictionType.NoPrediction);
// stop cheering (after some time)
affectorAgent.SetActionChannel(1, ActionIndexCache.act_none, false, (ulong)agent.GetCurrentActionPriority(1), 0f, 1f, 2f, 0.4f, 0f, false, -0.2f, 0, true);
Stop looping
When agent plays a looping animation set with SetActionChannel to stop it set it to act_none action.
Workflow
Artem:
export with 24 fps and import into blender with proper orientation x and - y
Do my editing, export work proper values and import into bannerlord