ParticleSystem bulletEffect; //탄 충돌 시 해당 속성의 이펙트 실행 void Start() { proMove = GetComponent <ProjectilesMove>(); //pool = GameObject.Find("MemoryPool").GetComponent<MemoryPooling>(); }
private void Start() { proMove = GetComponent <ProjectilesMove>(); }
/// <summary> /// 스킬 사용 시 이펙트 실행 /// 위에는 공격 버튼 클릭 할때 한번만 실행 /// 이 함수는 하번 호출할때 /// 캐릭터의 행동에 맞게 여러번 발생 /// skillndex는 사용 스킬 번호 /// rot 는 반복 횟수 /// delay는 다음 이펙트 실행까지 딜레이 /// speed는 파티클를 날린다 /// rageDmg 발사체를 날리지 않으면 /// 캐릭터 주변으로 데미지를 준다(광역 데미지와 같은 원리로) /// </summary> /// <param name="isPlayer"></param> public IEnumerator BulletSetting(bool isPlayer, int skillIndex) { //광역 피해 사용 시 if (isRageDmg[skillIndex]) { GameManager.INSTANCE.SFXPlay(_Audio, _Sfx[skillIndex + 1]); Collider[] colls = Physics.OverlapSphere(this.transform.position, 5, LayerMask.GetMask("Enemy")); if (colls.Length > 0) { for (int i = 0; i < colls.Length; i++) { if (colls[i].GetComponent <HitDmg>()) { Transform target = colls[i].GetComponent <EnemyCtrl>()._HitInfo; int minDmg = NMinDmg + player.NBuffDmg + nDmgPlus[skillIndex]; //최소 데미지 + 버프데미지 + 스킬 데미지 int maxDmg = NMaxDmg + player.NBuffDmg + nDmgPlus[skillIndex]; colls[i].GetComponent <HitDmg>().HitDmage(target, Random.Range(minDmg, maxDmg)); } } } } for (int i = 0; i < skillRot[skillIndex]; i++) { switch (BulletType) { case eProjectilesType.BubbleBlue: obj = pool.GetObjPool(pool.BubbleBluetMaxCount, pool.BubbleBlueList); break; case eProjectilesType.BubbleRose: obj = pool.GetObjPool(pool.BubbleRoseMaxCount, pool.BubbleRoseList); break; case eProjectilesType.Feather: obj = pool.GetObjPool(pool.FeatherMaxCount, pool.FeatherList); break; case eProjectilesType.CometBlue: obj = pool.GetObjPool(pool.CometBlueMaxCount, pool.CometBlueList); break; case eProjectilesType.FireBall: obj = pool.GetObjPool(pool.FireBallCount, pool.FireBallList); break; case eProjectilesType.Spark: obj = pool.GetObjPool(pool.SparkCount, pool.SparkList); break; case eProjectilesType.AttackExplosion: obj = pool.GetObjPool(pool.AttackExplosionCount, pool.AttackExplosionList); break; } yield return(new WaitForSeconds(skillDelay[skillIndex])); //과부하 발생 시 이중 루프 삭제!!--------------------------------------------- //for문 명령어만 삭제 안의 내용은 사용한다 for (int j = 0; j < firePos.Length; j++) { if (obj != null) { obj.transform.position = firePos[j].transform.position; obj.transform.rotation = firePos[j].transform.rotation; obj.SetActive(true); ProjectilesMove objData = obj.GetComponent <ProjectilesMove>(); //탄의 속성값 적용 objData.MinDmg = NMinDmg + player.NBuffDmg + nDmgPlus[skillIndex]; //최소 데미지 + 버프데미지 + 스킬 데미지 objData.MaxDmg = NMaxDmg + player.NBuffDmg + nDmgPlus[skillIndex]; //최대 데미지 objData.MoveSpeed = skillMoveSpeed[skillIndex]; //속도 objData.IsExplosion = IsExplosion; //폭발 속성 유무 100% objData.FExplosionArea = FExplosionArea; //폭발 범위 objData.IsStun = IsStun; //기절 속성 유무 objData.FStunPer = FStunPer; //기절 속성 확률 objData.FBulletDis = FBulletDis; obj.GetComponent <ProjectilesMove>().IsPlayerBullet = isPlayer; } } //------------------------------------------------------- GameManager.INSTANCE.SFXPlay(_Audio, _Sfx[skillIndex + 1]); //yield return new WaitForSeconds(skillDelay[skillIndex]); } }