| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- using UnityEngine;
- using DG.Tweening;
- /* 拍摄箭飞行的摄像机 */
- public class ArrowCamera : MonoBehaviour
- {
- [System.NonSerialized] public Arrow arrow;
- [System.NonSerialized] public ArrowCameraTemplate arrowCameraTemplate;
- void Awake()
- {
- BowCamera.ins.SetArrowFollowing(true);
- }
- void Start()
- {
- arrowCameraTemplate = new ArrowCameraTemplate1(this);
- }
- void OnDestroy()
- {
- try { BowCamera.ins.SetArrowFollowing(false); } catch (System.Exception) {}
- }
- void FixedUpdate()
- {
- arrowCameraTemplate.Update();
- }
- }
- /* 模板1:跟着箭飞 */
- class ArrowCameraTemplate1 : ArrowCameraTemplate
- {
- public ArrowCameraTemplate1(ArrowCamera arrowCamera) : base(arrowCamera) {
- this.arrowCamera.arrow.activeEffectCyclone(true);
- }
-
- private bool cameraMoveFinish = false;
- Vector3 cameraToRunPosition = new Vector3(0.4f, 0.3f, -1 - Mathf.Clamp(Arrow.speed / 20 * 6, 0, 6));
- Vector3 cameraFinalPosition = new Vector3(-0.3f, 0.2f, -1.3f);
- public override void Update() {
- if (cameraMoveFinish) {
- return;
- }
- Transform cameraT = this.arrowCamera.transform;
- Vector3 cameraPosition = cameraT.localPosition;
- if (this.arrowCamera.arrow.isHit) {
- cameraPosition = Vector3.Lerp(cameraPosition, cameraFinalPosition, Time.deltaTime * 8);
- float d = Vector3.Distance(cameraPosition, cameraFinalPosition);
- if (d < 0.001f) {
- cameraMoveFinish = true;
- Sequence seq = DOTween.Sequence();
- seq.AppendInterval(2.2f);
- seq.AppendCallback(delegate() {
- this.arrowCamera.arrow.nextShoot();
- GameObject.Destroy(this.arrowCamera.gameObject);
- });
- }
- } else {
- cameraPosition = Vector3.Lerp(cameraPosition, cameraToRunPosition, Time.deltaTime * 6);
- }
- cameraT.LookAt(this.arrowCamera.arrow.Head());
- cameraT.localPosition = cameraPosition;
- }
- }
- public class ArrowCameraTemplate {
- public ArrowCamera arrowCamera;
- public ArrowCameraTemplate(ArrowCamera arrowCamera)
- {
- this.arrowCamera = arrowCamera;
- }
- public virtual void Update() {}
- public virtual void beforeHit() {}
- public virtual void SendMsg(int id, object msg) {}
- }
|