- Home /
 
Animated mesh looking the wrong way when using SetLookAtPosition
I have some kind of problem with the SetLookAtPosition() function... 
 For some reason my big statue boss doesn't want look at the position at all... (He's a bit of a shy guy if you ask me...)  
 Here's screenshot of the scene view: 
 The position I want its head to look at is at the blue star... In fact, it's exactly the position I'm feeding to the SetLookAtPosition() function. 
 I don't have any idea what could be causing this. I'm also doing the same thing with my other rigs yet no bug at all... 
 The code itself is quite simple, too: 
 private void LateUpdate()
 {
     if (m_currentLookPosition != m_targetVisualPosition)
     {
         m_currentLookPosition = Vector3.Lerp(m_currentLookPosition, m_targetVisualPosition, Time.deltaTime * (m_lerpTimeScale * 2f));
     }
 }
 
 private void OnAnimatorIK(int layerIndex)
 {
     m_animator.SetLookAtWeight(m_lookIKWeight, 0.125f, 1f, 1f, m_headTwistAngleLimit);
     if (m_hasVisualPosition && !IsInVisualField(m_targetVisualPosition))
     {
         m_animator.SetLookAtPosition(m_currentLookPosition);
         DebugExt.DrawPoint(m_currentLookPosition, Color.blue, 0.5f, 0);
     }
 }
 
               Basically I'm just changing the target position smoothly in the LateUpdate part and assigning it in the OnAnimatorIK one. Nothing fancy really...
 Oh, Just as a heads up, the statue mesh is fully custom while it's animations comes form Mixamo. Not sure it's the culprit, but you never know... 
 I rely on this call for my enemy (or in this case, boss) A.I. so any help would be appreciated!
Answer by OracleForms11g · Jun 03, 2019 at 02:36 PM
Finally, found it!
 For those who are wondering, the bug was quite simple: the SetLookAtPosition sometimes wasn't invoked at all due to the encapsulating if. When you have a look weight bigger than zero without a look position it instead uses a default coordinate (I suspect (0,0,0) but it doesn't really matter) 
 I've simply removed the !IsInVisualField(m_targetVisualPosition) bit from the if and now it works wonderfully... 
 That removed bit was part of a previous version of the code and didn't get refactored properly. 
So, kids, the lesson here is to never forget to refactor... 
 Otherwise you're gonna have a bad time.
Your answer