Advanced Locomotion System V3

EDIT - Bluemak offered the solution on MP comments section:

[HR][/HR]

There’s no explanation of the process to change your character. Someone did a video using ‘assign skeleton’ but that’s largely useless because I need proper retargetting to our skeleton.

I retargetted it to my character and the character wont turn from the animation (while aiming). I’m using the original character BP and everything else uses interfaces, so there’s no possibility of a missing cast (and I triple checked it).

If I duplicate the ALS mannequin’s anim BP the issue does not occur, it’s only when I use the retargetting:

https://i.imgur.com/8IcNSm1.png

If I export the mannequin, then import it (to create a new skeleton and mesh) and then retarget to that, the issue occurs - meaning it’s not related specifically to our mesh/skeleton.

For IK to work on custom characters you need to add these two nodes to the post process anim BP

( copy this text (exactly) to the clipboard then paste it into the BP ) - the author should do this too so everyone gets the fix


Begin Object Class=/Script/AnimGraph.AnimGraphNode_CopyBone Name="AnimGraphNode_CopyBone_2"
   Node=(SourceBone=(BoneName="foot_l"),TargetBone=(BoneName="ik_foot_l"),ControlSpace=BCS_WorldSpace)
   ShowPinForProperties(0)=(PropertyName="SourceBone",PropertyFriendlyName="Source Bone",PropertyTooltip=NSLOCTEXT("UObjectToolTips", "AnimNode_CopyBone:SourceBone", "Source Bone Name to get transform from"),CategoryName="Copy")
   ShowPinForProperties(1)=(PropertyName="TargetBone",PropertyFriendlyName="Target Bone",PropertyTooltip=NSLOCTEXT("UObjectToolTips", "AnimNode_CopyBone:TargetBone", "Name of bone to control. This is the main bone chain to modify from. *"),CategoryName="Copy")
   ShowPinForProperties(2)=(PropertyName="bCopyTranslation",PropertyFriendlyName="Copy Translation",PropertyTooltip=NSLOCTEXT("UObjectToolTips", "AnimNode_CopyBone:bCopyTranslation", "If Translation should be copied"),CategoryName="Copy",bShowPin=True,bCanToggleVisibility=True)
   ShowPinForProperties(3)=(PropertyName="bCopyRotation",PropertyFriendlyName="Copy Rotation",PropertyTooltip=NSLOCTEXT("UObjectToolTips", "AnimNode_CopyBone:bCopyRotation", "If Rotation should be copied"),CategoryName="Copy",bShowPin=True,bCanToggleVisibility=True)
   ShowPinForProperties(4)=(PropertyName="bCopyScale",PropertyFriendlyName="Copy Scale",PropertyTooltip=NSLOCTEXT("UObjectToolTips", "AnimNode_CopyBone:bCopyScale", "If Scale should be copied"),CategoryName="Copy",bShowPin=True,bCanToggleVisibility=True)
   ShowPinForProperties(5)=(PropertyName="ControlSpace",PropertyFriendlyName="Control Space",PropertyTooltip=NSLOCTEXT("UObjectToolTips", "AnimNode_CopyBone:ControlSpace", "Space to convert transforms into prior to copying components"),CategoryName="Copy")
   ShowPinForProperties(6)=(PropertyName="ComponentPose",PropertyFriendlyName="Component Pose",PropertyTooltip=NSLOCTEXT("UObjectToolTips", "AnimNode_SkeletalControlBase:ComponentPose", "Input link"),CategoryName="Links",bShowPin=True)
   ShowPinForProperties(7)=(PropertyName="Alpha",PropertyFriendlyName="Alpha",PropertyTooltip=NSLOCTEXT("UObjectToolTips", "AnimNode_SkeletalControlBase:Alpha", "Current strength of the skeletal control"),CategoryName="Settings",bShowPin=True,bCanToggleVisibility=True)
   ShowPinForProperties(8)=(PropertyName="AlphaScaleBias",PropertyFriendlyName="Alpha Scale Bias",PropertyTooltip="Alpha Scale Bias",CategoryName="Settings")
   ShowPinForProperties(9)=(PropertyName="LODThreshold",PropertyFriendlyName="LOD Threshold",PropertyTooltip=NSLOCTEXT("UObjectToolTips", "AnimNode_SkeletalControlBase:LODThreshold", "* Max LOD that this node is allowed to run
* For example if you have LODThreadhold to be 2, it will run until LOD 2 (based on 0 index)
* when the component LOD becomes 3, it will stop update/evaluate
* currently transition would be issue and that has to be re-visited"),CategoryName="Performance")
   NodePosX=-1216
   NodePosY=-64
   NodeGuid=3D529F464631BCBC2571CB90F6F2AD35
   CustomProperties Pin (PinId=43D7FC874A52A88DCDB27693B5000DB7,PinName="bCopyTranslation",PinFriendlyName="Copy Translation",PinToolTip="Copy Translation
Boolean

If Translation should be copied",PinType.PinCategory="bool",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsArray=False,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,DefaultValue="true",AutogeneratedDefaultValue="False",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
   CustomProperties Pin (PinId=675B2AAC4EB23090EC92EFB6F0ED8FA3,PinName="bCopyRotation",PinFriendlyName="Copy Rotation",PinToolTip="Copy Rotation
Boolean

If Rotation should be copied",PinType.PinCategory="bool",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsArray=False,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,DefaultValue="true",AutogeneratedDefaultValue="False",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
   CustomProperties Pin (PinId=921880B64C270A813E9EFEB4E0B0B65D,PinName="bCopyScale",PinFriendlyName="Copy Scale",PinToolTip="Copy Scale
Boolean

If Scale should be copied",PinType.PinCategory="bool",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsArray=False,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,DefaultValue="False",AutogeneratedDefaultValue="False",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
   CustomProperties Pin (PinId=1064BFA340A02FC1050B8A89301484EA,PinName="ComponentPose",PinFriendlyName="Component Pose",PinToolTip="Component Pose
Component Space Pose Link Structure

Input link",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=ScriptStruct'"/Script/Engine.ComponentSpacePoseLink"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsArray=False,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,DefaultValue="(LinkID=-1,SourceLinkID=-1)",AutogeneratedDefaultValue="(LinkID=-1,SourceLinkID=-1)",LinkedTo=(AnimGraphNode_LocalToComponentSpace_0 79D2C07643B31E75C8555BA9137569CD,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
   CustomProperties Pin (PinId=AF2B6F824D6ED80EA2BBE29F16B4AF4D,PinName="Alpha",PinFriendlyName="Alpha",PinToolTip="Alpha
Float

Current strength of the skeletal control",PinType.PinCategory="float",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsArray=False,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,DefaultValue="1.000000",AutogeneratedDefaultValue="1.000000",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
   CustomProperties Pin (PinId=072ECDD041D5929851356895BC6DA776,PinName="Pose",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=ScriptStruct'"/Script/Engine.ComponentSpacePoseLink"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsArray=False,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,LinkedTo=(AnimGraphNode_CopyBone_0 1064BFA340A02FC1050B8A89301484EA,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
End Object
Begin Object Class=/Script/AnimGraph.AnimGraphNode_CopyBone Name="AnimGraphNode_CopyBone_0"
   Node=(SourceBone=(BoneName="foot_r"),TargetBone=(BoneName="ik_foot_r"),ControlSpace=BCS_WorldSpace)
   ShowPinForProperties(0)=(PropertyName="SourceBone",PropertyFriendlyName="Source Bone",PropertyTooltip=NSLOCTEXT("UObjectToolTips", "AnimNode_CopyBone:SourceBone", "Source Bone Name to get transform from"),CategoryName="Copy")
   ShowPinForProperties(1)=(PropertyName="TargetBone",PropertyFriendlyName="Target Bone",PropertyTooltip=NSLOCTEXT("UObjectToolTips", "AnimNode_CopyBone:TargetBone", "Name of bone to control. This is the main bone chain to modify from. *"),CategoryName="Copy")
   ShowPinForProperties(2)=(PropertyName="bCopyTranslation",PropertyFriendlyName="Copy Translation",PropertyTooltip=NSLOCTEXT("UObjectToolTips", "AnimNode_CopyBone:bCopyTranslation", "If Translation should be copied"),CategoryName="Copy",bShowPin=True,bCanToggleVisibility=True)
   ShowPinForProperties(3)=(PropertyName="bCopyRotation",PropertyFriendlyName="Copy Rotation",PropertyTooltip=NSLOCTEXT("UObjectToolTips", "AnimNode_CopyBone:bCopyRotation", "If Rotation should be copied"),CategoryName="Copy",bShowPin=True,bCanToggleVisibility=True)
   ShowPinForProperties(4)=(PropertyName="bCopyScale",PropertyFriendlyName="Copy Scale",PropertyTooltip=NSLOCTEXT("UObjectToolTips", "AnimNode_CopyBone:bCopyScale", "If Scale should be copied"),CategoryName="Copy",bShowPin=True,bCanToggleVisibility=True)
   ShowPinForProperties(5)=(PropertyName="ControlSpace",PropertyFriendlyName="Control Space",PropertyTooltip=NSLOCTEXT("UObjectToolTips", "AnimNode_CopyBone:ControlSpace", "Space to convert transforms into prior to copying components"),CategoryName="Copy")
   ShowPinForProperties(6)=(PropertyName="ComponentPose",PropertyFriendlyName="Component Pose",PropertyTooltip=NSLOCTEXT("UObjectToolTips", "AnimNode_SkeletalControlBase:ComponentPose", "Input link"),CategoryName="Links",bShowPin=True)
   ShowPinForProperties(7)=(PropertyName="Alpha",PropertyFriendlyName="Alpha",PropertyTooltip=NSLOCTEXT("UObjectToolTips", "AnimNode_SkeletalControlBase:Alpha", "Current strength of the skeletal control"),CategoryName="Settings",bShowPin=True,bCanToggleVisibility=True)
   ShowPinForProperties(8)=(PropertyName="AlphaScaleBias",PropertyFriendlyName="Alpha Scale Bias",PropertyTooltip="Alpha Scale Bias",CategoryName="Settings")
   ShowPinForProperties(9)=(PropertyName="LODThreshold",PropertyFriendlyName="LOD Threshold",PropertyTooltip=NSLOCTEXT("UObjectToolTips", "AnimNode_SkeletalControlBase:LODThreshold", "* Max LOD that this node is allowed to run
* For example if you have LODThreadhold to be 2, it will run until LOD 2 (based on 0 index)
* when the component LOD becomes 3, it will stop update/evaluate
* currently transition would be issue and that has to be re-visited"),CategoryName="Performance")
   NodePosX=-1216
   NodePosY=160
   ErrorType=4
   NodeGuid=BED04FC94B0BAF58A561A9950F18827C
   CustomProperties Pin (PinId=43D7FC874A52A88DCDB27693B5000DB7,PinName="bCopyTranslation",PinFriendlyName="Copy Translation",PinToolTip="Copy Translation
Boolean

If Translation should be copied",PinType.PinCategory="bool",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsArray=False,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,DefaultValue="true",AutogeneratedDefaultValue="False",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
   CustomProperties Pin (PinId=675B2AAC4EB23090EC92EFB6F0ED8FA3,PinName="bCopyRotation",PinFriendlyName="Copy Rotation",PinToolTip="Copy Rotation
Boolean

If Rotation should be copied",PinType.PinCategory="bool",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsArray=False,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,DefaultValue="true",AutogeneratedDefaultValue="False",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
   CustomProperties Pin (PinId=921880B64C270A813E9EFEB4E0B0B65D,PinName="bCopyScale",PinFriendlyName="Copy Scale",PinToolTip="Copy Scale
Boolean

If Scale should be copied",PinType.PinCategory="bool",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsArray=False,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,DefaultValue="False",AutogeneratedDefaultValue="False",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
   CustomProperties Pin (PinId=1064BFA340A02FC1050B8A89301484EA,PinName="ComponentPose",PinFriendlyName="Component Pose",PinToolTip="Component Pose
Component Space Pose Link Structure

Input link",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=ScriptStruct'"/Script/Engine.ComponentSpacePoseLink"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsArray=False,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,DefaultValue="(LinkID=-1,SourceLinkID=-1)",AutogeneratedDefaultValue="(LinkID=-1,SourceLinkID=-1)",LinkedTo=(AnimGraphNode_CopyBone_2 072ECDD041D5929851356895BC6DA776,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
   CustomProperties Pin (PinId=AF2B6F824D6ED80EA2BBE29F16B4AF4D,PinName="Alpha",PinFriendlyName="Alpha",PinToolTip="Alpha
Float

Current strength of the skeletal control",PinType.PinCategory="float",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsArray=False,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,DefaultValue="1.000000",AutogeneratedDefaultValue="1.000000",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
   CustomProperties Pin (PinId=072ECDD041D5929851356895BC6DA776,PinName="Pose",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=ScriptStruct'"/Script/Engine.ComponentSpacePoseLink"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsArray=False,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,LinkedTo=(AnimGraphNode_ModifyBone_102 4324171144775F12BF4610A840698087,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
End Object


2 Likes

I’m putting together an ai crowd demo using advance locomotion + AI Behavior toolkit, for the most part everything is running smoothly except for a couple of issues I need help with.

Ue4 - 4.19

  1. On hard direction changes, character goes face down, rotates around and comes back up. This is only when adding y-up mesh to the mannequin skeleton, I saw in the forums about root bone rotation in anim graph however I can’t see it anywhere, happens in both player and ai controlled.

  2. With the behavior toolkit theres a function with the ai to take a slot which when nearyby will transform and rotate to match and play a montage. When pausing the simulation and going frame by frame, character walks there, rotates the correct direction that I’ve set for 1 frame then reverts back to original rotation then begins playing the montage, which works for non ALS ai)

Any assistance would be much appreciated!

Kind Regards,

-Caleb

How do you apply IK to different skeleton? I have to use skeleton translation retargeting and seems like virtual bones connected to bones from non-retargeted animation.

I tried to set translation offsets to IK bones, tried this. Nothing works to me. Character rather puts a foot into terrain than change height of it.

Hey Enraged91 in case you or anyone is stuck on that, the thing is when you re import animations for the first time the curve names get messed up, go to all locomotion animations and rename the curves, all curves that go from -1 to 1 are FootPosition and the curves that stay at same value are FootDirection, to disable stops you would have to remove and fix those states in the animBP, and then you can remove the event for getting foot values, should be obvious if you dig into the animBP

Hi all, i was going through those steps, and ran into 2 problems, first is when using get base aim rotation, l am only getting pitch replicated in the aimoffset, not the whole “head look first then turn body” functionality i am kind of lost as to why since i am still not 100% comfortable with these blueprints.
Second is that without replication of MovementInput variable the pivots wont play, any ideas? i cant think of a way to fix it that does not use a replicated “desired velocity” or input rpc, maybe a rpc that triggers only when input has changed direction? that may work and will save bandwidth

The only thing that stopped my pivots from playing is when I retargetted the anim notify references weren’t updated. There’s no need to replicate anything or send any RPC.

Not sure about the aim offset. I no longer use ALS, made my own system.

I have yet to get a single character to remap properly. Whenever I’ve tried the paragon assets, the arms go all noodly. At least thats what happens when retargetting the animations as someone suggested in another post. Same thing happens with custom characters. Has anyone else had this issue or perhaps has a solution?

This.

A client has asked me to take a look at the project they’ve gotten together and so far, I’m unable to get any of my custom Skeletal Meshes to work with the system, at least without the legs being weird and turn-in-place not working properly.

Currently, I’m just retargeting the Animation BP’s from the original content and then re-assigning everything else until it seems to work without any warnings etc.

When you retarget, does your character just turn in place over and over again? If so, I am having the same problem.

How can you change the default run state to walking first? I’ve changed the third person to first person at game start but I’m unable to change the run state to walk!!! Please help meee… Thanks :slight_smile:

Does the dev still give update and support on this project?
Im expecting after 3 month that someone gracefully give him thing to optimize his product (Multiplayer fix/replication fix) that should be included in the current version of the product.

Movement replication is pretty much the only thing included in UE4. Turning a single player product into MP product is a load work for sure.
But adding unecessary coding that use lot of bandwith is totally against the expected result of a MP product.

This is a wonderful product. The fix should be implemented ASAP.

Will buy it and yelling TAKE MY MONEY as soon as it is done!

If not, well you wasted how many hours implementing networking? the extra hour litteraly save your work!

Maybe a SP and another MP version of this product on the marketplace would be better.

How do I make the camera clamp and not go underground when in third person?? Please Help!!

Hello Ryan92, You can add spheric colliding volume to te TP_camera component of your character blueprint. You can also setup a logic , that every time this volume overlaps with your character mesh, it will toggle the mesh visibility on/off, so that when you get too close to a wall your camera will not go inside youre mesh. Be shure to toggle mesh visibility only for you or the other players will see your mesh disappear when this occur.

Simple question: I am trying to add a UI component that I created for ALSBaseCharacter. I need an EventBeginPlay node to connect to my InitializeUI component. Where in ALS_BaseCharacter can I do this?

When I try to do a ragdoll event on character (player pressing X) it’s work fine…but when I try the same on my AI …the AI keep flying around like don’t have gravity.
How I can use the content ragdoll in my AI???

Is this still relevant to the project in it’s current state? I noticed no response from the author.

I may have implemented it incorrectly, but I was unable to get the replication fixes to work myself. I just reverted the changes to the original author’s implementation.

I noticed that the bot controls do not work for a client either.

hi i wanna ask how can i use this locomotion with my existing project specificly the mmo starter kit by codespartan