| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- using System.Collections;
- using UnityEngine;
- namespace WildAttack
- {
- /// <summary>
- /// 弓
- /// </summary>
- public class Bow : MonoBehaviour
- {
- #region Members
- [SerializeField] private Transform shootPoint;
- private GameObject arrowPfb;
- private Animator anim;
- private float shootSpawn = 0;
- GameObject arrowObj = null;
- #endregion
- #region Lifecycle
- void Start()
- {
- //shootPoint = transform.Find("ShootPoint");
- arrowPfb = Resources.Load<GameObject>("Player/Arrow");
- anim = GetComponentInChildren<Animator>();
- //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
- /// <summary>
- /// 射击
- /// </summary>
- /// <param name="speed"></param>
- public void Shoot(float speed)
- {
- // 判空
- 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"));
- Arrow arrow = arrowObj.AddComponent<Arrow>();
- arrow.Init(GameObject.Find("CrossHairTrans").transform.eulerAngles, speed);
- arrowObj = null;
- StartCoroutine(CreateWaitForSeconds());
- }
- }
- }
- /// <summary>
- /// 生成新的箭
- /// </summary>
- IEnumerator CreateWaitForSeconds()
- {
- anim.SetTrigger("shoot");
- // 射箭间隔
- yield return new WaitForSeconds(GameModule.GetInstance().GetData("shootInterval"));
- CreateArrow();
- }
- private void CreateArrow()
- {
- arrowObj = GameObject.Instantiate<GameObject>(arrowPfb);
- arrowObj.transform.position = shootPoint.position;
- arrowObj.transform.rotation = shootPoint.rotation;
- }
- #endregion
- }
- }
|