
1. 기본 컨셉: 레벨업하는 소환사
- 기반: 그냥 몹이 아니라, '레벨'과 '경험치'라는 개념을 가진 커스텀 주민을 기반으로 함.
- 경험치 획득: 소환사가 직접 때리는 게 아니라, 자기가 소환한 소환수들이 적에게 데미지를 입힐 때마다 그 데미지만큼 경험치를 얻는 구조임. 소환수는 주인을 위해 싸우고, 주인은 그 덕에 성장하는 선순환 구조.
- 레벨업 보상: 레벨업을 하면 소환사 자신의 최대 체력이 5씩 증가함. 그리고 더 중요하게는, 소환할 수 있는 소환수의 종류와 수가 늘어남.
2. 소환수: 눈사람과 철골렘
- 눈사람 골렘: 원거리 딜러. 기본적으로 항상 소환되어 있으며, 레벨이 오르면 수가 늘어남.
- 철골렘: 근접 탱커. 특정 레벨에 도달해야만 소환할 수 있는 강력한 유닛.
3. 핵심 로직 1: 소환 메커니즘
문제점: 처음엔 어떻게 소환을 시켜야 할지 막막했음. 항상 소환수를 최대로 유지하려고 하면, 비전투 상황에서도 계속 소환하려 해서 비효율적임.
해결책: '계기(Trigger)'를 만들어주는 방식을 사용함.
- 평상시: 소환사는 아무것도 안 하고 그냥 마을을 돌아다님.
- 적 발견: 소환사가 자신의 '시야'로 적을 발견하면(NearestAttackableTargetGoal), 그 순간 "아, 싸워야겠다!" 라고 인식하며 공격 대상(Target)을 설정함.
- 소환 AI 발동: "공격 대상이 설정되었다"는 사실을 소환을 시작하는 계기로 삼음. 소환 AI(SummonerGoal)는 항상 "공격 대상이 있는가?" 와 "소환수 자리가 비었는가?"를 동시에 체크함.
- 결과: 평소엔 얌전하다가, 적을 만나면 비로소 전투 준비를 위해 소환을 시작하는 똑똑한 AI가 됨.
4. 핵심 로직 2: 죽으면 리스폰 (30초 쿨타임)
문제점: 소환수가 죽자마자 바로 다시 뽑으면 너무 사기임. 밸런스를 위해 죽고 나서 일정 시간이 지나야 다시 소환되게 만들어야 함.
해결책: '글로벌 리스폰 쿨타임' 개념을 도입함.
- 사망 감지: 소환사 주민은 1초마다 자기 소환수들의 명단(UUID 리스트)을 확인해서, 죽거나 사라진 녀석이 있는지 체크함.
- 쿨타임 시작: 소환수가 한 마리라도 죽은 것이 감지되면, 그 즉시 "전체 리스폰 쿨타임" 30초(600틱)를 작동시킴.
- 소환 AI 차단: 소환 AI(SummonerGoal)는 소환수가 부족하더라도, 이 30초짜리 쿨타임이 돌아가는 동안에는 절대로 발동하지 않음.
- 쿨타임 초기화 안 됨: 쿨타임이 15초 남았을 때 다른 소환수가 또 죽어도, 쿨타임이 다시 30초로 초기화되지 않음. 그냥 남은 15초가 마저 흘러감.
- 연속 소환: 30초가 지나면 소환 AI가 다시 활성화되고, 부족한 소환수들을 1초에 한 마리씩 순차적으로 모두 채워 넣을 때까지 계속 실행됨.
5. 핵심 로직 3: 레벨별 소환수 분배
요구사항이 좀 까다로웠음.
- 눈사람: 기본 1마리. 이후 10, 20, 30... 레벨마다 1마리씩 추가.
- 철골렘: 5레벨에 첫 등장. 이후 15, 25, 35... 레벨마다 1마리씩 추가.
해결책: 소환수가 몇 마리 필요한지 계산하는 공식을 명확하게 만듦.
- 눈사람 최대치 계산: 1 + (현재 레벨 / 10)
- 철골렘 최대치 계산: (현재 레벨 + 5) / 10
- 적용: 소환 AI가 실행될 때마다 이 계산식을 통해 현재 레벨에 맞는 최대 소환수량을 파악하고, 그보다 적으면 소환을 시도함.
6. 버그 수정 일지
- 눈사람이 공격 안 하던 문제: 눈사람의 공격 대상 AI가 잘못 설정되어 있었음. "주민 팀이 아닌 모든 적"을 공격하도록 명확하게 수정해서 해결.
- 눈사람 공격 데미지 0 문제: 바닐라 눈덩이는 원래 데미지가 없음. 눈사람이 쏜 눈덩이가 적에게 맞는 순간을 감지하는 이벤트 핸들러를 따로 만들어서, 여기서 직접 데미지를 주는 코드를 추가하여 해결.
- 소환사가 너무 빨리 도망가던 문제: 부모 클래스로부터 물려받은 도망 AI(PanicGoal)의 속도가 너무 높게 설정되어 있었음. registerGoals를 직접 덮어쓴 다음, 속도가 1.0으로 고정된 새로운 PanicGoal을 추가해서 해결.
'모딩 > 마인크래프트 모드 개발 일지' 카테고리의 다른 글
| [마인크래프트 모딩]#19 '궁수 타워' 만들기 (15) | 2025.07.04 |
|---|---|
| [마인크래프트 모딩]#18 오늘 산재해있던, 문제들에 대해서 (8) | 2025.07.02 |
| [마인크래프트 모딩]#16 나만의 RPG 파티 만들기! (마법사 주민 편) (12) | 2025.07.01 |
| [마인크래프트 모딩]#15 상속이용및 기타 자잘한것들 수정 (15) | 2025.07.01 |
| [마인크래프트 모딩]#14 주변 아군에게 광역 버프를 주는 '좀비 지휘관' (9) | 2025.06.29 |