unity – Why the transform is not looking at the target?

The goal is to make smooth rotating look at.

The parent object is my character have a Rigidbody.

The script is attached to the character parent.
I make a reference to the character child name head.

I have a cube as the target the cube is rotating around the character with random height.

The character is never looking at the cube.
I tried to change from LateUpdate to Update I tried to add a child of the head empty gameobject and reference the empty gameobject but still the character head is not rotating to the target.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SmoothLookAt : MonoBehaviour
{
    public Transform leadObj;
    public Transform lookAtTarget;
    public float damping = 6;
    public bool smooth = true;


    private void LateUpdate()
    {
        if (lookAtTarget)
        {
            if (smooth)
            {
                // Look at and dampen the rotation
                var rotation = Quaternion.LookRotation(lookAtTarget.position - leadObj.position);
                leadObj.rotation = Quaternion.Slerp(leadObj.rotation, rotation, Time.deltaTime * damping);
            }
            else
            {
                // Just lookat
                leadObj.LookAt(lookAtTarget);
            }
        }
    }

    private void Start()
    {
        // Make the rigid body not change rotation
        if (leadObj.GetComponent<Rigidbody>() != null)
            leadObj.GetComponent<Rigidbody>().freezeRotation = true;
    }
}

It seems to be working if I reference the head directly as leadObj and inside LateUpdate the problem is that I have to set the damping value to 260.

Why I need to set the damping value to be so high ?

And how can I make that the head will rotate to the target with automatic speed depending on the target moving speed ? So if I don’t set any damping value for example 0 or null it will automatic calculate the needing speed to rotate facing the target ?

I see now another problem. If I set the damping value to 100 for example the character head is stuttering the head will look at the target but will stuttering.
I want that if the damping value is 100 or lower than rotate the leadObj with a delay facing the target. Something like when a turret is rotating facing a missile and if the missile is moving too fast the turret is rotating with some delay because he rotate slower.
How can I do it ?

This is working using Lerp. But why if I set for example the duration value to 0 it’s not affecting the speed of the leadObj rotation ?

The leadObj keep rotating same speed facing the target even if the duration is 0.

What am I missing ?

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SmoothLookAt : MonoBehaviour
{
    public Transform leadObj;
    public Transform lookAtTarget;
    public float duration;
    public bool smooth = true;

    private float t = 0.0f;

    private void Start()
    {
        // Make the rigid body not change rotation
        if (leadObj.GetComponent<Rigidbody>() != null)
            leadObj.GetComponent<Rigidbody>().freezeRotation = true;
    }

    private void LateUpdate()
    {
        if (lookAtTarget)
        {
            if (smooth)
            {
                t += Time.deltaTime;
                float s = t / duration;

                // Look at and dampen the rotation
                var rotation = Quaternion.LookRotation(lookAtTarget.position - leadObj.position);
                leadObj.rotation = Quaternion.Lerp(leadObj.rotation, rotation, s);
            }
            else
            {
                // Just lookat
                leadObj.LookAt(lookAtTarget);
            }
        }
    } 
}