using System.Collections; using System.Collections.Generic; using UnityEngine; using DG.Tweening; public class GateController : MonoBehaviour { public GameObject ganzi; // 指向“ganzi”对象的引用 private Tween currentAnimation; // 当前播放的动画Tween private Coroutine closeTimer; // 关门计时器协程 private float closeDelay = 4f; // 关门延迟时间(秒) public void OnTriggerEnter(GameObject other) { if (other.CompareTag("OpenTrigger")) { if (closeTimer != null) { StopCoroutine(closeTimer); // 停止当前的关门计时 } if (currentAnimation != null && currentAnimation.IsPlaying()) { currentAnimation.Kill(); // 停止当前的动画 } currentAnimation = ganzi.transform.DOLocalRotate(new Vector3(0, ganzi.transform.localEulerAngles.y, -90f), 1f); // 使用DoTween旋转开门 closeTimer = StartCoroutine(CloseDoorTimer()); // 重置并开始关门计时 } } // IEnumerator RotateGanzi(float targetAngle) // { // // 确定当前角度和目标角度 // float currentAngle = ganzi.transform.localEulerAngles.z; // float angleToRotate = Mathf.DeltaAngle(currentAngle, targetAngle); // // float duration = Mathf.Abs(angleToRotate) / 90f; // 假设以90度/秒的速度旋转 // float timeElapsed = 0; // // while (timeElapsed < duration) // { // timeElapsed += Time.deltaTime; // float newAngle = Mathf.Lerp(currentAngle, targetAngle, timeElapsed / duration); // ganzi.transform.localEulerAngles = new Vector3(ganzi.transform.localEulerAngles.x, ganzi.transform.localEulerAngles.y, newAngle); // yield return null; // } // // ganzi.transform.localEulerAngles = new Vector3(ganzi.transform.localEulerAngles.x, ganzi.transform.localEulerAngles.y, targetAngle); // } IEnumerator CloseDoorTimer() { yield return new WaitForSeconds(closeDelay); // 等待指定时间 if (currentAnimation != null && currentAnimation.IsPlaying()) { currentAnimation.Kill(); // 停止当前的动画 } currentAnimation = ganzi.transform.DOLocalRotate(new Vector3(0, ganzi.transform.localEulerAngles.y, 0f), 1f); // 使用DoTween旋转关门 } }