요약
Unity 기반 2D 퍼즐 플랫포머 게임 'Out of Body' 개발. 독창적인 빙의 메커니즘을 통해 캐릭터별 차별화된 게임플레이를 구현하는 혁신적인 상태 관리 시스템 설계 및 개발.
역할
•
게임 시스템 아키텍처 전체 설계 및 개발 담당 (기여도 100%)
•
CorgiEngine 물리 시스템 커스터마이징을 통한 선택적 충돌 시스템 구현 (기여도 100%)
•
상태 저장/복구 기반 무결성 보장 세이브 시스템 개발 (기여도 100%)
성과
•
캐릭터별 차별화 플랫폼 시스템으로 독창적 게임플레이 실현
•
O(1) 성능의 실시간 충돌 필터링으로 안정적인 60FPS 유지
•
포괄적 상태 관리를 통한 완벽한 체크포인트 복구 시스템 구축
시기
•
2025년 개발 진행 중
실시간 빙의 상태 관리 시스템
게임의 핵심인 빙의 메커니즘을 위해 복잡한 게임 상태 전환을 매끄럽게 관리하는 종합적인 시스템을 설계했습니다. 유령 모드와 빙의 모드 간의 자연스러운 전환, 카메라 시스템과의 연동, UI 피드백 통합을 하나의 일관된 경험으로 제공합니다.
특히 거리 제약 시스템과 시각적 피드백을 통해 게임의 전략적 깊이를 더했습니다. 플레이어는 마지막 빙의 대상으로부터 일정 거리 내에서만 활동할 수 있으며, 거리에 따른 시각적 변화로 직관적인 게임플레이를 구현했습니다. 이러한 제약은 퍼즐 요소로 작용하여 단순한 캐릭터 전환을 넘어선 전략적 게임플레이를 제공합니다.
예시 코드
통합 빙의 상태 관리
public class Possession : CharacterAbility
{
// 전역 상태 관리로 게임 전체 일관성 보장
private static Character currentPossessedCharacter;
private static Character lastPossessedTarget;
// 빙의, 카메라, UI를 통합 관리하는 핵심 메서드
private void TryPossess(Possessable target)
{
// 빙의 가능 여부 검증
if (!target.CanBePossessed()) return;
// 상태 전환 및 카메라 시스템 연동
Character targetCharacter = target.GetComponentInParent<Character>();
currentPossessedCharacter = targetCharacter;
// LevelManager를 통한 플레이어 캐릭터 전환
LevelManager.Instance.SwitchPlayerCharacter(targetCharacter);
// 통합 피드백 시스템
possessionSuccessFeedbacks?.PlayFeedbacks();
onPossessionStarted?.Invoke(targetCharacter);
}
}
C#
복사
타이틀 02
쥐는 작은 틈을 통과하고, 고양이는 높은 곳에만 접근 가능한 차별화된 게임플레이
CorgiEngine의 핵심 물리 충돌 시스템을 완전히 재설계하여 캐릭터별로 다른 플랫폼에 접근할 수 있는 혁신적인 시스템을 구현했습니다. 모든 Raycast 메서드를 오버라이드하면서도 기존 엔진 기능과 100% 호환성을 유지하는 확장 가능한 아키텍처를 설계했습니다.
Dictionary와 비트 연산을 활용한 최적화로 O(1) 성능의 충돌 검사를 실현했습니다. 이를 통해 다중 캐릭터 전환 시에도 성능 저하 없이 안정적인 60FPS를 유지할 수 있었습니다. 새로운 캐릭터 타입 추가 시에도 기존 코드 변경 없이 확장 가능한 구조로 설계했습니다.
예시 코드
충돌 필터링 시스템
public class SelectiveCorgiController : CorgiController
{
// 모든 충돌 검사를 선택적으로 필터링
protected virtual RaycastHit2D SelectiveRayCast(Vector3 start, Vector3 direction,
float distance, LayerMask mask, Color color, bool drawGizmo = false)
{
RaycastHit2D hit = MMDebug.RayCast(start, direction, distance, mask, color, drawGizmo);
if (hit && !PlatformAccessOptimizer.Instance.CanUse(hit.collider, characterType))
{
return new RaycastHit2D();
}
return hit;
}
}
// O(1) 성능의 플랫폼 권한 관리
public class PlatformAccessOptimizer : MonoBehaviour
{
private readonly Dictionary<Collider2D, CharacterType> _platformCache = new();
public bool CanUse(Collider2D collider, CharacterType characterType)
{
if (_platformCache.TryGetValue(collider, out CharacterType allowed))
{
return (allowed & characterType) != 0; // 비트 마스킹으로 즉시 판정
}
return true;
}
}
C#
복사
포괄적 상태 복구 리스폰 시스템
게임의 모든 객체 상태를 완벽하게 저장하고 복구하는 종합적인 시스템을 개발했습니다. 단순한 위치 복원을 넘어 Health, AI 상태, 빙의 관계까지 포함하는 포괄적인 상태 관리로 복잡한 게임 상황에서도 완벽한 체크포인트 복구를 실현했습니다.
IRespawnable 인터페이스 기반의 확장 가능한 설계로 새로운 컴포넌트 추가 시에도 기존 시스템 수정 없이 리스폰 기능을 통합할 수 있습니다. 우선순위 기반 순차 복구 시스템으로 컴포넌트 간 의존성 문제를 해결하여 안정적인 상태 복원을 보장합니다.
예시 코드
확장 가능한 상태 관리 아키텍처
// 확장 가능한 리스폰 인터페이스
public interface IRespawnable
{
Dictionary<string, object> SaveState();
void LoadState(Dictionary<string, object> data);
int GetRespawnPriority();
}
public class RespawnManager : MonoBehaviour
{
// 우선순위 기반 순차 복구로 의존성 문제 해결
private void RestoreComponentStates()
{
var components = CollectRespawnableComponents()
.OrderBy(c => c.priority)
.ToList();
foreach (var (component, behaviour, priority) in components)
{
component.LoadState(savedData.customData);
component.OnRespawn();
}
}
}
C#
복사