-
Notifications
You must be signed in to change notification settings - Fork 2
적 시스템
휴먼 서바이벌은 사방에서 다양한 적들이 사방에서 많이 몰려오는 게임이다.
주인공은 이 적들에게 공격을 받기에 적을 공격해 없애야 한다.
적은 한 가지만 있지 않고 다양한 종류의 적들이 있다.
적은 공격력, 체력, 방어력, 드랍하는 경험치의 종류 그리고 이동 속도 등 다양한 고유의 수치를 가진다.
이 수치들은 적의 종류마다 다르다.
적은 각 적 종류에 정해져 있는 이동 속도 수치 만큼의 이동 속도로 주인공(Player)을 향해 이동한다.
적은 주인공과 충돌할 수 있다.
적은 맵에 있는 조형물과도 충돌할 수 있다.
적은 주인공의 스킬을 맞으면 데미지를 입어 체력이 감소한다.
또한 적은 피격 시 고유의 넉백 수치만큼 밀려난다.
현재 체력이 0 이하로 내려가면 적은 일정 확률로 보상을 생성하고 소멸한다.
주인공이 시전 한 스킬에 적이 맞으면 적은 데미지를 입는다.
적은 방어력 수치를 가지고 있다.
적이 주인공 스킬에 공격 당할 때 해당 스킬 총 데미지 만큼 체력이 감소하게 된다.
이 때 적은 그 자신의 방어력 스탯 만큼 감한 수치만큼 만 데미지를 입는다.
스킬 데미지가 방어력보다 작거나 같다면 데미지는 들어가지 않는다.
if( 스킬 총 데미지 > 방어력 )
적의 체력 = 기존 적의 체력 - (스킬의 총 데미지 - 방어력)
else
적의 체력= 기존 적의 체력
적은 공격을 당하면 아주 잠깐 경직되며 아주 잠깐 밀려난다.
적은 밀려날 때 주인공에게서 멀어지는 방향으로 밀려난다.
적마다 고유의 넉백수치가 있다.
또한 무기마다 고유의 넉백수치가 있다.
밀려나는 정도는 다음 식과 같다.
밀려나는 거리 = 무기별 밀려나는 거리 * 적의 고유 넉백 수치(0부터 최대 3까지)
몬스터는 기본적으로 가지고 있는 넉백이 있고 넉백 제한 치인 최대 넉백 수치가 있다.
주인공 스킬 중에 마늘이란 것이 있다.
이에 피격 당한 적은 넉백 저항이 감소한다, 즉 넉백이 증가한다.
하지만 이 넉백은 최대 넉백 수치 이상으로 증가할 수 없다.
적은 피격 시 몸 전체가 하얗게 변했다가 빠르게 원래 색으로 돌아간다.
주인공은 적과 접촉하거나 적의 공격에 맞으면 데미지를 입는다.
적이 주인공과 접촉하면 주인공은 데미지를 입는다.
데미지는 적의 공격력에서 주인공의 방어력을 차감한 만큼만 데미지를 입는다.
만약 적의 공격력이 주인공의 방어력보다 낮거나 같다면 데미지는 0으로, 입지 않는다.
주인공이 적으로부터 데미지를 입는 공식은 다음과 같다.
if( 적의 공격력 > 주인공 방어력)
주인공 체력 = 주인공 기존 체력 - (적의 공격력 - 방어력)
그리고 주인공과 적이 닿고 있는 동안 매우 짧은 주기마다 데미지를 입는다.
적은 주인공의 스킬을 맞으면 체력이 감소하고
현재의 체력이 0이하로 내려가면 죽는다.
일반적인 적은 죽으면 낮은 확률로 아무것도 드랍하지 않거나 높은 확률로 경험치를 드랍하거나 매우 낮은 확률로 돈을 드랍한다.
적은 고유의 경험치 스탯을 가지고 있다. 적은 경험치를 드랍 할 때 해당 경험치 스탯만큼의 경험치를 드랍한다. 주인공은 이 드랍된 경험치를 습득하면 주인공의 경험치가 증가한다. 캐릭터 성장 스탯이 실제 경험치 획득량에 영향을 미친다. 경험치 증가에 대한 식은 다음과 같다.
실제 경험지 습득량 = 경험치 드랍량 * ( 1 + 캐릭터 성장 스탯 / 100 )
이 경험치 드랍은 그 드랍이 가지고 있는 경험치 양에 따라 색이 다르다.
총 세가지 단계로 나타난다.
- 파란색 제일 작은 경우
- 초록색 파란색 보다 큰 경우
- 빨간색 제일 큰 경우
적이 죽을 때의 그래픽 효과는 다음과 같다.
-
플레이어에서 멀어지는 방향으로 일정거리만큼 날아감
-
이미지가 여러개로 찢어지며 흩어짐
엘리트 적은 일반 적들보다 비교적 강력한 대신 해치우면 보물상자라는 고급 보상을 주는 적이다.
일반 적 구현을 이용하면 되기에 추가로 구현해야 할 것은 적을 것이다.
- 사망 시 확률적으로 보물 상자를 드랍할 수 있다.
이 확률은 주인공의 행운스탯에 영향을 받는다.
보물 상자 드랍 확률 = ( 기본 드랍 확률 퍼센테이지 ) + ( 100 - 기본 드랍 확률 퍼센테이지 ) * 행운 / 100
휴먼 서바이벌엔 적이 다수 등장한다. 또한 점점 시간이 지나며 주인공이 강해질 수록 적들 또한 많아지고 강해진다. 그런 적들의 생성을 뜻하는 것이 적의 스폰이다. 적은 항상 플레이어 화면 바깥 중 임의의 위치에 생성된다.
휴먼 서바이벌에서는 계속해서 적이 생성된다. 이 적의 종류, 개체수, 스폰율, 속도 등은 1분마다 변경된다. 변경되는 이 적들을 Wave로 묶어서 표현한다. 예를 들어 게임 시간이 총 30분이면 총 30 Wave의 적들로 구성되어 있는 것이다. 이렇듯 적들은 Wave 단위로 스폰된다.
Wave 스폰에 필요한 변수들은 다음과 같다.
- 적의 최대 개체수
현재 적 개체수의 상한이다. - 적의 이동 속도
적들의 이동 속도를 증가 시키는 값이다. - 적의 체력
적들의 체력을 증가 시키는 값이다. - 적 스폰율
적의 생성 속도이다.
이 수치들은 Wave 별로 가지는 값들이다.
적은 무한대로 소환될 수 없다. Wave 마다 최대 개체수가 정해져 있다. 현재 적의 수가 최대 개체수보다 적을 때만 적이 소환된다.
매번 instantiate 하고 Destroy 하는 방식은 비효율적이라고 한다. 오브젝트 풀링 방식으로 이 스폰 문제를 최적화 할 수 있다고 한다.
캐릭터에게 저주라는 스탯이 있다. 저주 스탯의 설명은 다음 스크린샷과 같다.
위 설명에서 볼 수 있다시피 저주 스탯은 적의 속도,체력,개체수,스폰율을 증가시킨다. 저주는 퍼센테이지 스탯으로 해당 퍼센테이지만큼 속도,체력,개체수,스폰율을 증가시키면된다. 예를들면 다음식과 같다.
스폰율 = 해당 Wave의 생성속도 * ( 1 + 저주스탯 / 100 )
몬스터가 소환될 때 해당 몬스터의 최대체력은 캐릭터 레벨과 몬스터 고유의 값에 의해 정해진다.
몬스터는 maxHP 라는 수치와 level 수치 그리고 end라는 수치를 가지고 있다.
몬스터 레벨이라는 가상의 변수가 있다고 하자. 몬스터 레벨이 있고 몬스터 레벨에 maxHP를 곱한 값이 실제 몬스터의 체력이 된다. 몬스터 레벨의 초기 값은 level 이다. 캐릭터의 레벨이 증가함에 따라 몬스터의 레벨도 증가하여 실제 몬스터의 체력도 증가한다. 하지만 캐릭터 레벨이 증가한다고 계속해서 몬스터 레벨이 증가하는 것은 아니다. 바로 이 몬스터 end 수치가 있는데 이 end 수치만큼 증가할 수 있다.
예를들어 level이 3이고 end가 10인 몬스터가 있다고 하자. 그럼 이 몬스터는 초기 레벨은 3이며 몬스터의 최대 레벨은 13이다.
몬스터가 소환될 때 해당 몬스터의 최대체력은 maxHP * 몬스터 레벨로 조정되어 소환된다.
앞서 언급했듯 Wave마다 적의 종류가 바뀐다. Wave의 적이 한 종류일 수 도 있지만 두 종류, 세 종류까지 나올 수 있다. 한 Wave의 적이 여러 종류일 경우 매 적 소환마다 적의 종류를 번갈아가면서 소환한다. 적의 종류의 상관없이 현재 개체 수를 파악해 최대 개체수로 제한한다.
엘리트 적은 최대 개체 수에 영향 받지 않고 Wave가 바뀔때 즉시 1마리 소환된다. Wave 마다 엘리트 적이 고정되어 있다. Wave에 엘리트 적이 없을 수도 있다.
Wave 별로 박쥐 떼나 꽃 무리같은 함정 적이 있을 수도 있다. 함정 적들은 따로 현재 개체 수에 포함되지 않는다.
한 종류의 몬스터 다수가 뭉쳐서 한번에 보다 빠른 속도로 지나간다. 등장은 1분 동안 3번에 나눠 한다. (약 20초 간격) 몬스터 종류는 달라 질 수 있다.
한 종류의 몬스터 다수가 화면 바깥으로 둥글게 포진하여 생성된다. 등장은 Wave 변경시점에 바로 생성된다. 몬스터 종류는 달라 질 수 있다.
//추가 예정
화면 바깥으로 일정거리 이상 더 나간 적은 소멸한다. 이로 인해 현재 개체 수가 줄어드니 자동 생성으로 인해 다시 소환된다.