Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- Camera Zoom
- --watch
- spread 연산자
- Camera Movement
- Packet Network
- Unity IAP
- css framework
- Spring Boot
- express
- react
- Google Developer API
- Unity Editor
- MySQL
- Digital Ocean
- OverTheWire
- springboot
- critical rendering path
- rpg server
- nodejs
- linux
- SDK upgrade
- draganddrop
- docker
- unity
- java
- mongoDB
- screencapture
- Google Refund
- server
- Git
Archives
- Today
- Total
우당탕탕 개발일지
전투시스템 설계 - StatManager 로 다양한 효과 전투에 적용하기 본문
RPG에서는 다양한 성장시스템을 통해 캐릭터를 강화한다. 이러한 효과들을 한데모아 관리하고, 실제 전투에 적용해야한다.
IStatManager
다양한 성장시스템을 통해 얻은 강화효과들을 한데 모아 관리하고, 전체 능력치 정보를 받아볼 수 있는 전체 매니저이다.
효과는 총 3가지이다.
- FlatStatEffect : 단순한 스탯증가 효과이다. 아무런 조건이 없고, 전투와 상관없는 스탯증가이다.
- PersistentEffect : 전투중 효과. 조건이붙거나(a타입 무기 장착 시 공격력증가). 공격데미지 계산시, 이 이펙트먼저 적용된다.
- OneTimeEffect : 두번 더 때린다와 같이, 한번만 적용되어야하는 효과이다.
효과를 적용할땐 StatModifier에 담아서 효과를 넣어준다.
StatModifier
어떤 강화내용인지를 저장한다.
- IStatCondition : abstract class. 활성화될 수 있는지 조건을 체크한다. 타입별로 상속받아 구현한다.
- IStatEffect : abstract class 어떤 효과인지, 효과를 적용하는 부분이다. 타입별로 상속받아 구현한다.
전투에 사용할때, StatManager.DoAttack(BattleContext context) 를 수행하여 강화된 데미지를 전달받는다.
조건을 탐색하거나, 실제 효과를 적용하기 위해서는 많은 정보들이 필요한데, 이 필요한 정보들을 BattleContext에 한데모아 인자로 전달한다.
BattleContext
필요한 정보에 따라 내용이 달라질 수 있지만, 대표적으로 공격자, 공격을 받는자, 게임모드 등의 정보가 있다. battleContext는 공격마다 필요하므로, 매번 생성할 경우 GC 비율이 높아진다. 이를 방지하기 위해서 BattleConextPool을 이용해 재사용하도록 한다. 물론 굉장한 관리가 필요할 듯 하다.
AttackEffect
StatManager.GoAttack()을 수행하면, 타격이 몇번인지, 각 데미지가 몇인지, 그에따른 연출이 어떤지 등이 달라질 수 있다. 만약 효과가 "2번 더 타격한다" 일 경우, 총 AttackEvent는 3 개이고, 각각 N의 데미지를 준다.
'Client' 카테고리의 다른 글
[Javascript] dayjs 를 이용하여 문자열을 Date로 파싱하기 (1) | 2024.12.27 |
---|---|
[JavaScript] 얕은복사 vs 깊은복사 (0) | 2024.08.11 |
Web 기초 (0) | 2024.08.01 |
[React] react-beautiful-dnd : Drag and Drop 구현하기 (0) | 2024.05.21 |
[React] CSS Framework : TailWind CSS 사용하기 (0) | 2024.05.21 |