using UnityEngine; using DG.Tweening; public class SmoothChildRotation : MonoBehaviour { [Header("References")] public Transform targetChild; // Child object to rotate public string playerTag = "Player"; // Tag for player detection [Header("Rotation Settings")] public float rotationDuration = 0.5f; // Time in seconds for rotation public Ease rotationEase = Ease.OutQuad; // Easing type public Vector3 targetRotationOnEnter = new Vector3(0, 0, -90); public Vector3 targetRotationOnExit = new Vector3(0, 0, 0); private Tween currentTween; private void Start() { if (targetChild == null) { Debug.LogError("Target child is not assigned!"); enabled = false; return; } } private void OnTriggerEnter(Collider other) { if (other.CompareTag(playerTag)) { RotateTo(targetRotationOnEnter); } } private void OnTriggerExit(Collider other) { if (other.CompareTag(playerTag)) { RotateTo(targetRotationOnExit); } } private void RotateTo(Vector3 targetRot) { // Kill any existing tween to avoid stacking currentTween?.Kill(); currentTween = targetChild.DOLocalRotate( targetRot, rotationDuration ).SetEase(rotationEase); } }