본문 바로가기

Unity 개발일기

Unity 포켓몬스터 모작(5) - 배틀 시 풀죽음과 랭크변화, 반동 데미지 구현

1. 개요

지난 시간까지는 포켓몬스터의 기본 구조와 UI, 배틀필드의 기능 일부 구현을 해보았다.

이번 시간에는 배틀필드의 기능을 추가 구현해보겠다.

변화기와 스킬 부가효과 발동을 구현할 건데, 한 번에 전부는 힘들고 역시 일부 구현을 해 볼 것이다. 이번에는 풀죽음과 랭크변화, 반동 데미지를 구현해보자.

 

 

 

2. 설계

사실 이번에는 크게 설계랄 것이 없다. 지난 시간까지 짜 둔 큰 틀 안에서 세부 내용 변화를 추가하는 수준이기 때문이다.

단, 풀죽음과 랭크변화, 반동 데미지의 작동 원리만을 우선적으로 설명하겠다.

 

풀죽음 : 공격자가 풀죽음을 유발하는 공격을 선공으로 사용했다면, 해당 공격에 맞은 포켓몬은 30% 확률로 풀이 죽어 해당 턴에 움직일 수 없는 상태가 된다. 반면, 후공으로 사용했다면 아무런 효과가 없다.

 

랭크변화 : 각 기술마다 할당되어 있는 랭크 변화가 존재한다. 예를 들어 리프스톰 같은 경우 공격 시 자신의 특수 공격이 2랭크 하락한다든지, 인파이트 같은 경우 자신의 방어와 특수방어가 1랭크씩 하락한다든지 하는 식이다.

 

반동 데미지 : 상대방에게 가한 데미지의 1/3 만큼의 반동 데미지를 입는다.

 

이러한 사실을 바탕으로 변화기를 사용하거나 기술의 부가효과를 얻게 하는 것을 만들어보자.

 

 

 

3. 구현

(1) Battle State 분기 추가

BattleFlags 함수에 분기 추가

지난 포스팅에는 없었던 내용이 추가된 것을 확인할 수 있을 것이다.

ourTeamSkillEffect, enemySkillEffect 플래그가 추가되었다.

각각의 내용을 살펴보겠다.

ourTeamSkillEffect

SkillEffectActivate 함수는 스킬마다 부가효과를 발동하는 함수인데, enemySkillEffect는 공격자와 수비자, 스킬종류만 바뀌고 완벽히 동일하다. 중요한 것은 SkillEffectActivate 함수가 어떻게 구성되어 있는지이다.

skill의 번호에 해당하는 부가효과를 적용시키는 함수로, 아무런 효과가 없는 경우에는 flag=1로 변화시켜 바로 아군 공격을 끝내는 페이즈로 이동한다.

방어 1랭크 상승

자신의 방어가 1랭크 상승하는 기술을 사용했을 때 발동한다.

아직은 기술을 많이 넣지 않았기 때문에 해당하는 기술이 껍질에숨기 하나 뿐이다. 향후 기술 추가를 통해 업데이트 하면 될 문제이다.

상대 방어 1랭크 감소

상대 방어를 1랭크 감소시키는 기술을 사용했을 때 발동한다.

현재는 째려보기 뿐이다.

상대 풀죽음 유발

0~9까지 랜덤하게 난수를 하나 받고, 이 값이 3 미만이라면 풀죽음이 일어난다. 30% 구현을 한 방법이다.

반동 데미지

자신이 가한 데미지의 1/3 만큼에 해당하는 반동 데미지를 받는 기술이다.

이 때, trueDamage 는 이번에 새로 선언해준 변수로, damageCalculator로 구해진 damage 값과 공격 당하는 쪽의 현재 체력 중 작은 값을 넣어주면 된다.

10% 확률로 상대방을 화상 상태로 만든다

이번에 사실 설명은 안했지만 구현 자체는 해두었다.

상태이상에 해당하는 UI는 다음 시간에 추가해보도록 하자.

자신의 특수공격이 2랭크 하락하는 기술

리프스톰만 있는 상태. 향후 추가 예정

자신의 방어, 특수방어 1랭크씩 하락하는 기술

들이받기, 인파이트만 있는 상태. 향후 추가 예정

 

 

그리고 마지막으로, SkillEffect를 활성화하기 위해서 Flag의 연결 상태를 바꿔줄 필요가 있다.

BattleFlags 변경사항 (1)

빨간 동그라미 친 부분은 기존에 "ourTeamAttackEnd" 였던 부분인데, 이렇게 변경함으로써 접속을 변경시켜준다.

enemy에 해당하는 동일한 플래그에도 동일하게 접속을 변경시켜준다.

BattleFlags 변경사항 (2)

빨간 동그라미 친 부분이 역시 바뀐 부분으로, ourTeamAttackEnd에서 바뀌었다.

기존에는 변화기를 구현하지 않았었는데 이번에 구현을 하였기 때문에 접속해주었다.

 

 

 

4. 작동확인

 

풀죽음 작동 확인

물기에 풀이 죽어 공격을 할 수 없는 모부기의 모습을 확인 가능하다.

랭크변화 작동 확인

들이받기를 사용한 후 방어와 특수방어가 떨어지는 토대부기의 모습이다.

반동 데미지 작동 확인

인파이트를 사용한 후 방어와 특수방어가 떨어지는 초염몽,

그리고 우드해머를 사용한 후 가한 데미지의 1/3에 상응하는 반동 데미지를 받는 토대부기의 모습을 확인할 수 있다.

 

이번에 구현하고자 한 동작들은 모두 구현할 수 있었다.

 

 

 

5. 향후 계획

가장 급한 것은 아무래도 상태이상 표시로 보인다. 다음 시간에는 상태이상 표시 UI를 제작하고, 상태이상에 의한 동작을 구현해보도록 하자. 가방의 회복 아이템도 이번에 구현하기로 했는데 안했으므로, 시간을 보고 가능하다면 추가해보도록 하자. 또한, 상대의 특성에 의하여 아군 공격 후에 발생하는 다양한 효과들에 대해서도 적용해보도록 하겠다.