using Cinemachine; using System; using TMPro; using UnityEngine; using UnityEngine.Playables; public class CannonRoot : MonoBehaviour { public Transform cannon; public PlayableDirector fire; public TMP_Text text_beilv; public Transform shellStartPos; [Header("点击按钮之后")] [Tooltip("播放开炮动画后炮弹出现时间")] public float shellShowStay = 0.55f; [Header("炮弹出现之后参数")] [Tooltip("炮弹飞行时间")] public float duration = 1.3f; [Tooltip("炮弹消失时间")] [Range(0, 2)] public float durationRatio = 1f; [Header("点击按钮之后相机时间轴")] [Tooltip("相机开始跟随时间")] public float cameraStartStayDuration = 0.8f; [Tooltip("相机飞行时间")] public float cameraDuration = 1.5f; [Tooltip("相机滞留时间")] public float cameraStayDuration = 0.8f; public Transform virtualCamera; [Header("炮弹缩放参数")] public float shellScaleValue = 4.5f; public AnimationCurve shellScaleCurve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.3f, 0.5f), new Keyframe(1, 1)); [NonSerialized] public Transform shell; [NonSerialized] public Transform shellSub; [NonSerialized] public Transform virtualCamera1; private void Reset() { cannon = transform.Find("animationcannon/cannon").GetComponent(); fire = transform.Find("fire").GetComponent(); text_beilv = transform.Find("animationcannon/cannon/cannon1/text_beilv").GetComponent(); shellStartPos = transform.Find("animationcannon/cannon/cannon1/shellstartpos").GetComponent(); virtualCamera = transform.Find("cannoncamera").GetComponent(); } private void Awake() { Transform cannonObj = transform.parent.Find("shell"); if (cannonObj == null) { Debug.LogError("这是一个放在错误位置的轰炸相机和配置节点,干掉他"); return; } shell = transform.parent.Find("shell").GetComponent(); shellSub = shell.Find("shell"); virtualCamera1 = shell.Find("cannoncamera1").GetComponent(); } public async void MoveCamera() { await Awaiters.Seconds(cameraStartStayDuration); virtualCamera1.position = virtualCamera.position; virtualCamera1.rotation = virtualCamera.rotation; virtualCamera1.gameObject.SetActive(true); virtualCamera1.SetParent(shell); await Awaiters.Seconds(cameraDuration); virtualCamera1.GetComponent().Follow = null; virtualCamera1.SetParent(transform.parent); await Awaiters.Seconds(cameraStayDuration); virtualCamera1.gameObject.SetActive(false); } }