학습 동기
룬 시스템과 스킬 시스템을 각각 별도로 작업한 두 팀원이 서로 다른 구조의 ScriptableObject를 정의하면서, 동일한 데이터가 두 번 생성되고 중복 관리되는 상황이 발생했다. 이로 인해 인벤토리 시스템과 스킬 실행 로직 간의 통합이 어려워졌고, 이를 구조적으로 정리하고 통합할 필요성이 생겼다.
학습 내용
- ItemData 기반의 인벤토리용 데이터와 Skill, Rune 기반의 실행 로직 ScriptableObject 간의 역할을 분리하면서도 유기적으로 연결하는 구조를 설계했다.
- RuneData, SkillBookData는 ItemData를 상속받으며, 내부에 Rune, Skill 참조를 포함시켜 기능 실행과 UI 표현을 구분할 수 있도록 했다.
- 스킬의 실제 실행은 Skill.Use()로, 룬 적용은 Rune.Apply(Skill) 방식으로 진행되며, 게임 로직과 인벤토리의 결합도가 낮아졌다.
활용
- 인벤토리 UI에서 ItemData 배열만으로 모든 스킬북 및 룬 아이템을 관리하고, 실제 스킬 발동은 ((ISkillItem)item).Skill.Use() 방식으로 실행 가능
- 룬 조합 또는 적용 UI에서는 ((IRuneItem)item).Rune.Apply(skill) 형태로 룬 기능을 스킬에 추가할 수 있어 유저가 커스터마이징하는 형태의 스킬 빌딩이 가능해짐
- 추후 유물, 장비 등 확장 아이템 시스템에서도 ItemData를 공통 기반으로 확장해 동일한 방식으로 기능 참조 및 실행 가능
주의점
- Skill과 Rune은 ScriptableObject지만, 내부에서 GameObject 풀링과 컴포넌트 접근(GetComponent<SkillAction>())을 하므로 반드시 ObjectPoolManager 및 컴포넌트 타입이 정확히 일치해야 한다.
- Skill 내에 포함된 Action 델리게이트(setStart, setMiddle, etc.)는 이전 설정을 덮어쓰기 때문에 ApplyRunes() 호출 시 기존 델리게이트가 초기화되는 점을 유의해야 함
- SkillBookData, RuneData가 각각 참조하는 Skill, Rune의 존재 유효성을 검사하는 로직이 없다면, 인벤토리에서 Null 참조 예외가 발생할 수 있으므로 방어 코드가 필요함
'Unity > Unity 개발' 카테고리의 다른 글
| Rule Tile (0) | 2025.07.02 |
|---|---|
| Unity 공통 alert, confirm 매니저 제작 (1) | 2025.07.01 |
| Photon PUN2의 로비 및 룸 구조 이해 (0) | 2025.06.13 |
| Unity 클라이언트와 서버 연동 전략 (0) | 2025.06.12 |
| MySQL 기반 인벤토리/계정 시스템 설계 (1) | 2025.06.12 |