| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- 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;
- [Header("用户信息")]
- [SerializeField]
- PlayerTypeEnum playerTypeEnum = PlayerTypeEnum.First;//默认是用户1的弓
- #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>
- /// <param name="crossHair"></param>
- 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<Arrow>();
- //GameObject.Find("CrossHairTrans").transform
- arrow.Init(crossHair.eulerAngles, speed, playerTypeEnum);
- 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
- }
- }
|