Third person RPG-like examples?

Hi everyone. I’ve recently started toying with Cinemachine and it’s shaping up to be a fantastic tool. I spent a good few days choreographing camera movements for our character creation/selection with good ol’ coroutines and I was able to switch to using Cinemachine in a matter of minutes.

However, I have yet to find any good examples on a third person RPG-like controller. Everything I have found thus far points to using the FollowCam etc. I have a “working” example where I moderate the speed of the x/y axis based on if the right mouse button is held, control zoom via changing the radius of the high/med/low cameras based on the mousewheel, etc. But things still just feel a little “off” and I can’t quite find a combination of settings that feel right.

Does anyone know of (current assets, free or paid), or is willing to share examples of their third person controllers with Cinemachine? I did find this tweet from @Adam_Myhill but the link is dead =(

Can you elaborate a little on what you mean by “feels off”? I’d be happy to help you tweak your cam to get it right if I could know a little more about how it’s wrong.

Could you upload a simple project with your cam in its current state, so we could exchange some ideas?

Hi Gregoryl. Thanks for the speedy response and apologies for my delayed one! I think a lot of the odd feeling comes from not having the movement cohesive with the camera movement; likely 100% my fault due to not fully grasping Cinemachine settings.

I’m currently using the CinemachineFreeLook component with the following settings:
Y-axis: Accel Time=0.2, Decel Time=0.1
X-axis: Accel time=0.1, Decel Time=0.1
Heading: Heading Definition=“Target Forward”, Velocity Filter=4, Heading Bias=0
Orbits: Binding Mode=“Lock To Target On Assign”, Spline Curvature=0.2

All 3 rigs are using Orbital Transposer for the body and Composer for the Aim (no noise). The values for the height are all adjusted to the character’s height, and the radius is controlled via mouse wheel. I then modify the x/y speed based on the status of the right mouse button like so:

if (m_playerEntity.InputManager.MovementInput.y > 0f)
{
    Vector3 forward = GameManager.MainCamera.gameObject.transform.TransformDirection(Vector3.forward);
    forward.y = 0f;
    forward = forward.normalized;
    Vector3 right = new Vector3(forward.z, 0f, -forward.x);
    Vector3 targetDirection = forward * m_playerEntity.InputManager.MovementInput.y + right * m_playerEntity.InputManager.MovementInput.x;
    Quaternion targetRotation = Quaternion.LookRotation(targetDirection);
    m_playerEntity.gameObject.transform.rotation = targetRotation;
}

if (m_playerEntity.InputManager.HoldingRMB)
{
    m_playerEntity.FreeLook.m_XAxis.m_MaxSpeed = 300f;
    m_playerEntity.FreeLook.m_YAxis.m_MaxSpeed = 2f;
}
else
{
    m_playerEntity.FreeLook.m_XAxis.m_MaxSpeed = 0f;
    m_playerEntity.FreeLook.m_YAxis.m_MaxSpeed = 0f;               
}

m_zoom = Mathf.Clamp(m_zoom - Input.GetAxis("Mouse ScrollWheel") * 0.1f, 0f, 1f);

for (int i = 0; i < m_playerEntity.FreeLook.m_Orbits.Length; i++)
{
    m_playerEntity.FreeLook.m_Orbits[i].m_Radius = m_playerEntity.OrbitRadii[i] + m_zoom * 8f;
}

Which is basically saying: only move the camera when the right mouse button is held and the camera should steer the player if he is holding the right mouse button and they are moving forward. It “mostly” works but gets very quirky when strafing even though the follow target is still facing forward. Any tips/thoughts/advice on how you might improve this I would greatly appreciate it!

Thanks for the description, but I’m still having trouble forming a concrete idea of what’s wrong.

It would really really help if you would make a little project, just a simple capsule or something for the player and nothing else in the scene, with your input and camera connected to it. Package it up, send it to me, and then we’ll make some progress.

Fair enough. I am moving this weekend so it may take me a bit to package everything up and get it to you but will do it as soon as I can. Thanks again!