Files
back_cantanBuilding/Assets/Scripts/UI/SmallGame/CannonRoot.cs
2026-05-26 16:15:54 +08:00

76 lines
2.8 KiB
C#

using Cinemachine;
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));
[HideInInspector]
public Transform shell;
[HideInInspector]
public Transform shellSub;
[HideInInspector]
public Transform virtualCamera1;
private void Reset()
{
cannon = transform.Find("animationcannon/cannon").GetComponent<Transform>();
fire = transform.Find("fire").GetComponent<PlayableDirector>();
text_beilv = transform.Find("animationcannon/cannon/cannon1/text_beilv").GetComponent<TMP_Text>();
shellStartPos = transform.Find("animationcannon/cannon/cannon1/shellstartpos").GetComponent<Transform>();
virtualCamera = transform.Find("cannoncamera").GetComponent<Transform>();
}
private void Awake()
{
Transform cannonObj = transform.parent.Find("shell");
if (cannonObj == null)
{
Debug.LogError("这是一个放在错误位置的轰炸相机和配置节点,干掉他");
return;
}
shell = transform.parent.Find("shell").GetComponent<Transform>();
shellSub = shell.Find("shell");
virtualCamera1 = shell.Find("cannoncamera1").GetComponent<Transform>();
}
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<CinemachineVirtualCamera>().Follow = null;
virtualCamera1.SetParent(transform.parent);
await Awaiters.Seconds(cameraStayDuration);
virtualCamera1.gameObject.SetActive(false);
}
}