What's the best way to create these camera movements?

Hey there! I am currently in the process of making a gear, also known as the “Omni-Directional Mobility Gear”; which basically uses hooks to travel at fast speeds - this is what I have so far.

Problem - The camera movement is not very smooth.
Solution(s) tried - I set the camera’s CFrame to my HumanoidRootPart’s CFrame with an angle; in a RenderStepped function. I have also tried clamping the camera on the Y-axis.

The camera movement that I am trying to achieve is the following:


I would be very grateful if someone could please guide me in the direction that I need to go in order to make my camera movement smoother, as seen in the video above. :slightly_smiling_face:

4 Likes

In my experience, you never want to directly attach the camera to the character if you are going to tilt it. It can get very disorienting very quickly.

Try to create some sort of camera spring system, that allows varied distances at different times. Also, I think your tilt needs to be more subtle.

A little goes a long way with camera work. Its not something you want to get crazy with, so the player doesn’t get nauseous.

As far as actual technical direction, I don’t have anything to say. Making good camera work is pretty difficult.

Thanks for your advice! Yeah, I can definitely agree that making good camera work is difficult. :sweat_smile:

I’ve decided to make the tilt more subtle, and I’ll consider the varied distances - but I’m still hoping that someone else can reply to give some more technical direction. :stuck_out_tongue:

So from what I can tell in the second video, the camera effect is based on the left and right tilting of the gear in addition to using both hooks at once. The camera tilts some degrees to the left/right based on simply what key the player is pressing.

In this case, I would recommend using tweenservice to tilt the camera when pressing A/D or move it back when both hooks are out, since tweenservice is always smooth. Just be careful not to overlap the tweens.

Also, try not to aim the camera at the point in which the hook attaches, since it can make it disorienting especially when using heartbeat to constantly re-angle it.

1 Like

@TheTurtleMaster_2 Sorry about that, won’t do it again. :smile:

@doser225 Thanks for your advice, I have just now implemeneted camera tilting when holding A/D (for now, I’m going to leave the camera going outwards when both hooks are enabled).
However, with your last point, where should I aim the camera? Here’s what I’m currently doing:

local End = ((Left_Hook ~= nil and Left_Hook.Position) or (Right_Hook ~= nil and Right_Hook.Position))

local Offset = Vector3.new(-5, 2.5, 0)

Camera.CFrame = CFrame.new(Camera.CFrame.Position + Offset, End) * CFrame.Angles(0, 0, math.rad(Z))
-- ^ Z is the tilted angle, being 30 for the left hook, and -30 for the right hook.

Try not to aim it altogether, since in the second video there is no aiming of the camera towards the endpoint. However, if you really want to, you could try and tween it towards where you shoot your hooks, or add some wind-particles (think kinda like a slipstream) flying across your screen when you go very fast and choose what looks best.

After some changes, I made it so there is no ‘aiming’, and the camera still follows the player (I believe this is getting closer to the finished product).

However, I was wondering if there is a way to keep the camera’s current LookVector?

Camera.CFrame = CFrame.new(Camera.CFrame.Position, HumanoidRootPart.Position)

If you’re looking for smoother camera movements, one of the easiest ways to do this is by tying the camera to a invisible part, then move that part to the character with body forces such as BodyPosition. I’ve learned in fast moving games this usually gives nice results, you may want to try it out.

Additionally, I think you shouldn’t point the camera towards the connection point, your camera should always mainly follow the character otherwise it’s bound to get confusing & nauseating.