Sought
1
Hello, I got a problem that is disturbing me.
I start by rotating my character to look at my destination point (which is more or less at the same height):
m_target.transform.LookAt(m_path[0]);
m_target.transform.eulerAngles = new Vector3 (0f, m_target.transform.eulerAngles.y, 0f);
Then I try to move him by using his character controller:
Vector3 v = transform.TransformDirection((m_path[0] - m_target.transform.position) / distance) * m_target.GetComponent<Character>().m_speed * Time.deltaTime;
v.y -= 9.8f * Time.deltaTime;
m_target.GetComponent<CharacterController>().Move(v);
And finally, my character starts moving… in circles, always trying to attain the desired position with an Y angle of 0.
However, whenever I don’t rotate him, he moves just fine (but never faces his destination point…). What could be wrong with the way I rotate/move him? Thanks for your answers!
Sought
2
I got my answer after searching a little more.
SimpleMove and Move both expect a global direction, not local. The difference between them is that SimpleMove expects the velocity vector, while Move wants the displacement
Source: Charactercontroller.move affecting rotation - Unity Answers
(In the end I deleted the transform.TransformDirection()):
Vector3 v = (m_path[0] - m_target.transform.position) / d * m_target.GetComponent<Character>().m_speed * Time.deltaTime;
v.y -= 9.8f * Time.deltaTime;
m_target.GetComponent<CharacterController>().Move(v);
Seneral
3
Consider using transform.translate, that should fix it, as transform.transformDirection moves on this direction PLUS the start rotation. However, just try it:)