분류 전체보기 50

[내일배움캠프] 이번 프로젝트에 사용한 _ 유니티 C# 이벤트 시스템 총정리

🛠️ 1. 델리게이트(Delegate) & Action 다시 이해하기델리게이트는 마치 ‘메서드를 담을 수 있는 상자’라고 생각하면 쉽다. 어떤 형식(반환값과 매개변수)이 지정된 메서드만 이 상자에 넣을 수 있다. 반면 Action은 void형 반환값을 갖는 델리게이트를 미리 정의해둔 친구다. 구분설명예시델리게이트타입 안전한 함수 포인터. 특정 반환형과 파라미터를 갖는 메서드를 저장public delegate void MyDelegate(int x);Actionvoid 반환형의 기본 델리게이트. 파라미터 개수 자유 (Action, Action 등)public event Action OnChanged;// PlayerInventory.cs 예시public event Action OnInventoryChan..

Unity 2025.07.11

[내일배움캠프] 데이터 기반 스킬 시스템 설계 / 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

[내일배움캠프] SO에 정적 데이터만 두는 이유

1. SO에 정적 데이터만 두는 이유메모리 안정성SO는 에셋으로 로드되어 메모리에 한 번만 상주합니다.런타임에서 필드가 바뀌면, 같은 SO를 참조하는 모든 객체가 동시에 값이 바뀌어 예상치 못한 공유 상태가 생깁니다.에디터 직렬화 규칙Unity는 Play → Stop 시점에 씬·에셋 스냅샷을 저장/복원합니다.SO 필드가 런타임에 변하면, 복원 단계에서 "원본 값"과 "변경 값"이 충돌해 직렬화 오류가 발생할 수 있습니다.디터미니즘 & 네트워크 동기화멀티플레이에서는 서버·클라이언트가 SO의 해시(내용 기반 지문)를 비교해 동일 에셋인지 판정합니다.값이 바뀌면 해시도 바뀌어 데이터 desync가 발생합니다.테스팅 편의성가변 값이 SO에 없으면, 씬 리셋·재시작 때마다 초기 상태가 보장되어 QA가 버그를 재현..

Unity 2025.07.09

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

플레이어와 몬스터 모두 공통으로 사용하는 스킬 시스템 등의 작업을 완료했다.데이터 -> 상태관리-> 컨트롤러 까지 모두 연결을 완료해놓아서 배틀 담당자가 턴제 로직을 이어서 작업할 수 있는 상태다.내일은 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

[내일배움캠프] 스킬 트리 전면 리빌드

📌 오늘 한 일데이터 리셋: 기존 스킬 로직 전부 삭제 -> SO 데이터 재 생성전투를 위한 필드도 SO에 병합함구조 테스트: 루트에서 뻗어나가는 등급별 노드를 런타임에 계산하게 하여 생성하는 식을 해봄.UI 기본 연결 및 튜터님 피드백 받기 📌 어제 설계 대비 달라진 점 1. 정적 + 동적 하이브리드 구조 채택 완전 데이터 기반 -> 초급만 수작업 + 나머지는 코드 생성 으로 방향 확정. 2. UI 한계 확인원형 레이아웃 컴포넌트 대신 각도 - 벡터 수식으로 직접 배치하는 편이 제어가 쉬움.3. 스킬 관계 표현 방법 변경NextNodes 배열을 직접 Drag & Drop -> 동적 생성 시 List 자동 채우기로 수정 예정. 📌 오늘 새로 배운 점 / 느낀 점 백지에서 다시 그리기는게 때..

Unity 2025.07.03

[내일배움캠프] 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