ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • RPG 듀토리얼 12. Player Skill (Skill 01 - 03)
    유니티 프로젝트/RPG 듀토리얼

    안녕하세요. 

     

    지난 글에는 skill00 인 파이어 볼 스킬에 대해 알아봤었죠.

     

    원래 스킬 전부를 보려고 했는데 설명하다 보니 이어지는 동작 체계들이 많아서.

     

    Skill00번과 CalulateDmg(대미지 계산 기능)을 봤었습니다.

     

    지난 글에서 설명드린 부분을 제외하고

     

    오늘은 

     

    나머지 스킬 01 - 03번까지 보려고 합니다.

     

    자 그럼 가장 기본 스킬인 Skill 00을 제외하고 01번부터 03번 까지 빠르게 보겠습니다.

     

    Skill02 hit 된 모습


    SkillFire01 스크립트입니다.

     

    01번과 비슷하며 간략하게 설명한 후 넘어가겠습니다.

     

    targetNot : 타깃이 지정 안 됐을 시 공격할 target입니다.

    target : 타깃이 지정됐을 시 공격할 target입니다.

    speed : skill01의 스피드입니다.

    hitEffect : skill01번이 맞고 난 후 생길 hitEffect입니다.

    pc : PlayerContoller에 있는 atkTarget을 가져오기 위한 변수 선언입니다.

    skillPower : skill01의 기본 파워입니다.

    dmg : 최종 대미지를 받을 변수입니다.

    dmgRate : 대미지 증감률 계산을 담을 변수입니다.


    우선 이 skill01은 캐스팅 중 기를 모으며

    캐스팅 완료 시 발사되며 관통이 되도록 구현하였습니다.

    화살이 난사되는 방식으로 구현을 하고 싶었는데

    아직 원하는 구현이 안 나왔을 뿐... 실패는 안 했습니다.

    포기는 배추 담글 때나 하는 말이죠

    현재는 큰 화살 한 개가 나갑니다!!


    활성화 시 실행되는 OnEnable 함수입니다.

    target = pc.atkTarget으로 지정해주며 pcatkTarget은 스킬 캐스팅 시작 시

    atkTarget = target으로 지정이 되어 있습니다.

     

    이후 StartCorutine를 이용해 코 루틴 함수 FlySkill을 실행해 줍니다.

    FlySkill 함수는 간단히 yield return new WaitForSeconds(1.4f) : 1.4초를 기다리며

    PlayOneShot으로 재생해 주는 함수입니다.

    1.4초는 skill01번의 캐스팅 시간과 맞췄으며. 캐스팅이 완료가 되면 flyAttack00 클립이 실행됩니다.

     

    StartCoroutine("Skill01") 코드를 보겠습니다.

    pctargetnull 일 때와 null이 아닐 시를 구별해 

    각 target.position / targetNot.position을 보게 만들어 주었습니다.

    타깃이 없을 때도 스킬을 발사할 수 있게 만들기 위함입니다.

     

    Invoke는 함수의 실행을 지연시켜 주는 함수입니다.

    skill01은 캐스팅 중엔 화살이 대기 상태로 있으며 캐스팅이 끝난 1.4f초 후에 "Move"함수가 실행되게 해 주었습니다.

     

    Translate로 Vector3.forward(앞 방향) * speed * Time.deltaTime으로 이동시켜주는 코드입니다.

     

    충돌 시 구현은 OnTriggerEnter 함수로 진행했습니다.

    Skill00과 전체적으로 비슷하지만.

    비활성화를 해주는 부분을 빼 주고

    자체 적으로 2.6초가 지나면 비활성화 되게 해 주었습니다.

    2.6초가 지나기 전 까진 이 skill01은 절대 사라지지 않습니다.

    (관통이 되는 것을 구현하기 위함입니다.)


    Skill02번 블랙홀입니다.

     

    이 스킬은 Enemy가 맞으면 지정된 시간만큼 기절된 상태에 있다가 다시 움직이게 하는 스킬입니다.

    강력한 몬스터 일 시 블랙홀을 걸어 주어 스킬들을 편하게 쓸 수 있습니다.

    이 스킬은 발사 대기 모션보다, 히트가 될 시가 핵심입니다. (여긴 발사 대기 모션)

    발사 대기 모션은 4.2f초로 애니메이션의 속도와 맞춰 놓았으며,

    간단히 4.2초 후 함수를 지연 후 실행시켜주는 Invoke 함수로 hitPlay 함수를 실행시켜 주는 모습입니다.

    사운드 재생 소리와 / hitEffect의 position (+ new vector3(0, 1, 0) 은 Target 위쪽에 생성하기 위함입니다.

    이후 hitEffectSetActive = true로 활성화를 시켜 줍니다.


    skillFire02 Hit 스크립트입니다.

     


    각 Enemy들이 담긴 List를 받아옵니다.

    List를 나눈 이유는 관리하기 위함입니다.

     

    충돌체의 태그가 Enemy 이거나 Enemy_Boss /

    그리고 스킬 시전 중 죽었을 때를 대비해 Dead 상태가 아닐 시 OverLap 함수를 실행하게 해 주었으며

     

    OverLap함수에서는주변 콜라이더를 추출하는 OverlapSphere를 이용해 콜라이더를 추출해 주었습니다.

    이동을 막기 위해 Nav를 비활성화해주며

    추출된 녀석들의 자식으로 있는 기절 오브젝트를 활성화시켜 줍니다.

     

    이후 함수를 지연 후 실행시켜주는 Invoke 함수로 10초 뒤 enemy_Nav_Enable를 실행시킵니다.

    enemy_Nav_Enable 함수에서는 다시 foreach문으로 list를 다시 검색해주며

    10초가 지난 뒤 실행될 enemy_Nav_Enable에서

    시각적 표현의 오브젝트는 비활성화를 해주고

    list를 Clear 함수로 비워 줍니다.

    즉 10초 뒤에는 처음과 같은 상태가 됩니다.


    Skill03 번은 새로 스크립트를 생성하지 않고

    즉시 효과가 발동되기에 PlayerController에서 해결했었습니다.

     

    00 - 03번의 스킬을 영상으로 보며 마무리하겠습니다!

     

    원활한 영상 촬영을 위해 Enemy의 체력을 1000으로 조정하였습니다.

     

     

    00 : 42초

     

     

    댓글

김효겸 / Tel. 010-7735-0580 / E-mail. dollzzang2@hanmail.net