
이름을 정확하게 입력해 주세요설민우저는 22년도부터 게임 개발을 동아리에서 배우기 시작해서 지금까지 팀 프로젝트, 스마일게이트 윈터 데브캠프, 개인 프로젝트 등 다양하게 경험해 왔습니다. 기존에는 안일한 생각으로 이렇게 경험을 쌓고 추가적으로 코딩 테스트와 면접 준비를
<1. 홀수출력><2. 배열을 사용한 합계 및 평균 계산>입력을 받고 나면 그 이후에는 크게 어려움 없이 답을 낼 수 있으나, 제출해야 하는 평균이 정수값인지 실수값인지에 따라 세심한 확인이 필요할 것으로 보입니다.\+) 추가적인 자주 사용되는 Linq 함수

해당 문제에서 크게 확인해야할 부분은 어떻게 입력을 받아올 것이냐와, 받아온 입력에서 Ball, Strike를 추출해내는 방법입니다. 저는 Hashset을 이용해 처음에 난수 3자리를 생성할때 같이 저장해두고, Stike는 배열 순번대로 확인해 가면서, hashset의
관련 키워드 > DFS : 깊이우선 탐색 BFS : 넓이 우선 탐색 깊이 우선 탐색과 넓이 우선 탐색 둘중 어느것으로도 풀 수 있으나, 상대적으로 최단 탐색에 유리한 BFS 보다는 DFS가 모든 노드를 탐색 하는것에 있어서 유리 하기 때문에 DFS를 사용했습니다. D

기존에 작업에서 크게 바뀐것 없이 개발을 진행하는데 문제가 없었습니다. 특이할 사항이 있다면 언뜻 비슷하게 보이는 OnTrigger와 OnCollison에 대해서 입니다. 다른 프로젝트에서 개발을 진행할때에도 둘 중에 어떤 것을 써야하는지. RigidBody나 Coll

포켓몬스터 레전드아르세우스 3인칭 세미 오픈 월드 액션 RPG 포켓몬 발생과 포획 시스템지역과 위치에 따라서 생성되는 포켓몬의 종류가 달라집니다. 이 등장은 종류의 등장 수와, 재 생성까지의 시간이 지역에 따라 변경됩니다.플레이어가 해당 구역으로 인접하면 해당하는 위치
( 작성된 문서 링크 ) 링크텍스트 오늘 하루는 개인 공부 보다는 사전에 준비해온 팀 프로젝트 과제를 위주로 하루를 보내게 되었습니다. 제가 서기 및 진행자 역으로 참여하여 전날에 작업해온 개별 오목 기획 문서를 먼저 차례대로 읽어보고 이중에서 하나를 선택해 팀 프로

BFS를 통해서 가장 빠르게 단어를 원하는 단어로 한글자씩 변환해나가면서 찾는 문제였습니다.해당 문제에서 먼저 구현해야 할 함수는 단어 string 값을 서로 비교해서 1개의 문자만 차이나는지 확인하는 함수 CompareStringOne 입니다.이 함수를 구현하고 나면

정말로 오랜시간 생각하고 추가적인 팁도 찾아봤어야 했던 문제였습니다. 이 문제의 핵심 요소는 아래와 같습니다. > 1. BFS를 이용해서 borad와 table에서 조각 뜯어내기. 해당 조각은 pivot에 맞춰서 위치를 재조정하기. (0,0)을 기준으로 90도씩 회전할

자주 등장하는 BFS 문제를 풀이 할 때 사용하게 되는 Queue와 달리, Stack은 DFS 에서 쓴다고는 하지만 재귀로도 구현 할 수 있어 그렇게 까지 많이 사용해보지는 않았습니다.해당 문제는 DFS 풀이는 아니지만 자신의 뒤에 오는 가장 가까운 최대값을 찾기 위

처음에는 어떻게 최적화를 시켜 주어야 할까에 대해서 고민을 많이 했으나위와 같은 제한 사항 특성상 완전 탐색으로도 문제를 풀이 할 수 있다는 것을 확인했습니다.따라서, 아래와 같은 방식으로 문제를 풀었습니다.Dictionary 형태로 트리 구조 생성wires의 배열에서
오늘은 기존의 CS 공부와 프로그래머스 문제 풀이에서 벗어나, 전일 언급했던 오브젝트 풀링에 대해서 공부하고, 이를 직접 프로젝트에서 적용해 보았습니다.오브젝트 풀링은 게임이나 앱에서 성능을 최적화 시키기 위해 자주 사용되는 디자인 패턴입니다. 이는, 자주 생성되고 파
최초에는 접근 방법에 대해서 백트래킹이나 BFS 같은 방법을 생각했었습니다.하지만 그렇게 해서 답을 찾기에는 제한 조건이 너무나 어려워 팁을 찾아보던 와중 이분 탐색을 이용하면 빠르게 풀이 할 수 있다는 것을 알게 되었습니다.이분 탐색 : 정렬된 배열에서 원하는 값을
오늘 공부한 내용은 AI의 길찾기에 관련된 내용이었습니다. 지금 프로젝트에서 필요한 길찾기의 기능은 아래와 같았습니다. > 기본 골자 : 뱀파이어 서바이벌 이동 : 오직 플레이어를 향해서만 이동합니다 같은 동료 회피 : 적 오브젝트라면 같은 적 오브젝트와는 겹쳐지지

오브젝트 풀링을 이용해서 GC 문제를 잡았다고 생각했는데 유니티의 프로파일러를 통해서 확인해보니 중간에 GC에 의해 프레임이 치솟문 문제를 확인했습니다.위의 상황처럼 성능 테스트 중 녹빛의 GC 컬렉터에 의한 점유율이 70퍼센트를 먹을 정도로 높아지게 되었습니다.오브젝

본 캠프가 시작되고, 본격적은 프로젝트를 진행함에 앞서서 프로그래밍을 하면서 가장 기본적으로 다루어야 하는 Git 에 대한 기초 강의가 있었습니다. git과 gitHub 에 대해서 간략한 설명을 찾아보면 아래와 같습니다.Git은 소스 코드의 변경 이력을 관리하기 위한

기존 카드 뒤집기 게임에서 피버타임 때 닷지 게임을 모바일로도 조작하기 위해서는 흔히 사용하는 "가상 조이스틱" 기능이 필요하여 구현했습니다.가상 조이스택을 구현하는데 있어 추가해야할 인터페이스는 Drag, PointerUp, PointerDown 3가지로 각각은 아래

UI 는 어떻게 보면 배정 업무 중 가장 쉬워보일 수 있습니다. 단순히, UI의 컴포넌트와 함수를 연결하고 예쁘게 배치하는것이 끝일 수 있기 때문입니다. 하지만 여기서 더 나아가서 UI 자동화 작업을 진행해봄으로써 불필요한 UI 연결 시간을 단축해 보았습니다.일반적으로
프로젝트 개별 개발이 끝나고 이제 병합을 할 차례가 왔는데 역시나 문제가 발생했습니다.발생한 이슈는 크게는 아래와 같았습니다씬 수정으로 인한 충돌중복 파일로 인한 충돌잘못된 dev 브랜치 위치로 인한 충돌위의 문제들을 발견하면서 확인했던 가장 큰 문제점은 역시 main

오늘은 기다리고 기다리던(?) 미니 프로젝트 발표의 장이었습니다.짧은 기간이었지만 결과물은 문제 없이 나올 수 있어서 다행이었다는 생각이 들면서 다른 무엇보다 최종적이 회고가 필요하다는 생각이 들었습니다.개발했던 노션에도 작성하였지만, 추가적으로 TIL 를 작성하면서

내배캠에서 제공해준 C C- 마이크로 소프트에서 만든 객체 지향(OOP) 언어.강력한 형식 시스템, 가비지 컬렉션(메모리 자동 해제) 기능.NET 프레임워크에서 실행강력한 형식 시스템 : 변수나 객체의 자료형이 미리 정의되어 있어 데이터 타입에 대한 안전성과 정확성을

사전에 제시된 개인 프로젝트는 TextRpg를 구현하는 것 입니다. class 상속, enum, Json 등 평소에 잘 사용하지 않았지만 중요한 개념을 복습하고 활용하는 능력을 기르는 것에 중점을 두었습니다. GameManager의 GameLoop 에서는 위와 같이 기

도전 기능의 상점 판매하기, 저장하기 기능을 제외한 모든 기능을 제작 완료하였습니다.위와 같은 방식으로 Json에서 UI 에 해당하는 스크립트를 읽어와서 간단하게 배정 할 수 있게 함으로써, string 값들이 덕지덕지 붙어있는 것을 피할 수 있었습니다하지만 위의 방
TextRPG의 모든 도전 내용까지 구현을 완료하였고, 최종적으로 Main 브렌치에 병합을 완료하였습니다. 또한 기존의 프로젝트 구성에서 조금 변경점이 있었습니다인터페이스로 핸들러를 구현해두고 GameManager에서 Run() 작동시키면 사전에 초기화 해둔 Handl
Cforeeach는 읽기 전용이므로, 내부의 value를 직접 변경해줄 수 없습니다배열은 한번 크기가 생성되면 동적으로 할당이 불가능합니다. 이와 반대로 리스트는 동적 할당이 가능합니다.배열은 메모리가 연속되어있어 빠르고 리스트는 배열 보다는 조금 느릴 수 있습니다메서
팀 프로젝트에 앞서서 먼저 기획을 작성하고, 도전과제를 지정한 후, 역할 분담을 진행했습니다.그렇게 정리된 역할 분담은 아래와 같았습니다.작성자 : 설민우프로젝트 명 : 콘솔 기반 포켓몬 전투 게임김기찬담당자 : 김기찬필수.1 게임 시작 화면 구현필수.2 현재 사용 중
! 프로젝트 진행 중 2가지 문제 사항이 발생했습니다! 1. string -> char[,] 변환시 일부 문자 누락 문제 문제 상황 : 시도해 본 것: 알게된 것: 해결 방법:
오늘은 프로젝트 진행을 어느정도 완료 하여 모든 UI 작업을 끝낼 수 있었습니다.이제 남은것은 UI 연결(병합) 과 남아있는 포켓몬의 Front, Back Table을 만드는 것입니다.진행하면서 세부적으로 있었던 일은 아래와 같습니다.위와 같은 화면의 배경을 Threa
현재 팀프로젝트에서 개인으로 해야할 작업은 모두 끝낸 상태입니다.이제 남은 일은 UI를 모든 씬에 병합하는 과정만 남았습니다.오늘 진행했던 작업은 단순 반복 작업이 많아 따로 깊게 적을 내용은 없지만 한가지 이슈가 있었습니다.현제 커서를 세팅하는 SetCusorPos

오늘은 다른 전투, 컬렉션, 상점, 인벤토리등의 모든 기능에 UI를 연결하는 작업이었습니다.이제 위와같이 모든 부분에서 UI를 적용한 모습을 볼 수있습니다.하지만 여전히 가지 문제점이 남아있습니다.현재 스킬의 전체공격은, 그 공격의 전달을 개별 attackAction을
이번 프로젝트는 C이에 대한 주제로 포켓몬스터를 팀장으로써, 그리고 일종의 기획자로써 포켓몬스터를 주제로 선정하고 이에 대한 상세한 계획과 와이어 프레임을 미리 작성해둔 일은 잘한 일이었다고 회고합니다. 이 덕분에 어느정도는 문제없이 프로젝트에 대해서 서로가 개발할 부

29일 화요일부터 이제 유니티 입문 과정이 시작되었습니다. 유니티 입문 강의에서는 플래피버드(2D), Stack 게임(3d), 탑다운 슈팅 게임(2d) 강의를 통해 유니티의 기본적은 코드 작성 방식에 대해서 학습합니다.플래피 버드 게임을 만드는 것을 보면서 "와 이거

우선 단한가지, UI 반영을 제외한 모든 필수 과제를 구현했습니다.이제 내일부터는 남은 필수 구현을 끝내고, 도전 과제 제작을 진행할 예정입니다.또한 오늘은 트러블 슈팅이 없어, 알게된 것으로 마무리 지으려 합니다씬 이동을 구현하되, 최대한 자연스럽게 연결 될 수 있도

오늘부터는 개인프로젝트의 도전과제를 진행하게 되었습니다.그에 따라 구현을 완료한 기능은 아래와 같습니다.위와 같이 미니게임으로 들어가는 입구 옆에 현재 최고점수를 띄워주는 UI를 추가 했습니다.zep의 찌르기 처럼 상호작용을 시도하면 대화창이 뜨도록 설정했습니다.대기중
도전과제를 모두 완성하고 리드미까지 작성을 완료했습니다.스파르타 코딩클럽 10기, 유니티 입문 개인 프로젝트 스파르타 메타버스 만들기 과제작업물입니다.MainMoveimage뉴 인풋 시스템을 이용하여 입력을 받았습니다.BaseController -> PlayerCont
이번 프로젝트는 유니티 입문 프로젝트로서 zep과 비슷한 환경을 만들고 이와 미니 프로젝트를 연동하는 형식의 프로젝트 였습니다.그래도 인터페이스나 추상,가상 클래스,함수 등을 이용하여 객채 지향 구조를 지키려는 노력을 꾸준히 했습니다. 특히 모든 곳에서 종료, 및 씬
오늘은 드디어 팀 프로젝트가 시작 되는 날이었습니다. 총 3가지의 주제물불 / 쿠키런 / 궁수의 전설중 하나를 선택해서 만드는 것이 그 과제였고 회의를 통해 아래와 같이 결정되었습니다.만들 게임은 궁수의 전설과 같은 로그라이크 게임대신 아이작의 번제 처럼 방이 존재하고
이번에 자동 공격 파트를 맡게 되면서 아이템을 습득 할때 공격 특징이 바뀌고, 이것들이 조합되는 특징을 가질 수 있도록 공격 변경에 확장성을 띌 수 있도록 코드를 작성해야 했습니다.이를 위해서 Module 형식으로 공격 특성을 붙일 수 있도록 코드를 작성해보았습니다.아

프로젝트에서 제가 직접 구현 해야할 인게임 씬에서의 UI를 제작했습니다.체력바 UI를 생성했습니다.스킬 쿨타임 UI를 생성했습니다.아이템 습득시 획득 UI를 보여줍니다.\-> 객체지향을 지키면서 UI 기능을 추가하는것이 어려웠습니다.

솔직히 말해서 오늘은 애니메이션만 찍는 하루였습니다..그래도 팀 프로젝트 퀄리티를 위해 들어간 시간이 아깝지 않게 좋은 작업물들이 많이 나왔습니다.내일부터는 이제 발표 자료 준비 및 최종 빌드 제작, 병합 과정 문제 해결을 진행 할 생각입니다.아무래도 적 배치나 애니메
병합 과정에서의 시간이 오래 걸려서 새벽까지 진행하게 되었습니다.결국 최종적으로 완료했고 모바일 빌드까지 완성했습니다.모바일 빌드를 하게되면 항상 겪는 해상도 이슈가 또 발생했습니다.캔버스의 자동 스케일, 세로 - 가로 조정, 외부가 보이지 않도록 카메라에 암막 부착등
이번 팀 프로젝트는 궁수의 전설을 기반으로 더 디벨롭하여 게임을 개발하는 내용이었습니다. 저희는 과감하지만 목표를 출시해보자! 로 잡고 진행하여 좋은 결과를 얻을 수 있었습니다.공격의 성능과 특징을 모듈화 해서 통합하여 Update 하는 것으로 아이작의 번제 처럼 융합

사실 오늘 공부한 내용은 다른것도 꽤나 있었습니다. 기본적으로 디자인 패턴 강의에 나오는 팩토리나, 전략 패턴등 평소에 잘 쓰지 않는 패턴들에 대한 내용 뿐만 아니라 개인 프로젝트를 준비하며 강의 또한 절반 이상 수강 했기 때문입니다. 하지만 자잘 자잘하게 알게된 내용

개인 프로젝트를 본격적으로 시작하면서 필수 과제 전부와 도전과제 1개를 완료하였습니다.기본 이동 << 완료체력바 << 완료동적환경조사 << 완료점프대 << 완료아이템 데이터 스크립터블 << 완료아이템 사용 <

개인 프로젝트를 본격적으로 시작하면서 필수 과제 전부와 도전과제 1개를 완료하였습니다.움직이는 플랫폼 구현 (난이도 : ★★★☆☆) << 완료추가 UI (난이도 : ★★☆☆☆) 및 스테미나 달리기 << 완료다양한 아이템 구현 (난이도 : ★★★★☆
스파르타 코딩클럽 10기, 유니티 숙련 개인 프로젝트 스파르타 던전 탐험 과제작업물입니다.SoloMainhttps://drive.google.com/file/d/1aGOkOX911GhEabwecfvCFYxrNr2ctFqE/view?usp=sharingMovin
개인 프로젝트를 끝마치고, 남아 있는 시간에 언젠가는 만들고 싶었던 동굴 다이빙 게임을 어떻게 만들어 볼까 고민하던중 물에 관련된 좋은 에셋을 찾게 되었습니다. 비단 이런 프로젝트 뿐만 아니라 일반적인 물이 보여져야 하는 상황에서 아주 사용하기 좋을 것으로 보입니다.
사실 이전까지 UI 담당을 많이하긴했지만 UI는 부수적인 작업이었고, 병합이나 기획담당을 위주로 작업해왔습니다.그래서 막상 빌드를 하게되면 UI가 깨지거나 해상도 대응이 안되는 일이 잦았습니다. 이를 한번 잡기 위해서 이번에도 UI 담당자를 자진해서 맡았고 가장 중요하

트러블 슈팅UI에서 타이핑 효과를 위해newWaitforSeconds 사용근데 이제 팝업 UI를 뜨면 Timescale이 0이 되도록 해놨음위는 타임스케일에 영향을 받기 때문에 코루틴이 멈춰버림를 사용하게 되면 Timescale에 영향을 받지 않고 코루틴 이용 가능.
오늘 진행한 작업은 크게 인벤토리와 퀵 슬롯에 대한 작업이었습니다.각각을 만들고 이를 연결하여 ItemData와 연결해 직접 사용하는 것 까지 작업을 완료하였습니다.최초 인벤토리 제작시 퀵 슬롯이 필요할 것을 예상하지 않고 만들었기 때문에 이를 연결하는 과정에 있어서

오늘 작업의 대부분은 인벤토리와 퀵슬롯의 연결 문제를 해결하는데 그 시간을 사용했습니다.퀵슬롯과 인벤토리 연결시 이벤트 패턴을 사용하지 않아서 일일히 모든 수치들이 최신화 될 수 있도록 연결해 주어야 했습니다.특히 인벤토리에서 퀵슬롯에 등록된 아이템을 사용했을때와, 그

사실상 오늘은 특별하게 추가로 진행한 작업은 없었고팀원 분들이 병합작업을 진행해 주실 때, 제출자료와 발표 자료를 만드는 시간을 가졌습니다.이로써 시연 영상과 프로젝트가 완성이 되면 제출은 문제 없이 가능할 것으로 보입니다.
오늘로써 숙련주차 팀 프로젝트를 끝마치게 되었습니다.서바이벌 생존 게임을 기반으로 하여 디펜스 게임을 넣은 방식이었습니다.Keep : 우선 팀장으로서 업무 분배와 일정 진행에 차질 없이 진행 관리를 잘 했다고 생각합니다. 저희 조는 주말에도 큰 작업은 없었으며 중간에
맵 생성관련 추후 작성

어제의 실패 이후, 시간 내에 도전과제까지 모두 완성해보려면 결국 인벤토리 구현을 먼저 진행해보는것이 좋겠다는 생각이 들었습니다.(어차피 3d 게임에서 인벤토리가 포함되어있기 떄문에.인벤토리는 여려번 만들어본 적이 있어서 그래도 하루만에 완성시킬 수 있었습니다.4\.

우선 간단했던 저번 인벤토리에서, 자동 사냥기능과등급, 아이템 랜덤 등장의 부가 기능을 추가했습니다.조금더 게임 같은 느낌이 들 수 있도록, Player와 Enemy를 만들었습니다.BigInteger로 Coin과 데미지를 관리합니다.등급 분류를 통해 변동된 확률로 아이
오늘자로 개인 프로젝트 제출까지 마무리 지었습니다. 이제는 마지막으로 남은 팀 프로젝트를 준비해야 합니다.스파르타 코딩클럽 10기, 유니티 심화 개인 프로젝트 인벤토리 과제작업물입니다.기존 Step에 부가적인 기능들을 몇가지 추가하고별도로 절차적 맵 생성과 FSM 으로
리볼버 스킬 궁극기, 일반스킬, 진화스킬 생성 후 후딜레이 기능추가 및
기본 : 물 불 풀 얼음 어둠 빛 합성 속성 : 심해 / 스팀펑크 / 낚시꾼 / 해적/ 전쟁기계 / 재-다크엘프 / 연금술사 / 세계수 / 버섯포자 / 드루이드 / 흡혈식물 / 눈보라 / 얼음무협 / 오한빙결 / 용기사 / 도박사 / 저승사자 / 역병의사 / 뱀파이어
스킬이 쿨타임 중일 때 무기 레벨이 상승하면→ UI에서는 최대 스택으로 잘못 표시됨쿨타임이 끝나면→ 실제 내부 스택 값은 레벨업 전 기준으로 회복됨→ 스킬 사용 시 UI와 실제 상태가 불일치StackRechargeRoutine()은 코루틴으로 스택을 주기적으로 회복무기
NukeStrikeSkill에 대한 기능을 개선하며, 스킬 효과에 포함된 폭발 이펙트와 지속 장판 데미지를 구현하였습니다. 또한, 적절한 위치 보정을 적용하여 효과가 정확히 바닥에 닿도록 했습니다.스킬 쿨타임 등록 방지: 쿨타임이 등록되지 않도록, 탄약이 부족하거나 열
경험치(Exp) 시스템 구현경험치 바 및 레벨 표시 UI 제작최대 레벨 도달 시 처리싱글턴 기반 UI 연결 구조 설계경험치 누적 시 자동 레벨업최대 레벨 도달 시 경험치 비표시 및 바 고정ExpController → 게임 로직 관리ExpUIManager → UI 반영
평타 시 추가로 검기 발사.Projectile에 IsPiercing 설정 가능하게 구현.방향에 따라 검기 회전 및 스케일 보정.대쉬 중 히트박스 생성 (dashHitboxPrefab)으로 공격.플레이어 중력 비활성화 (gravityScale = 0) 처리 포함.이동 중
Update() 내 테스트 입력 처리 분리 → HandleTestInputs() 메서드로 이동OnSkillS/D/F() → 공통 메서드 HandleWeaponSkill(SkillSlot, InputValue)로 통일equippedWeapon 캐싱 사용하여 접근 최소화A
Master Audio 효과음 출력Random Pitch 적용 및 음정 튀는 현상 해결루프 사운드 적용 (미니건 등 자동 무기)Skill 기반 사운드 출력 구조 개선배경 음악 (BGM) 시스템 도입무기 사운드, 스킬 사운드 등 SO 기반 이름으로 동적 호출피치 랜덤화:
이 문서는 MapCycleManager를 통해 일반맵 타입1 → 중간보스 → 일반맵 타입2 → 최종보스 순서로 전투맵을 구성하고, 이를 위해 Resources 폴더 구조와 코드를 구성하는 방법을 설명합니다.이 구성을 사용하면 각 단계의 전투맵을 명확하게 분리하고, 다양

오늘의 작업은 타일맵을 최신화 하는 작업이었습니다.
ScriptableObject는 Unity에서 데이터를 에디터에서 저장하고 공유할 수 있는 방법을 제공하는 클래스입니다. MonoBehaviour와 다르게 씬에 존재하지 않아도 되며, 메모리 사용 효율이 좋습니다.게임 설정 데이터 (예: 무기 스탯, 아이템 정보)공통으
CrimsonDanceSkill의 쿨타임 동작 구조 분석스킬 구조 통일성 점검범위 궁극기 아이디어 구상 및 가능성 검토기존 구조에서는 버프 지속시간 \_duration이 끝나기 전까지 스킬 재사용이 막힘.이유는 \_activeBuffRoutine 체크로 중복 실행을 막
출혈 상태의 적을 대상으로 출혈 스택을 추출하여,스택 수만큼 흡혈 오브젝트(BloodOrb)를 생성플레이어에게 날아오며 체력 회복스택 수치에 따라 일정 시간 버프(FinalDamageMultiplier) 부여이후 일정 시간 후 버프 제거생성 후 일정 시간(0.3~0.5
이 문서는 Unity에서 인벤토리 시스템을 구현한 InventoryManager 클래스의 전체 코드와 기능 개선 내용을 정리한 것입니다.인벤토리 UI 열고 닫기장비와 아이템 슬롯 UI 갱신아이템 추가 및 교체아이템 교체 시 스탯 제거 및 적용 처리V키를 1초간 누르면
타운 → 전투 사이클 진입 시 타운 맵이 전투 사이클에 포함되지 않도록 분리튜토리얼 사이클과 일반 전투 사이클을 완전히 독립적으로 처리MapManager가 초기화 시점(Start)이 아닌 포탈 트리거 시점에 사이클을 결정하도록 구조 개선호출 시점에 사이클 타입을 넘겨