protected override void Update()
    {
        base.Update();

        var navMesh = GetComponent <NavMeshAgent>();

        if (navMesh)
        {
            var ownPosition = transform.position;
            var ownRotation = transform.rotation;

            if (head)
            {
                head.transform.position = new Vector3(ownPosition.x, head.transform.position.y, ownPosition.z);
                // head.transform.rotation = ownRotation;
                head.CalculateBounds();
            }

            if (bodyParts != null)
            {
                foreach (var bodyPart in bodyParts)
                {
                    if (!bodyPart)
                    {
                        continue;
                    }

                    bodyPart.transform.position = new Vector3(ownPosition.x, bodyPart.transform.position.y, ownPosition.z);
                    // bodyPart.transform.rotation = ownRotation;

                    bodyPart.CalculateBounds();
                }
            }
        }
    }
    protected override void Update()
    {
        base.Update();

        var ownPosition = transform.position;
        var ownRotation = transform.rotation;

        if (prevY == 0.0f)
        {
            prevY = ownRotation.y;
        }

        if (head)
        {
            head.transform.position = new Vector3(
                ownPosition.x,
                head.transform.position.y + ownPosition.y - prevY,
                ownPosition.z
                );
            head.transform.rotation = ownRotation;

            head.CalculateBounds();
        }

        if (bodyParts != null)
        {
            foreach (var bodyPart in bodyParts)
            {
                if (!bodyPart)
                {
                    continue;
                }

                bodyPart.transform.position = new Vector3(
                    ownPosition.x,
                    bodyPart.transform.position.y + ownPosition.y - prevY,
                    ownPosition.z
                    );

                if (!bodyPart.aiming && !bodyPart.GetStateController().chaseTarget)
                {
                    bodyPart.SetAimRotation(ownRotation);
                }

                bodyPart.CalculateBounds();
            }
        }

        prevY = ownPosition.y;
    }