ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • RPG 듀토리얼 17. BOSS!!! 02 / 02 (Return & Die)
    유니티 프로젝트/RPG 듀토리얼

    안녕하세요!!

    오늘은 Boss의 Rturn 부분과 함께

    대미지를 입어 Die 상태를 살펴보겠습니다.

     

    사실 요즘 코딩 테스트를 하는 데 있어 저의 부족함을 깨닫고.. (절실히)

    1일 1문제 (프로그래머스)를 실천해 보려고 했었습니다.. 만

    Level 1 문제도 상당히 오랜 시간이 걸리며,, 저의 부족함을 절실히 깨닫고

    알고리즘 공부에 힘을 싣고 있습니다...

    해야 하는 것도 많고 준비해야 하는것도 너무 많은 것 같아 처음에는 상당히 불안했었는데요.

    너무 복잡하게 생각하지 않고, 현재 할 수 있는 것부터 하나씩 하나씩 나아가기로 했습니다.

    목표가 있다는 것이 즐거움 아니겠습니까? 허허!!

    (내일의 저는 오늘의 저보다 성장해 있습니다.)


    자. 우선 그건 그거고 이건 이거니깐! 우선 구현한 Boss의 스크립트부터 이어서 보겠습니다.

     

    BossState의 상태가 Return일시 실행되는 Return 함수입니다.

     

    이 Return함수에서는 if-else 문으로 조건을 나누었습니다.

    거리 측정을 하기 위해 Distance를 사용했으며

     

    Boss의 위치에서 초기 위치의 거리가 0.5f보다 크다면?

    nav의 목적지를 초기 위치로 정해주어 이동을 하게 됩니다.

     

    반대로 실행될 else문에서는

    Boss의 위치에서 초기 위치의 거리가 0.5f 안에 있다고 간주하게 되어

    nav의 경로 초기화와 위치/회전 값을 설정해 주고

    hp초기화와 BossState를 Idle로 전환시켜 줍니다.

     

    복귀 후 모든 것이 초기화된 Boss는 초기와 같은 상태인 Idle 상태가 됩니다.

    BossState의 상태가 Damaged일시 실행되는 Damaged함수입니다.

     

    Damaged함수에서는 StartCorutine로 코 루틴 함수 DamagedProcess를 실행시켜 줍니다.

     

    코 루틴 함수 DamagedProcess는 

    yield return new WaitForSeconds(0.2f)를 이용해 0.2f초의 대기시간을 주었는데요

    (이 0.2f초의 대기시간을 준 이유는, 보스가 공격을 맞았을 시 잠깐 실행될 Hit Animation을 기다려 주기 위함입니다.)

     

    공격에 맞았으니 BossState의 상태를 Move로 바꿔주어 

     

    각 조건에 맞게 구현을 하게 해 줍니다.

    이해 돕기용 Boss Animator


    Player가 보스를 공격하면 HitEnemy가 실행됩니다.

     

    이 HitEnemy 함수는 간단합니다.

    현재 hp를 깎아 주며 목적지를 초기화해줍니다.

    (공격을 맞으면서 Hit모션을 실행하며 미끄러지듯 움직임을 방지하기 위함입니다.)

     

    if-else 문을 통해 hp가 0보다 크면 

    BossState의 상태를 Damaged로 변경해 주고

    hp가 0보다 작다면 죽은 것으로 간주하여

    BossState를 DIe로 바꿔주며

    진행 상황을 알려주는 text는 듀토리얼 clear!!!로 변경해 줍니다.

    이후 Die() 함수를 실행해 줍니다.

     

    Die 함수입니다.

     

    이 함수에선 StopAllCoroutines로 인해

    현재 진행 중인 코 루틴 함수들을 모두 멈춰줍니다.

    (Boss가 죽었으니 더 이상 실행 중인 코 루틴 함수들은 필요 없기 때문입니다.)

     

    이후 StartCoroutine를 통해 코루틴 함수 DieProcess를 실행해 줍니다.

    (코 루틴 함수로 실행시켜 준 이유는, 보스가 바로 사라지지 않고

    특정 시간을 부여해, 특정 시간이 지나면 사라지게 하기 위함입니다.)

     

    각 불필요한 컴포넌트는 비활성화를 해주며

    yield return new WaitForSeconds(10f)로 10초 후

    Destroy로 gameObject를 파괴시켜주는 모습입니다.

     

    01 : 00초

    이제 보스를 클리어했으니

     

    마을의 장로 Npc에게 돌아가 신을 재 로딩하여 튜토리얼을 처음부터 할지

    혹은 튜토리얼은 넘어가 다음 게임 RPG를 진행할지

    의 여부를 버튼으로 만들어 주면 될 것 같습니다.

     

    제가 게임의 틀을 너무 한정지어서 생각한 것 같습니다.

     

    게임 이니깐, 게임이라서 그 어떤 것도 가능한데,

     

    이러한 고정관념 때문에 스스로를 너무 제한적으로 가두지 않았나 싶습니다.

     

    하루하루 보다 더 낮은 모습으로 찾아뵙도록 하겠습니다.

     

    ps... 새벽 감성...

     

    감사합니다.

     

    댓글

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