Hi. I'm scripting character IK to look at object "enemy" direction. If enemy is above him, he look at enemy. The issue here is when enemy goes out of character range. Character should look forward, and he do. But for one second, you can see a kind of glitch movement. Here is my script Code (CSharp): using System.Collections; using System.Collections.Generic; using UnityEngine; public class LookingScript : MonoBehaviour { private Animator animator; private PlayerMovement _active; // check f enemy is inside character range or not public bool ikActive = false; public GameObject rightHandObj; public GameObject leftHandObj; public Transform lookObj = null; public float ad, sd; void Start() { _active = GetComponent<PlayerMovement>(); animator = GetComponent<Animator>(); } void Update() { lookObj = _active.enemy; // enemy object to look at. if (_active.actives == false && lookObj) // this to give smooth movement for IK. { ikActive = true; ad = ad + Time.deltaTime; sd = sd + Time.deltaTime; if (ad >= 1) { ad = 1; } if (sd >= 0.15f) { sd = 0.15f; } } else { sd = sd - Time.deltaTime; ad = ad - Time.deltaTime; ikActive = false; if (ad <= 0) { ad = 0.0f; } if (sd <= 0) { sd = 0.0f; } } } // end Uploade void OnAnimatorIK() { if (animator) { if (ikActive == true) { if (lookObj != null) { animator.SetLookAtWeight(ad, sd, 0, 0, 0); animator.SetLookAtPosition(lookObj.position); } if (rightHandObj != null) { animator.SetIKPositionWeight(AvatarIKGoal.RightHand, 1); animator.SetIKRotationWeight(AvatarIKGoal.RightHand, 1); animator.SetIKPosition(AvatarIKGoal.RightHand, rightHandObj.transform.position); animator.SetIKRotation(AvatarIKGoal.RightHand, rightHandObj.transform.rotation); } if (leftHandObj != null) { animator.SetIKPositionWeight(AvatarIKGoal.LeftHand, 1); animator.SetIKRotationWeight(AvatarIKGoal.LeftHand, 1); animator.SetIKPosition(AvatarIKGoal.LeftHand, leftHandObj.transform.position); animator.SetIKRotation(AvatarIKGoal.LeftHand, leftHandObj.transform.rotation); } } else { animator.SetLookAtWeight(ad, sd, 0, 0, 0); if (rightHandObj != null) { animator.SetIKPositionWeight(AvatarIKGoal.RightHand, 1); animator.SetIKRotationWeight(AvatarIKGoal.RightHand, 1); animator.SetIKPosition(AvatarIKGoal.RightHand, rightHandObj.transform.position); animator.SetIKRotation(AvatarIKGoal.RightHand, rightHandObj.transform.rotation); } if (leftHandObj != null) { animator.SetIKPositionWeight(AvatarIKGoal.LeftHand, 1); animator.SetIKRotationWeight(AvatarIKGoal.LeftHand, 1); animator.SetIKPosition(AvatarIKGoal.LeftHand, leftHandObj.transform.position); animator.SetIKRotation(AvatarIKGoal.LeftHand, leftHandObj.transform.rotation); } } // end else } } // end IK }