본문 바로가기

Til

TIL(Today I Learned) - 48 오늘의 TIL (Today I Learned)스킬 시스템 구조 개선SkillManager와 PlayerSkill 간 역할을 명확히 분리하여, SkillManager는 스킬 실행을 총괄하고 PlayerSkill은 스킬 실행 로직을 담당하도록 설계.TriggerSkill을 통해 스킬 타입(Active, Buff, Passive)에 따른 적절한 메서드를 호출.패시브 스킬 동작 방식전투 시작 시 자동으로 발동하며, 쿨다운이 끝나면 다시 발동.buffDuration 동안 효과가 유지되며, 종료 시 원래 상태로 복구.isBuffActive를 활용하여 중복 발동을 방지.유연한 스킬 관리List를 활용하여 스킬 데이터(ScriptableObject) 기반으로 동작.cooldownTimers와 isBuffActive 배.. 더보기
TIL(Today I Learned) - 47 오늘의 TIL (Today I Learned):SkillSO와 ScriptableObject:ScriptableObject는 데이터 중심의 설계에 적합하며, 게임 내 스킬이나 아이템 데이터를 관리하는 데 매우 유용하다.스킬 실행 로직은 SkillSO가 아닌 별도의 매니저 클래스에서 처리하는 것이 더 역할 분리가 잘 된다.스킬 시스템 설계:스킬 쿨다운과 실행 로직을 PlayerSkill에서 관리하고, 실제 효과를 SkillManager로 분리하여 구현하면 유지보수와 확장성이 높아진다.SkillSO는 스킬의 이름, 설명, 쿨다운, 마나 소모량, 데미지 등 데이터를 저장하고, 실행 로직은 포함하지 않는 것이 적합하다.싱글톤 패턴 활용:SkillManager를 싱글톤으로 설계하여 게임 내 어디서든 스킬 실행 로.. 더보기
TIL(Today I Learned) - 46 오늘은 최종 프로젝트를 시작하는 날이었다.프로젝트의 첫걸음으로, 팀원들과 함께 게임 기획에 대해 다양한 이야기를 나누며 방향을 정리했다.처음 통일된 의견은 **방치형 클리커 게임인 "오크 아이돌 키우기"**였다.오크 아이돌 키우기라는 독특한 컨셉을 잡고, 튜터님과 멘토님께 조언을 구했다.그러나 컨셉에 대해 피드백을 받은 결과, 오크 아이돌 키우기의 경우컨셉이 다소 난잡하고 일반적인 포트폴리오에 적합하지 않다는 의견을 들었다.결국, 컨셉을 보다 일반적이고 정돈된 방향으로 수정하기로 결정했다.우리 팀은 더 많은 것을 보여주고, 경쟁력을 갖추기 위해 차별화된 컨셉을 시도했지만,오히려 이런 차별성이 독이 될 수 있다는 중요한 교훈을 얻었다.오늘의 배움:독창적인 컨셉도 중요하지만, 목표와 대상에 맞춘 적합성이 우.. 더보기
TIL(Today I Learned) - 43 오늘 배운 것 (TIL)UI 미니맵 삼각형 방향 표시삼각형(시야 표시)의 Pivot 설정이 UI 회전과 연계되어 중요하며, Pivot을 (0.5, 0.0)으로 설정하여 꼭짓점이 플레이어 중심에 위치하도록 구현.삼각형의 회전은 Z축 회전을 조정하여 플레이어의 바라보는 방향에 맞추는 것이 핵심.Pivot 문제 해결Pivot 설정은 Unity Editor에서 변경하거나, 코드에서 강제로 설정.잘못된 Pivot 값은 회전 계산에 영향을 미쳐 삼각형이 플레이어와 어긋나는 원인이 됨.UI 좌표 변환플레이어 월드 좌표를 미니맵 좌표로 변환할 때, 비율 계산이 정확해야 UI가 맵 크기와 일치.특히 맵의 비율과 크기를 정확히 고려해야 이상 없이 동작.디버깅의 중요성문제 발생 시, Debug.Log()를 활용해 좌표, 회.. 더보기
TIL(Today I Learned) - 36 1. UI 이벤트 구독 문제 해결UIManager에서 각 UI 패널(Title, InGame, GameOver, Pause, InGameDescriptionPanel) 관리 및 이벤트 구독 문제를 다루었다.GameManager에서 발생하는 다양한 이벤트(OnTitleScreen, OnGameStart, OnGameOver, 등)에 맞춰 UIManager가 올바르게 구독하고 UI를 업데이트하도록 조정.특히, InGameDescriptionPanel이 게임 시작 시에 자동으로 표시되며, 사용자 입력 후 게임이 진행되도록 처리.2. 게임 상태 관리 개선GameManager에서 게임 중단 및 재개 시 Time.timeScale을 조정하여 게임의 모든 요소가 올바르게 일시 정지 또는 재개되도록 구현.ToggleP.. 더보기
TIL(Today I Learned) - 34 Unity에서 플레이어 무적 상태와 장애물 충돌 처리1. Physics.IgnoreLayerCollision을 활용한 간단한 무적 처리주요 발견: 무적 상태를 수동으로 확인하며 충돌을 처리하는 대신, Physics.IgnoreLayerCollision을 사용해 레이어 기반 충돌 무시를 설정하는 것이 더 효율적입니다. 이를 통해 플레이어와 장애물 간의 충돌을 무적 상태일 때 비활성화할 수 있습니다.장점: 조건문을 통한 충돌 처리 코드보다 간단하고, Unity의 물리 엔진을 활용해 성능에도 이점이 있습니다.2. 이벤트 기반의 체력 관리 시스템주요 발견: OnHealthChanged, OnLifeChanged, OnPlayerDeath 같은 Action 이벤트를 PlayerHealth 클래스에서 사용하면 체력.. 더보기
TIL(Today I Learned) - 33 싱글턴 패턴의 사용 여부: 프로젝트 구조에서 싱글턴 패턴을 언제 사용하고, 언제 직접 참조를 할지 결정하는 것이 중요합니다. 필요하지 않은 경우 싱글턴 패턴 대신 직접 참조나 인스펙터 설정을 통해 성능 최적화를 할 수 있습니다.자식 오브젝트의 컴포넌트 참조: 부모 스크립트에서 자식 오브젝트의 컴포넌트를 GetComponentInChildren이나 Transform.Find를 통해 동적으로 가져오는 방식을 익혔습니다. 이를 통해 인스펙터에서 수동 설정 없이 자식 컴포넌트를 활용할 수 있습니다.콜라이더 크기 조절: 특정 상황(예: 슬라이딩)에서 자식 콜라이더의 높이만 줄이는 방법을 통해 플레이어의 다양한 상태를 구현하는 방법을 이해했습니다.충돌 및 점수 관리 로직: 장애물 회피나 충돌 시 점수 및 체력 관리.. 더보기
TIL(Today I Learned) - 25 오늘은 팀원과 협업 팀워크중에 발생한 일이다. 나는 양방향 참조가 나쁜지 모르고 무분별하게 양방향 참조를 하고 있었다. 따라서 양방향 참조에 대해 공부하여 장단점을 나만의 말로 썼다. 양방향 참조의 단점순환 의존성 (Circular Dependency) 위험: 양방향 참조는 두 클래스나 오브젝트가 서로를 참조할 때 발생합니다. 이로 인해 순환 의존성이 발생할 수 있으며, 이는 디버깅과 테스트가 복잡해지고 메모리 누수 같은 문제가 발생할 수 있습니다. 특히 객체가 서로를 참조하는 상태에서 적절히 해제되지 않으면 메모리 릭이 발생할 수 있습니다.코드 복잡성 증가: 클래스 간의 결합도가 높아집니다. A가 B를, B가 A를 참조하는 경우 두 클래스가 서로 강하게 연결되어 유지보수가 어려워집니다. 이러한 구조에서.. 더보기