Motor6D Confusion - Connecting Rigs

Hello developers,

Today I request your help with another HORSE-RELATED issue. I’m currently trying to hook up a horse system. The way it works is the horse is its own humanoid that plays standing/resting animations on its own. When you mount it, the horse becomes a part of you. The rig loses its Humanoid, Head, and HumanoidRootPart (or rather, the parts get renamed). When you dismount, those get added back. I figure this would be better on the system than continually respawning horse models.

I’ve encountered some sort of issue however. Two issues to be precise, but I think they’re rooted in the same issue.

1.) When Horse_LowerTorso is moved at all in an animation, when it plays back the player’s character’s position in relation to the horse seems to be exaggerated. Examine the 2 mp4s below.
2.) The player’s character doesn’t move with the horse. The horse moves with the character. I’d prefer if the player’s character would latch to the saddle so the horse is ‘in control’ of all movements, however this is more of a nuisance than a huge problem. I can pretty easily just move the player’s character by hand with each keyframe if needed. Issue #1 is my main concern.

How the animation looks in the editor:


How the animation looks in-game:

I’ve included a file below. Feel free to download it and mess around. The only scripts are in ServerScriptService and StarterGui. I think this is a Motor6D problem, but I still have as much of a grasp on Motor6Ds as I do on quantum mechanics. I suspect that my code for creating a new Motor6D on the fly between the horse root and the player root is the issue, but again I don’t really understand how. I used a plugin to create the horse rig. In order for the animation to work, you must load it from the Horse dummy, save it yourself, and replace the in-studio Animationid with your own uploaded version. Try it out and lemme know what you find. If both issues here could be solved then I’d be ecstatic. I appreciate any and all responses.

Horse_Testing1.rbxl (116.5 KB)
I made the horse mesh for my own game however so please don’t hand it out to a bunch of people. I appreciate it a lot.

3 Likes

This can be taken care of by making the character a part of the horse instead of the horse becoming a part of the character. Or by simply welding the character’s RootPart to the horse’s saddle or whatnot meaning you wouldn’t need to remove any humanoid.

1 Like

I’d like for the horse + character combo to all be on the same animation however. For example the idle, trot, and gallop animations would include both the horse and the character. Is that still possible with your suggestion?

1 Like

I think this might help you with your animations.

1 Like

I found a solution to the issue, you need to make the join that you are editing with to
C0 = CFrame.new(Vector3.new(0,0,0)) C1 = CFrame.new(Vector3.new(0,0,0))
Then you won’t need to mess with the moter6d except for changing it’s Part1 and Part2.
Also messing around with the character like you are doing is bound to cause you many issues down the line.
Feel free to contact me JackLossesHisSanity#5800 on discord or just use the dev forms’s messages. (my time zone is AEST but expect me to be up until 12 pm (on discord only))

1 Like

After consideration, I’d rather not weld the player to the saddle since it wouldn’t allow me to animate the player + horse as a single entity.

Does anyone here have experience in Motor6D? In the idle animation I simply bob the Horse’s UpperTorso up and down to mimic breathing. Below:


But for some reason as soon as I instance a new joint between the horse’s root and the player’s root (player being the parent here), the same breathing animation makes the LOWERTORSO move for some reason, and the lowertorso refuses to move normally in the jump animation.

1 Like

It would be very useful to have the horse model you are currently using.

1 Like

I provided the horse model within the place file in the original post.

2 Likes

So that means you haven’t changed anything within the horse itself?
The current way you are doing it is going to lead to a lot of unintended side affects.

1 Like

When you create the join that connects the player and horse its created in a different spot then the one you rigged up
image
So I decided to print out where the CF’s positions are and it doesn’t look to good.
(rHorse is the dummy model horse)
image
image
Also based of the print the character shouldn’t even be moving like that, it should instantly teleport off into the abyss

You’re saying the connecting joint between the player and horse are different in the animation rig vs the in-game connected version? How would you remedy this?

You can use the command bar to manually change the root joint’s CFrame.
workspace.Horse.Horse_Root.Joint.C0 = CFrame.new(Vector3.new(0,0,0)) workspace.Horse.Horse_Root.Joint.C1 = CFrame.new(Vector3.new(0,0,0))
This should change the rig’s cframe.
Then for the other one you can just remove the joint.C = because it will be 0,0,0 by default

Doing this doesn’t seem to fix the issues listed in the original post.

I’m still left with the problem shown in the in-game mp4 at the top.

Could you send over a screenshot of the explorer along with a print of the horses cframes?
Also wouldn’t it be easier to get in a call, I’m in the atf discord fyi.

Everything I’m working with is the same as in the file at the top.

Print of the horses cframes would be the most impotent then

I’m saying that the horse in the file is the one I’m using. I’m not sure how obtaining the horse’s CFrames would help.

This seems to be a joint issue to me.

The motor 6d’s cframes define the position of a join (where and how it turns)

The horse + player rig:


The horse + player in-game:

I don’t see any huge differences between these sets of numbers, but perhaps I’ve missed something.

I just need to root parts Joint CFrame that connects the person with the horse which the code for is here (also very nice use of Instence:GetFullName())
image