내일배움캠프 40

[내일배움캠프] 데이터 기반 스킬 시스템 설계 / FSM 구현 회고

📌 오늘 한 일ScriptableObject 기반 스킬 데이터 정의: SkillBase를 추상화한 SkillData로 ID, 이름, 타입, 티어, 데미지, 쿨다운 등 모든 정적 데이터를 SO에 저장하도록 구현 (https://05cm.tistory.com/50)런타임 상태 관리(FSM) 추가: SkillStatus 클래스에서 Locked->Available -> OnCooldown -> ReadyCooldown으로 전이하는 상태 머신과 OnStateChanged·OnLevelChanged 이벤트를 구현 스킬 콜렉션 컴포넌트: CharacterSkill에 스킬 리스트 초기화(Init), 턴별 쿨다운 감소, 스킬 사용 시도, 즉시 리셋 기능을 구현 플레이어 스킬 컨트롤러: PlayerSkillControl..

Unity 2025.07.10

[내일배움캠프] 스킬 시스템 데이터, 런타임 로직

플레이어와 몬스터 모두 공통으로 사용하는 스킬 시스템 등의 작업을 완료했다.데이터 -> 상태관리-> 컨트롤러 까지 모두 연결을 완료해놓아서 배틀 담당자가 턴제 로직을 이어서 작업할 수 있는 상태다.내일은 UI로직을 구현해보며 테스트를 진행할 예정이다. ✅ 오늘 완성한 스크립트enumESkillState, ESkillType, ETier상태, 속성, 티어 정의interfaceISkillInfo데이터들 공통 부분 인터페이스화ScriptableObjectSkillData, MonsterSkillData스킬 데이터를 파티원과 몬스터로 분리RuntimeSkillStatus상태 머신: 레벨, 쿨타임, 이벤트 PlayerSkillControllerSO -> SkillStatus마나, 데미지 계산쿨타임 처리 등 완성..

Unity 2025.07.08

[내일배움캠프] 스킬 2차 전면 리빌드..! 이제는 진짜..스킬 시스템 FSM 구현

SkillState 열거형- 스킬의 상태(잠금, 사용가능, 쿨타임 준비중 등.)를 Enum으로 구분함- 상태 전환을 한눈에 파악할 수 있어 디버깅과 유지보수에 도움 SkillData : ScriptableObject- 에디터에서 아이콘, ID, 이름, 속성 타입, 티어, 기본 데미지·쿨타임·범위 등 정적 데이터를 설정- UnlockNext 리스트로 해금 관련 로직 구상중 SkillStatus 클래스- 상태와 남은 쿨타임 시간 등을 프로퍼티로 관리- Unlock(), Use() 등의 메서드로 상태 전이 로직 구현- OnStateChanged 이벤트를 통해 상태가 바뀔 때마다 UI 또는 다른 로직에 알림 FSM 패턴을 적용하면 스킬 상태 전이를 명확히 분리할 수 있어, 쿨타임이 0이 되었는데 사용 가능 상..

카테고리 없음 2025.07.07

[내일배움캠프] 기능 명세서, 마일 스톤 및 설계 결정

1. 기능 명세서 작성핵심 기능스킬 트리, 스킬 해금/장착, 스킬 상태 관리 세부 기능플레이어: 레벨업에 따른 스킬 포인트 투자, 전투 UI에서 장착/해제펫/NPC: 친밀도·레벨별 자동 해금, 전용 스킬 순서 관리몬스터: 고정 스킬 데이터(해금 없음)결과물: 위 구조를 표 형태로 정리하여, 각 객체가 가져야 할 데이터와 동작을 명확히 정의 2. 마일스톤 계획단계주요 작업기한기능 명세서 확정 & ERD 작성7/4 (완료)ScriptableObject 클래스 설계 및 구현7/7런타임 상태 관리 시스템(Controller) 구현7/8UI(스킬트리/스킬창) 연동 및 테스트7/9밸런스 튜닝 & 버그 수정7/10 ~ 11 3. 스킬 설계 결정ScriptableObject(SO) vs 상태 분리SO: ID, 이..

Unity 2025.07.04

[내일배움캠프] Unity 스킬 트리 1차 프로토타입

📌 오늘 한 일스킬 데이터: SO 작성, 타입/ 티어 정의열거형: enum으로 타입과 티어 분류라이브러리: 모든 스킬을 조회할 라이브러리 싱글톤 (전역)플레이어 컨트롤러: 포인트, 해금, 레벨업 로직 초안 (비용/확률 등 공식 포함)이펙트: 해금 파티클 해보고싶은데, 이건 좀 더 나중에 자세히 구현해볼예정! 📌 어제 설계 대비 달라진 점 1. 데이터 기반 구조를 현실화설계 단계에서 생각했던 SO 구조를 실제 코드로 옮겨, 인스펙터에서 수치만 조정하면 되도록 했다. 2. 플레이어 쪽 로직 분리스킬 포인트와 해금 상태를 전담하는 PlayerSkillController 를 별도 컴포넌트로 빼서 UI랑 전투 시스템과의 연결도 느슨하게 해보려고 했다.특정 레벨 이상은 성공 확률이 점진적으로 감소하도록 함..

Unity 2025.07.02

[내일배움캠프] 스킬 트리 구상해보기.. 클래스 설계에 대한 고민

📌 오늘 한 일UI/UX 전담 역할로서 스킬트리 화면의 전반적 흐름과 구조를 고민스킬 데이터 모델 구조 설계 시나리오 작성. 타입(화염, 얼음, 자연, 물리) 별 분류와 단계(초급, 중급, 상급) 구분 정의UI 상에서 스킬트리를 중앙 → 바깥으로 확장되는 형태로 배치스킬 해금 흐름(포인트 사용 → 해금 → 다음 단계 해금 가능) 설계 구상 📌 고민한 내용스킬 데이터를 어떻게 저장하고 관리할지(ScriptableObject 모델 설계)플레이어 스킬 포인트, 해금 상태를 어디서 관리할지(PlayerSkillController 등)UI 상에서 스킬 노드 배치를 어떻게 구현할지(원형 레이아웃, 연결선, 락/언락 상태)상세 설명, 포인트 소모량, 해금 가능 여부 등을 어떻게 표현할지유지보수성 높은 코드 구..

Unity 2025.07.01

[내일배움캠프] Unity 에디터 스크립트 - 아이템 일괄 추가 버튼 만들기

오늘은 Unity의 커스텀 에디터 창에서 원래는 하나씩만 추가하던 아이템을 버튼 한 번으로 전부 추가하도록 스크립트를 수정해봤습니다.기존 기능에디터 창에서 아이템 드롭다운 목록 중 하나를 선택“Add Item” 버튼을 누르면 그 하나만 인벤토리에 추가 var names = _items.Select(x => x.ItemName).ToArray(); _selectedIndex = EditorGUILayout.Popup("테스트 아이템", _selectedIndex, names); var selectedItem = _items[_selectedIndex]; _inventory.AddItem(selectedItem, 1); 문제점한 번에 하나씩만 추가 가능해서, 테스트할 때 여러 아이템을 넣으려면 너무 번거로움..

Unity 2025.06.30

[내일배움캠프] C# 튜플(Tuple) 개념 정리 / Inventory 예제

✅ 튜플이란?튜플(Tuple)은 여러 개의 값을 하나의 묶음으로 반환하거나 전달할 수 있게 해주는 자료형입니다.(string, int) example = ("이름", 10);이렇게 하면 "이름"과 10을 하나의 데이터처럼 사용할 수 있어요.C# 7.0 이상부터는 이름 붙이기도 가능해서 가독성이 좋아집니다.(string name, int level) player = ("오센치", 10);Console.WriteLine(player.name); // 오센치🧪 Unity에서 직접 사용한 예제: Inventory 클래스public IEnumerable Items => items.Select(pair => (pair.Key, pair.Value));items는 Dictionary입니다.Select에서 각 ..

C# 문법 2025.06.09

[내일배움캠프] 유니티에서 CSV 파일 활용방법 / 데이터 관리 / ScriptableObject와의 차이점

전부터 코드짜면서 늘 "아.. 이거 엑셀로 그냥 목록 적어서 못갖다 놓나..?"라는 생각을 했었다.근데 진짜 그 방식이 있다고 들었었다.그래서 빨리 그 방식을 배워서 써보고 싶었다.일단 충분히 이해를 먼저 하고 차근차근 사용해보려고한다. 엑셀파일은 CSV로 저장하여 불러오는 것인데,유니티에서 CSV파일을 활용하는 것은 데이터 관리를 효율적으로 할 수 있는 방법이라고 한다.또한 아이템, 능력치, 스테이지 등 반복적으로 다뤄야하는 정보를 하드코딩 하지 않고 관리할 수 있다. 그런데 아직 직접 해본 적이 없어서 어려웠고, 튜터님께 여쭤보았다. 그런데 그렇게 어려운 것도 아니고, 별고 없다고 하셨다.코드도 생각보다 간단해서 차근차근 해보려고한다. 📁 Unity : 엑셀 CSV파일 불러오기 1. CSV: C..

Unity 2025.06.04

[내일배움캠프] Rigidbody와 Constraints

🧠 Rigidbody란?Rigidbody는 Unity에서 물리 효과를 적용하고 싶을 때 사용하는 컴포넌트입니다.이를 통해 중력의 영향, 충돌 반응, 물리적 힘 등을 게임 오브젝트에 적용할 수 있습니다.예를 들어, 박스를 실제로 밀거나 떨어뜨리게 하려면 Rigidbody가 필요합니다. 🔒 Rigidbody Constraints란?Constraints는 Rigidbody에 물리적으로 움직일 수 있는 방향(축)을 제한하는 기능입니다.예를 들어, 회전은 막고 싶고 이동만 가능하게 하고 싶을 때 사용됩니다._rigidbody.constraints = RigidbodyConstraints.FreezeRotation;위 코드는 회전을 막고 이동만 가능하게 설정하는 예시입니다. 📌 예시: RotCube..

Unity 2025.05.28