전투 게임 2일차

2024. 1. 14. 17:46GAME/Unity

일단, 전에 생각했던 수정사항중 하나를 적용해보자면 
 
알고리즘과 행동에 대한 분리가 필요하다고 생각하였다.
 
AI는 단순히 조건에 따라서 상태를 전이하는 역할만 한다. 
일정한 거리에 적이 들어오면 공격 상태로 전이하고, HP가 얼마 남지 않았으면 뒤로 후퇴하고.. 상황에 따라서 다른 알고리즘을 가질수도 있겠지만, 같은 알고리즘을 가질수도 있다. 하지만 여기서 상태전이와 행동(공격,데미지) 등을 같이 처리하게 된다면, 하나의 캐릭터에만 스크립트가 의존하게 됨으로서 또다른 스크립트를 만들어야지 적용할 수 있다.
 
예를 들어 생각하자면 나는 클래시오브클랜의 바바리안과 바바리안 킹이 있다고 생각하였다. 바바리안과 바바리안 킹은 알고리즘이 아마 비슷하거나 똑같을것이다.  (바바리안 킹이 스킬만 추가될 뿐.) 일단 똑같다고 가정하고 이렇게 두 캐릭터가 존재할때, 상태머신과 행동의 정의를 분리한다면, 바바리안과 바바리안 킹은 동일한 상태머신을 가지고 다른 행동의 정의를 가지게 됨으로서 앞서 말한 상황보다 효율적으로 개발을 진행할 수 있을것이다! 무튼 이게 내 생각이고 만들어보자.
 

우선, 캐릭터의 행동에 대한 추상화를 진행한다.
 
그리고 인터페이스를 상속받은 실체 클래스를 구현한다.

이렇게 기사만의 행동을 정의해둔다. 
 
그리고 기사의 상태머신을 따로 컴포넌트로 만든다.
 

기사 AI는 기사 컴포넌트에 대한 참조를 하지 않고, Chracter라는 추상화된 존재를 가져온다.
 

그리고 이런 알고리즘에 따라서 '기사' 가 아닌 캐릭터의 상태를 전이한다.
 
자 그러면 일단 기사가 완성이 되었고 똑같은 AI를 지닌 기사 왕을 이제 개발한다고 치면 
 
만들어진 AI는 냅두고 기사 왕에 대한 정의만 해주면 된다는것!
 
자 일단 다시 설계된것에 기사를 적용하면..
 

 
대충 이렇게 만들고, 
 

여기서 Damaged State도 있는데 왜 있어야 하냐면 Move중에 맞았으면 움직이지 말아야하는데 State가 없으면 계속 움직이기 때문에 변경해주어야 한다.
 

Weapon이라는 클래스도 만들었는데, 무기에 맞은 캐릭터에게 데미지를 주는 모습이다.

자 전과 똑같이 실행되지만 설계적으로 조금 발전하였다.
 
이제 Knight King를 만들어보자.
 
자 King은 확률에 따라서 스킬을 발동시킬수 있고 데미지 액션도 없다.

이렇게만 수정하고 AI는 동일한것을 넣어두면??
 

 
 

 

이런식으로 새로운 캐릭터는 일정 확률에 따라서 스킬을 사용하는 모습이다!
 
자 이제 조금 틀이 잡혔으나 한번 더 수정을 해야할듯하다... 공격속도 적용도 해야하고, 상대와 나의 구분 등.. 일단 여기까지

'GAME > Unity' 카테고리의 다른 글

InputManager  (0) 2024.01.15
전투 게임 1일차  (0) 2024.01.09
작곡 프로그램 개발 일지 26  (0) 2023.11.28