Example #1
0
            ParticleSystem bulletEffect; //탄 충돌 시 해당 속성의 이펙트 실행

            void Start()
            {
                proMove = GetComponent <ProjectilesMove>();
                //pool = GameObject.Find("MemoryPool").GetComponent<MemoryPooling>();
            }
Example #2
0
 private void Start()
 {
     proMove = GetComponent <ProjectilesMove>();
 }
Example #3
0
            /// <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]);
                }
            }