전체 글 177

2026.04.09 카이얀 제작 일지(3) - GameStartScene UI 세팅 지

Unity 게임 시작 UI 설계 정리1. 직접 구현하고 적용한 내용UI 구조 설계항목내용UI 관리자GameStartSceneMainUI에서 전체 UI 흐름 제어버튼 구조Start / Config / Exit 각각 별도 스크립트로 분리패널 구조MainMenu / StartPanel / SettingsPanel 분리처리 방식버튼 → MainUI 호출 → UI 전환UI 동작 흐름단계동작결과1게임 실행MainMenuPanel 활성화2Game Start 클릭StartPanel 표시3Config 클릭SettingsPanel 표시4Exit 클릭게임 종료5Back 클릭MainMenuPanel로 복귀UI 설계 방식개념적용 내용역할 분리버튼 / UI / 기능을 각각 분리중앙 제어UI 전환은 MainUI에서만 처리단방향 흐..

2026.04.05 카이얀 제작 일지(2) - 캐릭터 선택 UI 세팅

Unity UI 참조 유지 및 구조 설계 정리1. 씬 이동 시 연결된 값이 사라지는 문제구분내용문제 상황씬을 이동하거나 다시 로드하면 Inspector에 연결한 값이 사라짐원인Inspector 참조는 “씬 오브젝트 인스턴스” 기준이라 재생성 시 끊어짐해결 방법코드에서 자동으로 참조를 가져오도록 변경예시 코드Awake()에서 GetComponentsInChildren 사용결과씬이 바뀌어도 자동으로 참조가 다시 연결됨2. Inspector 수동 연결 방식의 한계구분내용문제 상황UI 요소가 많아질수록 연결 관리가 어려움원인사람이 직접 연결하는 구조 (휴먼 에러 발생)해결 방법구조 기반 자동 연결 방식 사용예시transform.child 기준으로 배열 구성결과유지보수 쉬워지고 연결 누락 방지3. 코드 기반 자동..

2026.04.02 카이얀 제작 일지(1) - 기초 설정 및 트러블 슈팅

1. 기초 설정한달 반 이상의 시간을 들여 게임의 주축이 될 기본 스토리들 구상을 마쳤다.(카이얀의 진실, 종현 당시 생겼던 일들 등) 또한 게임 진행 시점에서는 이미 대부분 사망해있을 종현전 시점 캐릭터들의 구상을 마쳤다, 게임의 진행에 있어 중요한 역할을 할 것이다. ========================================================================================= 2. 트러블 슈팅Unity UI 해상도 대응 정리1. UI 크기가 해상도에 따라 이상해지는 문제구분내용문제 상황1920x1080에서는 정상인데, 다른 해상도에서 UI 크기가 비정상적으로 변함원인UI가 픽셀 기준으로 고정되어 있고, 해상도에 따른 스케일 적용이 안됨해결 방법Can..

2025.08.13 TIL

1. 오늘 학습 키워드 Unity 게임 시간 관리씬 전환 후 데이터 유지플레이타임 저장/로드실시간 경과 시간 계산 로직 2. 오늘 학습한 내용을 나만의 언어로 정리 게임에서 플레이타임은 단순히 Time.time을 쓰면 씬 로드 시 초기화되기 때문에, 별도의 realPlaytime 변수를 두어 전체 누적 시간을 저장해야 한다.씬 전환 시 현재까지의 경과 시간을 저장하고, 새 씬에서 시작 시간 기준을 다시 설정하면 실제 경과 시간과 누적 시간을 정확히 유지할 수 있다.한 번 이상 로드할 때 플레이타임이 불필요하게 증가하는 이유는, 저장된 값과 새로 더해지는 값이 중복 계산되기 때문이었다. 이를 방지하려면 저장된 값을 기준으로 계산하도록 로직을 수정해야 한다.3. 학습하며 겪었던 것 씬 전환 후 타이머..

TIL 2025.08.13

2025.08.12 TIL

1. 오늘 학습 키워드 Unity MonsterDatabase 활용 방식Monster ID 중복 처리SetMonster 로직 수정LoadPlayerData 개선 여부배틀/벤치 몬스터 UI 크기 조절아이템 사용 시 회복 동작 제어 (SelectItemUseState)프로젝트 성과 표 정리 2. 오늘 학습한 내용을 나만의 언어로 정리오늘은 몬스터 데이터 관리와 UI 로직에 대해 깊이 다뤘다.같은 몬스터가 여러 개 필드에 존재할 경우 단순히 monsterNumber로 구분이 어렵다는 걸 확인했고, 이를 해결하려면 개별 인스턴스를 추적해야 한다.또한, 배틀과 벤치 몬스터의 이미지 크기를 다르게 처리하는 방법과, 아이템 사용 중에는 회복 동작이 겹치지 않도록 코루틴 제어 로직을 넣는 방법을 정리했다.마지막으로, ..

TIL 2025.08.12

2025.08.07 TIL

1. 오늘 학습 키워드 Unity 애니메이션과 오브젝트 삭제 (Destroy)애니메이션 재생 후 오브젝트 삭제 코루틴충돌 판정 (Collider 민감도)버튼 클릭 후 일시 비활성화 (Button.interactable)팀 단위 데이터 처리 (예: BattleEnemyTeam)디버그 출력 (적 팀의 이름 리스트 출력)사운드 공유 플랫폼 (SoundCloud 사용 가능 여부)2. 오늘 학습한 내용을 나만의 언어로 정리 애니메이션 끝나고 오브젝트 제거: Animator의 상태 길이를 가져와 WaitForSeconds로 애니메이션이 끝난 뒤 Destroy되도록 구현했다.버튼 연타 방지: 버튼 클릭 시 interactable = false로 비활성화하고, 일정 시간이 지난 후 다시 활성화하는 방법을 배웠다.충돌 ..

TIL 2025.08.07

2025.08.06 TIL

1. 오늘 학습 키워드 Unity Raycast레이 방향 감지 (RayDirection)이벤트 반복 여부 (canRepeat)대화 트리거 시스템고유 ID 저장 및 로드 (DialogueSaveSystem)2. 오늘 학습한 내용을 나만의 언어로 정리 NPC가 특정 방향으로 레이를 쏴서, 플레이어가 감지되면 대화가 시작되는 구조를 만들었다.Raycast2D로 플레이어를 감지하며, 대화는 한 번만 실행되거나 반복되도록 canRepeat로 조절할 수 있다.Start()에서 고유 ID로 이전 대화 실행 여부를 불러오고, 대화가 끝나면 플레이어 입력을 다시 활성화하는 로직을 구현했다.플레이어가 상하 방향으로 움직일 때 Ray가 잘 감지되지 않는 문제를 경험하며, Collider 및 Raycast 방향 체크의 중요성..

TIL 2025.08.06

2025.08.05 TIL

1. 오늘 학습 키워드 Unity 퀘스트 UI 시스템QuestData 직렬화 구조QuestUI와 QuestSlotUI 연동SerializableDictionaryNullReferenceException 해결2. 오늘 학습한 내용을 나만의 언어로 정리 QuestData 클래스에 퀘스트 이름, 간단 설명, 상세 설명, 상태, 선행 퀘스트 등을 포함하도록 설계함.QuestSlotUI.Setup() 함수는 전달받은 QuestData를 바탕으로 슬롯 UI를 구성하고, 관련 UI 요소에 데이터를 세팅함.퀘스트 상태(QuestStatus)는 Text가 아닌 enum으로 정의되어, 직렬화 및 상태 처리에 유리함.퀘스트 UI 클릭 시 상세 정보가 상단 패널에 반영되도록 구현.NullReferenceException 오류..

TIL 2025.08.06

2025.08.04 TIL

1. 오늘 학습 키워드 Unity 직렬화와 커스텀 딕셔너리 (SerializableDictionary)Unity 커스텀 에디터 (CustomEditor, 조건부 필드 표시)Unity InputSystem과 ButtonControl 활용화면 페이드 효과 구현 (FadeManager, Coroutine)게임 오브젝트 및 스프라이트 관리씬 간 데이터 전달 및 객체 삭제2. 오늘 학습한 내용을 나만의 언어로 정리 오늘은 Unity에서 기본적으로 지원하지 않는 Dictionary를 직렬화하기 위해 SerializableDictionary를 직접 구현했고, 그 과정에서 Unity 직렬화 콜백 인터페이스를 활용해 리스트로 데이터를 저장하고 불러오는 방식을 익혔어.그리고 커스텀 에디터를 만들어 bool 값에 따라 인스..

TIL 2025.08.04

2025.08.01

1. 오늘 학습 키워드 Unity UI 기본 상태 초기화닉네임 유효성 검사공백 및 특수문자 처리StartsWith() 활용Replace() 문자열 공백 제거2. 오늘 학습한 내용을 나만의 언어로 정리 UI 팝업을 다시 열었을 때 탭의 기본 선택 상태를 지정할 수 있다 (예: "Consumable" 탭이 가장 먼저 보이게).닉네임 입력에서 유저가 스페이스바만 누르거나, 앞에 공백을 두는 등의 문제를 string.Replace()나 string.StartsWith() 등을 활용해서 막을 수 있다.조건문을 여러 개 중첩하여 순차적으로 유효성 검사를 진행하는 구조를 만들 수 있다.3. 학습하며 겪었던 것스페이스바만 눌렀을 때도 Length > 0이 통과되는 문제를 발견했고, Replace(" ", "")로 해결..

TIL 2025.08.01