Hi, so under this lecture there is already a thread with the title “Character wont face the same direction as the camera”. This point got resolved, but I have the same problem and the solution there doesn’t apply to me. Can somebody help me? I’ll include screenshots of my code.
Hey @BlenderGuy,
- What exactly is happening?
- Do you get any errors in the console?
- Did you double-check your Cinemacine settings?
- Did you double-check your Prefab hierarchy / apply any overrides you have?
- Are you getting the correct camera values in PlayerStateMachine?
private void Start()
{
if (Camera.main != null) MainCameraTransform = Camera.main.transform;
}
You can post the code using the code tag in the editor - it’s the </> symbol. It’s easier to copy-paste it for debugging. Looking over the SS you posted, I don’t see anything wrong there.
Hi, thanks for the quick response. I checked again and I found that the problem actually is that the character doesn’t rotate in the direction the camera is looking. I couldn’t differnciate that before. I will send you my code again, maybe you will find something with this info or tell me where I have to search.
Also I have all overrides applied and there are no errors in the console.
`using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerFreeLookState : PlayerBaseState
{
private readonly int FreeLookSpeedHash = Animator.StringToHash("FreeLookSpeed");
private const float AnimatorDampTime = 0.1f;
public PlayerFreeLookState(PlayerStateMachine StateMachine) : base(StateMachine)
{
}
public override void Enter()
{
}
public override void Tick(float deltaTime)
{
Vector3 movement = CalculateMovement();
StateMachine.Controller.Move(movement * StateMachine.FreeLookMovementSpeed * deltaTime);
if (StateMachine.InputReader.MovementValue == Vector2.zero)
{
StateMachine.Animator.SetFloat(FreeLookSpeedHash, 0, AnimatorDampTime, deltaTime);
return;
}
StateMachine.Animator.SetFloat(FreeLookSpeedHash, 1, AnimatorDampTime, deltaTime);
FaceMovementDirection(movement, deltaTime);
}
public override void Exit()
{
}
private Vector3 CalculateMovement()
{
Vector3 forward = StateMachine.MainCameraTransfrom.forward;
Vector3 right = StateMachine.MainCameraTransfrom.right;
forward.y = 0f;
right.y = 0f;
forward.Normalize();
right.Normalize();
return forward * StateMachine.InputReader.MovementValue.y +
right * StateMachine.InputReader.MovementValue.x;
}
private void FaceMovementDirection(Vector3 movement, float deltaTime)
{
StateMachine.transform.rotation = Quaternion.Lerp(
StateMachine.transform.rotation,
Quaternion.LookRotation(movement),
deltaTime * StateMachine.RotationDamping
);
}
}
`
Hey @BlenderGuy, can you also post the code from PlayerStateMachine.cs.
Can you also post a screenshot of your Hierarchy and prefab structure? (like this one)
As a general rule to troubleshoot things, you can use the debug logs to see what values you get and where the problem is. For example
You can put a debug log in CalculateMovement() to see if you get any values from the camera
private Vector3 CalculateMovement()
{
Vector3 forward = StateMachine.MainCameraTransfrom.forward;
Vector3 right = StateMachine.MainCameraTransfrom.right;
forward.y = 0f;
right.y = 0f;
forward.Normalize();
right.Normalize();
Debug.Log($"Forward is {forward.ToString()} + Right is {right.ToString()}");
return forward * StateMachine.InputReader.MovementValue.y + right * StateMachine.InputReader.MovementValue.x;
}
Hi, so I tried the Debug.Log, and I’m getting values for the rotation of the camera, like in the Screenshot.
Maybe I have duck sth off in the Animation?
Anyways here is the prefab Hierarchy and StateMachine. Thanks for you help.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerStateMachine : StateMachine
{
[field: SerializeField]public InputReader InputReader{get;private set;}
[field: SerializeField]public CharacterController Controller{get;private set;}
[field: SerializeField]public float FreeLookMovementSpeed{get;private set;}
[field: SerializeField]public float RotationDamping{get;private set;}
[field: SerializeField]public Animator Animator{get;private set;}
public Transform MainCameraTransfrom{get;private set;}
private void Start()
{
MainCameraTransfrom = Camera.main.transform;
SwitchState(new PlayerFreeLookState(this));
}
}
Hmm, they all look good to me. When you have the time, please do the following
- Create a new test scene with just the player/ground/camera and test it there. It it’s still broken, do the following .
- Right-click the Test Scene file and click “Select Dependencies”
- Right-click again and select “Export-Package”
- Upload that package to Dropbox/Google Drive/ Etc and paste the link here so I can download it and take a better look.
Here comes my Dropboxlink. And again thank you very much for the help.
It works, thank you kindly for your efforts. 









