using System.Collections; using UnityEngine; namespace WildAttack { /// /// 弓 /// public class Bow : MonoBehaviour { #region Members [SerializeField] private Transform shootPoint; private GameObject arrowPfb; private Animator anim; private float shootSpawn = 0; GameObject arrowObj = null; [Header("用户信息")] [SerializeField] PlayerTypeEnum playerTypeEnum = PlayerTypeEnum.First;//默认是用户1的弓 #endregion #region Lifecycle void Start() { //shootPoint = transform.Find("ShootPoint"); arrowPfb = Resources.Load("Player/Arrow"); anim = GetComponentInChildren(); //StartCoroutine(CreateArrow()); CreateArrow(); } void Update() { if (shootSpawn > 0) { shootSpawn -= Time.deltaTime; } // 更新准备中的箭 if (arrowObj == null) return; arrowObj.transform.position = shootPoint.position; arrowObj.transform.rotation = shootPoint.rotation; } #endregion #region Functions /// /// 射击 /// /// /// public void Shoot(float speed, Transform crossHair) { // 判空 if (arrowObj == null) return; // 判断动画状态 AnimatorStateInfo animInfo = anim.GetCurrentAnimatorStateInfo(0); if (animInfo.IsName("Start") && animInfo.normalizedTime > 0.99f) { // 判断射击间隔 if (shootSpawn <= GameModule.GetInstance().GetData("downTime") && shootSpawn > 0) { return; } else { shootSpawn = GameModule.GetInstance().GetData("downTime"); GameMananger.GetInstance().SetShootSpawn(GameModule.GetInstance().GetData("downTime"),playerTypeEnum); Arrow arrow = arrowObj.AddComponent(); //GameObject.Find("CrossHairTrans").transform arrow.Init(crossHair.eulerAngles, speed, playerTypeEnum); arrowObj = null; StartCoroutine(CreateWaitForSeconds()); } } } /// /// 生成新的箭 /// IEnumerator CreateWaitForSeconds() { anim.SetTrigger("shoot"); // 射箭间隔 yield return new WaitForSeconds(GameModule.GetInstance().GetData("shootInterval")); CreateArrow(); } private void CreateArrow() { arrowObj = GameObject.Instantiate(arrowPfb); arrowObj.transform.position = shootPoint.position; arrowObj.transform.rotation = shootPoint.rotation; } #endregion } }