ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • RPG 액션 연습 02. Player 공격 모션
    연습 프로젝트/RPG 연습

    안녕하세요.

    오늘은 player의 공격 모션을 제작해볼 예정입니다.

     

    첫 번째로 생각나는 점은 플레이어의 공격을 3가지로 나누어

    콤보 공격이 가능하게 만들 것입니다.

     

    두 번째로 생각나는 점은 플레이어에게 가드 기능을 추가하면 어떨까? 생각 중입니다.

    상대 몬스터들이 만들어지면서 동작 구현에 맞게 동작 연출을 시도해 보겠습니다.

    그렇다면 바로 달려가 보겠습니다.

     

    우선 한 스크립트에 작성하게 되면 코드도 길어지고 가독성도 떨어지며 나중에 수정 및 유지보수가 어려워진다고 도 많이 들어서,,, 코드를 세분화한다는 게 아직 감은 안 잡히지만 연습을 해보도록 하겠습니다.

     

    새로운 스크립트를 만들겠습니다.

    Combo라는 스크립트이며 선언된 변수들은

    각 플레이어의 애니메이터를 담아올

    playerAnim / 콤보가 가능한지 체크할 comboPossible / 콤보 진행단계 comboStep로 3가지입니다.

     

    우선 Start함수에서 GetComponent로 Animator를 받아와 주었습니다.

     

    Attack기능을 할 함수를 보겠습니다.

    처음의 공격 상태 comboStep == 0 이니깐

    comboStep을 1로 변경해 주고

    Play함수를 이용해 "Attack01"을 실행시켜 주는 모습입니다.

    이후 한번 더 Attack함수가 실행되면 달라지는 comboStep으로 인해서

    그에 맞는 애니메이션을 실행할 예정입니다.

    각 comboStep에 맞춰 애니메이션을 실행할 부분입니다.

     

    하지만 단순히 이렇게 구현만 해 놓으면 comboStep이 계속 상승되니

    콤보를 입력할 시간이 지나면 Reset 되는 기능도 한꺼번에 만들겠습니다.

    ResetCombo 함수 기능입니다.

    comboStep = 0으로 초기화시켜주는 간단한 함수이지만

    어떻게 사용하느냐에 따라서 달라지는 함수입니다..!

    애니메이션에서 Event를 활용한 동작입니다.

     

    각 Attack() / NextAttack / ReseCombo를 Add 해 주어서

    Attack함수의 입력이 끝난 뒤 ResetCombo가 되기 전 

    입력이 됐다면 comboStep이 바뀌며 그에 맞는 Attack 모션을 구현되는 애니메이션 창입니다.

     

    이 Attack 함수는 GetMouseButtonDown(0)으로 실행됩니다.

    GetMouseButtonDown : 마우스가 한번 클릭됐을 시

    GetMouseButtonUp : 마우스가 클릭됐다가 떼어졌을 시

    GetMouseButton : 마우스가 누르고 있는 상태 일시 (계속)

    의 다른 함수들도 있으며

     

    또한 뒤에 붙은 0의 표시는 0,1,2로 각각 마우스 버튼의 왼쪽/오른쪽/스크롤

    이 세 가지를 나타냅니다.

     

    단순 공격 모션만 취하는 게 밋밋해 보여서 이펙트들을 가져왔습니다.

     

    각 Attack01 / Attack02 / Attack03에 사용될 오브젝트들입니다.

     

    공격 모션이 실행되는 타이밍에 맞춰 SetActive(true)로 활성화시켜주는 함수입니다.

     

    한 번에 한 함수에서 처리를 하고 싶었는데, 역량 부족으로 막혀서 실패를 하였습니다.

    파라미터 값을 받아서 직접 연결해 주면 될 것 같은데 음...

    우선 어택 모션을 완료하고 다시 수정을 해 봐야겠습니다.

     

    켜준 이펙트로 쓰이는 오브젝트는 자체적인 비활성화 해주는 스크립트로 해결했습니다.

    코드 내용을 보자면 우선 disableTime을 public 선언으로 비활성화될 입력값을 인스펙터 창에서 입력을 합니다.

    이후 활성화 시 매 번 실행되는 OnEnable함수 ( 계속 나오는 것 같은데 Start와 Awake 함수는 1회만 실행됩니다 ) 

    에서 우선 실행되고 있는 Invoke함수가 있다면 CancleInvoke 함수로 종료를 해 줍니다.

    이후 Invoke함수를 통하여 SetActive로 비활성화시켜주는 함수를 지정된 초 (disableTime) 후 실행시켜 줍니다.

    이해를 돕기 위한 인스펙터창 Disable 함수 사용법


     

    문제가 생겼습니다.

    제가 공격 기능은 잘 동작 하지만. 공격 도중 움직이면 플레이어는 공격 애니메이션을 취하면서

    미끄러지듯이 움직이는 현상이었습니다.

    잠시 저장을 해두고 해결되면 돌아오겠습니다.


     

    해결했습니다.

    우선 Combo 스크립트에서 testMove라는 불 변수로 움직임을 체크하려 했습니다.

    공격 모션의 처음과 공격 모션의 마지막 부분인 리셋 부분에

    이 불 체크로 공격 -> 공격 중~ 공격 끝 -> 끝

    이러한 방식으로 체크를 하였습니다.

     

    캡처 화면으로 보겠습니다.

    공격 시작을 알리는 TestMove  불 변수

    불 변수 testMove로 공격 중임을 알리였고

    이 ResetCombo에서 false로 바꿔주었습니다.

    이렇게 한 애니메이션에 총 5개의 event가 붙었고

    각 ComboPossible / Attack & NextAttackEffect1,2,3 / NextAttack / ResetCombo /

    가 되었습니다.

     

    00 : 23초

     

    댓글

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