/// <summary> /// 创建子弹 /// </summary> /// <param name="launchPositon"></param> /// <param name="force"></param> private void CreateBullet(MiniGameBarrageBulletTypeEnum bulletType, Vector3 targetPositon, float force) { Sprite spBullet = null; RuntimeAnimatorController animatorController = null; int damage = 10; bool hasDesAnim = false; switch (bulletType) { case MiniGameBarrageBulletTypeEnum.Stone: damage = 10; spBullet = MiniGameHandler.Instance.handlerForBarrage.miniGameBuilder.spStone; animatorController = MiniGameHandler.Instance.handlerForBarrage.miniGameBuilder.animatorControllerForStone; hasDesAnim = true; break; case MiniGameBarrageBulletTypeEnum.Arrow: damage = 10; spBullet = MiniGameHandler.Instance.handlerForBarrage.miniGameBuilder.spArrow; animatorController = MiniGameHandler.Instance.handlerForBarrage.miniGameBuilder.animatorControllerForArrow; break; case MiniGameBarrageBulletTypeEnum.Darts: damage = 20; spBullet = MiniGameHandler.Instance.handlerForBarrage.miniGameBuilder.spDarts; animatorController = MiniGameHandler.Instance.handlerForBarrage.miniGameBuilder.animatorControllerForDarts; break; case MiniGameBarrageBulletTypeEnum.Fireball: damage = 30; spBullet = MiniGameHandler.Instance.handlerForBarrage.miniGameBuilder.spFireball; animatorController = MiniGameHandler.Instance.handlerForBarrage.miniGameBuilder.animatorControllerForFireball; break; case MiniGameBarrageBulletTypeEnum.Egg: damage = 40; spBullet = MiniGameHandler.Instance.handlerForBarrage.miniGameBuilder.spEgg; animatorController = MiniGameHandler.Instance.handlerForBarrage.miniGameBuilder.animatorControllerForEgg; hasDesAnim = true; break; } //设置发射器朝向角度 mAngelsTarget = VectorUtil.GetAngle(objEjector.transform.position, targetPositon); //创建子弹 GameObject objBullet = Instantiate(objBulletModel, objBulletContainer.transform); objBullet.SetActive(true); objBullet.transform.position = objEjector.transform.position; MiniGameBarrageBulletCpt bulletCpt = objBullet.GetComponent <MiniGameBarrageBulletCpt>(); bulletCpt.SetBulletData(bulletType, spBullet, animatorController, damage, hasDesAnim); //发射子弹 bulletCpt.LaunchBullet(targetPositon, force); }
//private void OnTriggerStay2D(Collider2D collision) //{ // BarrageBulletCpt barrageBullet = collision.GetComponent<BarrageBulletCpt>(); // if (barrageBullet) // { // listSightBullet.Add(barrageBullet); // if (callBack != null) // callBack.SeeBullet(barrageBullet); // } //} public IEnumerator GetBullet() { while (true) { yield return new WaitForSeconds(0.1f); Collider2D[] colliders = Physics2D.OverlapCircleAll(transform.position, 2f); List<MiniGameBarrageBulletCpt> barrageBulletList = new List<MiniGameBarrageBulletCpt>(); foreach (Collider2D itemCollider in colliders) { MiniGameBarrageBulletCpt itemBullet = itemCollider.GetComponent<MiniGameBarrageBulletCpt>(); if (itemBullet) { barrageBulletList.Add(itemBullet); } } if (callBack != null && barrageBulletList.Count > 0) callBack.SeeBullet(barrageBulletList); } }
public void SeeBullet(List <MiniGameBarrageBulletCpt> barrageBulletList) { float distanceTemp = 0; Rigidbody2D rbNear = null; for (int i = 0; i < barrageBulletList.Count; i++) { MiniGameBarrageBulletCpt itemBullet = barrageBulletList[i]; Rigidbody2D rbBullet = itemBullet.GetComponent <Rigidbody2D>(); //获取最近的子弹 float distanceItem = Vector2.Distance(rbBullet.position, transform.position); if (distanceItem > distanceTemp) { distanceTemp = distanceItem; rbNear = rbBullet; } } Vector3 moveVelocity = new Vector3(-rbNear.velocity.y, rbNear.velocity.x); characterMoveCpt.SetDestination(transform.position + moveVelocity.normalized); }