| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363 | 
							- using System.Collections;
 
- using System.Collections.Generic;
 
- using UnityEngine;
 
- using DG.Tweening;
 
- using UnityEngine.SceneManagement;
 
- /* 拍摄箭飞行的摄像机 */
 
- public class ArrowCameraNew : MonoBehaviour
 
- {
 
-     public int playerIndex;
 
-     [System.NonSerialized] public ArrowNew2 arrow;
 
-     [System.NonSerialized] public ArrowCameraTemplateNew arrowCameraTemplate;
 
-     [System.NonSerialized] public bool isArrowSync = false;
 
-     [System.NonSerialized] public ArrowSync arrowSync;
 
-     public void SetArrowSync(ArrowSync arrowSync)
 
-     {
 
-         isArrowSync = true;
 
-         this.arrowSync = arrowSync;
 
-     }
 
-     //在Awake之前调用,设置好属性
 
-     public ArrowCameraNew setInitData(ArrowNew2 _arrow,int _playerIndex) {
 
-         arrow = _arrow;
 
-         playerIndex = _playerIndex;
 
-         //Debug.Log("setInitData playerIndex==============:" + playerIndex);
 
-         return this;
 
-     }
 
-     void Awake()
 
-     {
 
-        
 
-     }
 
-     void Start()
 
-     {
 
-         //Debug.Log("start playerIndex==============:" + playerIndex);
 
-         if (playerIndex == 0)
 
-         {
 
-             GameController.ins.GetBowCameraDoublePlayer(PlayerType.FirstPlayer).SetArrowFollowing(true);
 
-         }
 
-         else
 
-         {
 
-             GameController.ins.GetBowCameraDoublePlayer(PlayerType.SecondPlayer).SetArrowFollowing(true);
 
-         }
 
-         if (SceneManager.GetActiveScene().name == "GameDouble" || SceneManager.GetActiveScene().name == "InfraredGameDouble")
 
-         {
 
-             arrowCameraTemplate = new ArrowCameraTemplateNew1(this);
 
-             //if ((isArrowSync && arrowSync.canUseSideCamera) || (!isArrowSync && arrow.canUseSideCamera))
 
-             //{
 
-             //    Debug.Log("ArrowCameraTemplateNew2");
 
-             //    arrowCameraTemplate = new ArrowCameraTemplateNew2(this);
 
-             //}
 
-             //else
 
-             //{
 
-             //}
 
-         }
 
-     }
 
-     void OnDestroy()
 
-     {
 
-         try
 
-         {
 
-             //Debug.Log("playerIndex==============:"+ playerIndex);
 
-             if (playerIndex == 0)
 
-             {
 
-                 GameController.ins.GetBowCameraDoublePlayer(PlayerType.FirstPlayer).SetArrowFollowing(false);
 
-             }
 
-             else
 
-             {
 
-                 GameController.ins.GetBowCameraDoublePlayer(PlayerType.SecondPlayer).SetArrowFollowing(false);
 
-             }
 
-         }
 
-         catch (System.Exception) { }
 
-     }
 
-     void FixedUpdate()
 
-     {
 
-         arrowCameraTemplate.Update();
 
-     }
 
- }
 
- /* 模板3:跟着箭飞_打猎场景 */
 
- class ArrowCameraTemplateNew3 : ArrowCameraTemplateNew
 
- {
 
-     public ArrowCameraTemplateNew3(ArrowCameraNew arrowCamera) : base(arrowCamera)
 
-     {
 
-         if (!arrowCamera.isArrowSync)
 
-         {
 
-             this.arrowCamera.arrow.activeEffectCyclone(true);
 
-         }
 
-         else
 
-         {
 
-             this.arrowCamera.arrowSync.activeEffectCyclone(true);
 
-         }
 
-         Camera camera = arrowCamera.transform.GetComponent<Camera>();
 
-         if (camera) camera.fieldOfView = 25;
 
-     }
 
-     private bool cameraMoveFinish = false;
 
-     Vector3 cameraToRunPosition = new Vector3(0.4f, 0.5f, -1 - Mathf.Clamp(Arrow.speed / 20 * 6, 0, 6));
 
-     Vector3 cameraFinalPosition = new Vector3(0.4f, 0.8f, -5f);
 
-     //若有树的遮挡,则使用以下视角坐标
 
-     Vector3 cameraFinalPosition_whenBlockByTree = new Vector3(0.15f, 0.3f, -1.2f);
 
-     bool hasBlockByTree = false;
 
-     Vector3 blockByTreeLookAtPoint;
 
-     public override void Update()
 
-     {
 
-         if (cameraMoveFinish)
 
-         {
 
-             return;
 
-         }
 
-         Transform cameraT = this.arrowCamera.transform;
 
-         Vector3 cameraPosition = cameraT.localPosition;
 
-         if ((!this.arrowCamera.isArrowSync && this.arrowCamera.arrow.isHit) ||
 
-             (this.arrowCamera.isArrowSync && this.arrowCamera.arrowSync.isHit))
 
-         {
 
-             cameraPosition = Vector3.Lerp(cameraPosition, cameraFinalPosition, Time.deltaTime * 6);
 
-             cameraT.localPosition = cameraPosition;
 
-             if (hasBlockByTree)
 
-             {
 
-                 cameraT.LookAt(blockByTreeLookAtPoint);
 
-             }
 
-             float d = Vector3.Distance(cameraPosition, cameraFinalPosition);
 
-             if (d < 0.001f)
 
-             {
 
-                 cameraMoveFinish = true;
 
-                 Sequence seq = DOTween.Sequence();
 
-                 if (!quicklyNextShoot) seq.AppendInterval(1f);
 
-                 seq.AppendCallback(delegate () {
 
-                     if (!this.arrowCamera.isArrowSync)
 
-                     {
 
-                         this.arrowCamera.arrow.nextShoot();
 
-                     }
 
-                     GameObject.Destroy(container ? container : this.arrowCamera.gameObject);
 
-                 });
 
-             }
 
-         }
 
-         else
 
-         {
 
-             cameraPosition = Vector3.Lerp(cameraPosition, cameraToRunPosition, Time.deltaTime * 6);
 
-             cameraT.localPosition = cameraPosition;
 
-             if (this.arrowCamera.isArrowSync)
 
-             {
 
-                 cameraT.LookAt(this.arrowCamera.arrowSync.Head());
 
-             }
 
-             else
 
-             {
 
-                 cameraT.LookAt(this.arrowCamera.arrow.Head());
 
-             }
 
-         }
 
-     }
 
-     GameObject container = null;
 
-     public override void beforeHit()
 
-     {
 
-         //把镜头从箭中移除,放到一个固定的容器里,免得随着动物抖动
 
-         if (!container)
 
-         {
 
-             container = new GameObject("CameraContainer");
 
-             container.transform.position = this.arrowCamera.arrow.transform.position;
 
-             container.transform.rotation = this.arrowCamera.arrow.transform.rotation;
 
-             this.arrowCamera.transform.SetParent(container.transform);
 
-             //检测有没有树遮挡
 
-             Quaternion rot = container.transform.rotation;
 
-             Quaternion back = rot * Quaternion.AngleAxis(180, Vector3.up); //绕本地坐标轴旋转
 
-             for (int i = -36; i <= 36; i += 3)
 
-             {
 
-                 float angle = i;
 
-                 Quaternion axis = back * Quaternion.AngleAxis(angle, Vector3.up);
 
-                 Vector3 direction = axis * Vector3.forward;
 
-                 RaycastHit[] raycastHits = Physics.RaycastAll(container.transform.position, direction, 6f);
 
-                 foreach (var raycastHit in raycastHits)
 
-                 {
 
-                     Transform tf = raycastHit.transform;
 
-                     if (tf && tf.name.StartsWith("TreeCollider"))
 
-                     {
 
-                         cameraFinalPosition = cameraFinalPosition_whenBlockByTree;
 
-                         hasBlockByTree = true;
 
-                         ArrowNew2 arrow = this.arrowCamera.arrow;
 
-                         blockByTreeLookAtPoint = arrow.Head().position - arrow.transform.forward * 0.5f;
 
-                         break;
 
-                     }
 
-                 }
 
-             }
 
-         }
 
-         //记录需要同步的消息
 
-         if (!this.arrowCamera.isArrowSync)
 
-         {
 
-             if (this.arrowCamera.arrow.outputSyncData != null)
 
-             {
 
-                 this.arrowCamera.arrow.outputSyncData.SetArrowCameraTemplate3(this.hasBlockByTree, this.quicklyNextShoot);
 
-             }
 
-         }
 
-     }
 
-     public void beforHitWhenSync(bool hasBlockByTree)
 
-     {
 
-         this.hasBlockByTree = hasBlockByTree;
 
-         container = new GameObject("CameraContainer");
 
-         container.transform.position = this.arrowCamera.arrowSync.transform.position;
 
-         container.transform.rotation = Quaternion.LookRotation(this.arrowCamera.arrowSync.transform.forward, Vector3.up);
 
-         this.arrowCamera.transform.SetParent(container.transform);
 
-         this.arrowCamera.transform.localRotation = Quaternion.identity;
 
-         if (hasBlockByTree)
 
-         {
 
-             cameraFinalPosition = cameraFinalPosition_whenBlockByTree;
 
-             ArrowSync arrowSync = this.arrowCamera.arrowSync;
 
-             blockByTreeLookAtPoint = arrowSync.Head().position - arrowSync.transform.forward * 0.5f;
 
-         }
 
-     }
 
-     public bool quicklyNextShoot = ChallengeGameMode.IsChallengeWolf();
 
-     public override void SendMsg(int id, object msg)
 
-     {
 
-         if (id == 0)
 
-         {
 
-             quicklyNextShoot = true;
 
-         }
 
-         //记录需要同步的消息
 
-         if (!this.arrowCamera.isArrowSync)
 
-         {
 
-             if (this.arrowCamera.arrow.outputSyncData != null)
 
-             {
 
-                 this.arrowCamera.arrow.outputSyncData.SetArrowCameraTemplate3(this.hasBlockByTree, this.quicklyNextShoot);
 
-             }
 
-         }
 
-     }
 
- }
 
- /* 模板2:从侧面看箭飞 */
 
- class ArrowCameraTemplateNew2 : ArrowCameraTemplateNew
 
- {
 
-     public ArrowCameraTemplateNew2(ArrowCameraNew arrowCamera) : base(arrowCamera)
 
-     {
 
-         this.arrowCamera.transform.parent = null;
 
-         arrowCamera.transform.localPosition = new Vector3(8.33f, 2.45f, 6.4f);
 
-         arrowCamera.transform.localEulerAngles = new Vector3(0, -42, 0);
 
-     }
 
-     bool isHit = false;
 
-     public override void Update()
 
-     {
 
-         if (arrowCamera.isArrowSync)
 
-         {
 
-             if (!isHit)
 
-             {
 
-                 isHit = arrowCamera.arrowSync.isHit;
 
-                 if (isHit)
 
-                 {
 
-                     this.arrowCamera.transform.SetParent(this.arrowCamera.arrowSync.transform);
 
-                     arrowCamera.transform.localPosition = new Vector3(-0.3f, 0.2f, -1.3f);
 
-                     arrowCamera.transform.LookAt(this.arrowCamera.arrowSync.Head());
 
-                     Sequence seq = DOTween.Sequence();
 
-                     seq.PrependInterval(2.2f);
 
-                     seq.AppendCallback(delegate () {
 
-                         GameObject.Destroy(this.arrowCamera.gameObject);
 
-                     });
 
-                     return;
 
-                 }
 
-             }
 
-             if (!arrowCamera.arrowSync)
 
-             {
 
-                 GameObject.Destroy(this.arrowCamera.gameObject);
 
-             }
 
-         }
 
-         else
 
-         {
 
-             if (!isHit)
 
-             {
 
-                 isHit = arrowCamera.arrow.isHit;
 
-                 if (isHit)
 
-                 {
 
-                     this.arrowCamera.transform.SetParent(this.arrowCamera.arrow.transform);
 
-                     arrowCamera.transform.localPosition = new Vector3(-0.3f, 0.2f, -1.3f);
 
-                     arrowCamera.transform.LookAt(this.arrowCamera.arrow.Head());
 
-                     Sequence seq = DOTween.Sequence();
 
-                     seq.PrependInterval(2.2f);
 
-                     seq.AppendCallback(delegate () {
 
-                         this.arrowCamera.arrow.nextShoot();
 
-                         GameObject.Destroy(this.arrowCamera.gameObject);
 
-                     });
 
-                     return;
 
-                 }
 
-             }
 
-             if (!arrowCamera.arrow)
 
-             {
 
-                 GameObject.Destroy(this.arrowCamera.gameObject);
 
-             }
 
-         }
 
-     }
 
- }
 
- /* 模板1:跟着箭飞 */
 
- class ArrowCameraTemplateNew1 : ArrowCameraTemplateNew
 
- {
 
-     public ArrowCameraTemplateNew1(ArrowCameraNew arrowCamera) : base(arrowCamera)
 
-     {
 
-         if (!arrowCamera.isArrowSync)
 
-         {
 
-             this.arrowCamera.arrow.activeEffectCyclone(true);
 
-         }
 
-         else
 
-         {
 
-             this.arrowCamera.arrowSync.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.isArrowSync && this.arrowCamera.arrow.isHit) ||
 
-             (this.arrowCamera.isArrowSync && this.arrowCamera.arrowSync.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 () {
 
-                     if (!arrowCamera.isArrowSync)
 
-                     {
 
-                         this.arrowCamera.arrow.nextShoot();
 
-                     }
 
-                     GameObject.Destroy(this.arrowCamera.gameObject);
 
-                 });
 
-             }
 
-         }
 
-         else
 
-         {
 
-             cameraPosition = Vector3.Lerp(cameraPosition, cameraToRunPosition, Time.deltaTime * 6);
 
-         }
 
-         if (this.arrowCamera.isArrowSync)
 
-         {
 
-             cameraT.LookAt(this.arrowCamera.arrowSync.Head());
 
-         }
 
-         else
 
-         {
 
-             cameraT.LookAt(this.arrowCamera.arrow.Head());
 
-         }
 
-         cameraT.localPosition = cameraPosition;
 
-     }
 
- }
 
- public class ArrowCameraTemplateNew
 
- {
 
-     public ArrowCameraNew arrowCamera;
 
-     public ArrowCameraTemplateNew(ArrowCameraNew arrowCamera)
 
-     {
 
-         this.arrowCamera = arrowCamera;
 
-     }
 
-     public virtual void Update() { }
 
-     public virtual void beforeHit() { }
 
-     public virtual void SendMsg(int id, object msg) { }
 
- }
 
 
  |