public void LookAt(Vector3 worldPosition, Vector4 worldUp) { Vector3 forward = worldPosition - GetPosition(); Quaternion q = Quaternion.identity; if (Quaternion.LookRotationToQuaternion(forward, worldUp, ref q)) { SetRotationSafe(q); } else { float mag = forward.magnitude; if (mag > Vector3.kEpsilon) { SetRotationSafe(Quaternion.FromToQuaternionSafe(Vector3.back, forward / mag)); } } hackDirty = true; }