| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 | 
							- using System.Collections;
 
- using UnityEngine;
 
- namespace WildAttack
 
- {
 
-     /// <summary>
 
-     /// 箭
 
-     /// </summary>
 
-     public class Arrow : MonoBehaviour
 
-     {
 
-         #region Members
 
-         /// <summary>
 
-         /// 重力参数
 
-         /// </summary>
 
-         float gravity;
 
-         /// <summary>
 
-         /// 箭射出去时的向量
 
-         /// </summary>
 
-         private Vector3 moveSpeed;
 
-         private Vector3 gritySpeed;
 
-         /// <summary>
 
-         /// 飞行时间
 
-         /// </summary>
 
-         private float dTime;
 
-         private Vector3 currentAngle;
 
-         private AudioSource audioSource;
 
-         #endregion
 
-         #region Lifecycle
 
-         private void FixedUpdate()
 
-         {
 
-             if (isStop) return;
 
-             //计算物体的重力速度
 
-             //v = at ;
 
-             gritySpeed.y = gravity * (dTime += Time.fixedDeltaTime);
 
-             //位移模拟轨迹
 
-             transform.position += (moveSpeed + gritySpeed) * Time.fixedDeltaTime;
 
-             currentAngle.x = Mathf.Abs(Mathf.Atan(gritySpeed.y / moveSpeed.z) * Mathf.Rad2Deg);
 
-             if (transform.localEulerAngles.y > 260 && transform.localEulerAngles.y < 290)
 
-             {
 
-                 currentAngle.x /= 3;
 
-             }
 
-             transform.eulerAngles = new Vector3(transform.localEulerAngles.x + currentAngle.x * Time.fixedDeltaTime, transform.localEulerAngles.y, transform.eulerAngles.z);
 
-         }
 
-         private bool isStop = false;
 
-         /// <summary>
 
-         /// 箭的触发检测
 
-         /// </summary>
 
-         /// <param name="other"></param>
 
-         private void OnTriggerEnter(Collider other)
 
-         {
 
-             StopAllCoroutines();
 
-             if (other.gameObject.layer == LayerMask.NameToLayer("Plane"))
 
-             {
 
-                 isStop = true;
 
-                 SetTrailActive(false);
 
-                 transform.GetComponent<CapsuleCollider>().enabled = false;
 
-                 ProcessManager.GetInstance().AddStayArrow(gameObject);
 
-                 transform.GetChild(0).GetComponent<MeshRenderer>().materials[0].SetColor("_Color", new Color(175f / 255f, 175f / 255f, 175f / 255f, 1f));
 
-                 transform.GetChild(0).GetComponent<MeshRenderer>().materials[1].SetColor("_Color", new Color(175f / 255f, 175f / 255f, 175f / 255f, 1f));
 
-                 transform.localScale = new Vector3(5, 5, 3);
 
-                 transform.Rotate(new Vector3(10, 0, 0));
 
-             }
 
-             else
 
-             {
 
-                 Destroy(gameObject);
 
-             }
 
-             // 根据层级判断目标类型
 
-             if (other.gameObject.layer == LayerMask.NameToLayer("Enemy"))
 
-             {
 
-                 // 击中部位判定
 
-                 other.GetComponentInParent<Enemy>().Hitted(1, other.GetType() == typeof(SphereCollider));
 
-             }
 
-             else if (other.gameObject.layer == LayerMask.NameToLayer("StageProperty") || other.gameObject.layer == LayerMask.NameToLayer("Barrel"))
 
-             {
 
-                 // 道具触发
 
-                 other.GetComponent<StageProperty>().PropTrigger();
 
-             }
 
-         }
 
-         #endregion
 
-         #region Functions
 
-         /// <summary>
 
-         /// 初始化 射箭的时候调用
 
-         /// </summary>
 
-         /// <param name="rot"></param>
 
-         /// <param name="speed"></param>
 
-         public void Init(Vector3 rot, float speed)
 
-         {
 
-             //this.speed = speed;
 
-             transform.eulerAngles = rot;
 
-             audioSource = GetComponent<AudioSource>();
 
-             StartCoroutine(DestroySelf());
 
-             audioSource.clip = Resources.Load<AudioClip>("Voice/Arrow/Shoot");
 
-             if (UserSettings.ins.openEffect) audioSource.Play();
 
-             moveSpeed = Quaternion.Euler(new Vector3(transform.rotation.x, transform.rotation.y, 0)) * transform.forward * speed;
 
-             currentAngle = transform.eulerAngles;
 
-             gravity = -GameModule.GetInstance().GetData("g");
 
-             SetTrailActive(true);
 
-         }
 
-         private void SetTrailActive(bool active)
 
-         {
 
-             transform.Find("Trail1").gameObject.SetActive(active);
 
-             transform.Find("Trail2").gameObject.SetActive(active);
 
-         }
 
-         /// <summary>
 
-         /// 3秒自然销毁
 
-         /// </summary>
 
-         /// <returns></returns>
 
-         IEnumerator DestroySelf()
 
-         {
 
-             yield return new WaitForSeconds(3f);
 
-             Destroy(gameObject);
 
-         }
 
-         #endregion
 
-     }
 
- }
 
 
  |