28일차) [Unity] 클래스 구조 분석 및 Raycast를 활용한 기믹 최적화

엄기태·2026년 2월 11일

Unity

목록 보기
4/13

🎯 1. 오늘의 학습 목표

  • 유니티와 C# 환경에서의 클래스 다이어그램 비교 분석
  • 유니티 내장 기능을 활용한 스페이스 인베이더 기믹 구현

🔍 2. 클래스 구조 비교 분석: Unity vs C#

유니티 버전의 클래스 다이어그램을 작성하고, 순수 C# 구현 방식과의 차이점을 분석하였다.

주요 분석 내용

  • 컴포넌트 기반 시스템: 유니티는 화면 출력, 맵 생성, 충돌(Collision) 시스템을 엔진 자체에서 지원하므로 직접 작성해야 하는 스크립트 양이 C#에 비해 현저히 줄어든다.
  • 접근 제어 및 보안: C#에서는 클래스 간 상호작용을 위해 public 선언이 잦았으나, 유니티는 인스펙터를 활용하면서 private 필드 사용이 용이해져 데이터 안정성이 높아지는 구조이다.
  • 상속 구조의 유연성: 유니티의 모든 클래스는 MonoBehaviour를 상속받아 정형화되어 있어 간편하다. 반면, 순수 C#은 상속 구조를 자유롭게 설계할 수 있어 최적화 관점에서 더 유리한 측면이 있다.

🔗 클래스 다이어그램


💡 3. 심화 학습: Raycast(레이캐스트) 활용

인베이더 공격 로직 구현 시, 팀킬을 방지하기 위해 유니티의 Raycast 기능을 학습하고 적용하였다.

Raycast 개념

시작점에서 특정 방향으로 가상의 레이저를 쏴서 충돌체 정보를 얻는 기능이다. 매개변수는 (시작점, 방향, 정보 저장, 최대거리)로 구성된다.

적용 코드

RaycastHit hit;
// 현재 위치에서 뒤쪽으로 10f만큼 레이를 발사
if (Physics.Raycast(transform.position, Vector3.back, out hit, 10f))
{
    // 만약 앞에 걸린 물체의 태그가 "Enemy"라면 (아군이 앞에 있다면)
    if (hit.collider.CompareTag("Enemy"))
    {
        // 발사 기회를 다음으로 미루고 리턴한다.
        _fireCooldown = _fireInterval;
        return;
    }
}

이 로직을 통해 사정거리 내에 아군이 있을 경우 발사를 생략하여 논리적인 공격 패턴을 구현할 수 있었다.


🚀 4. 회고 및 향후 계획

  • 아이디어: 오늘 배운 Gateway 코드와 Raycast를 활용하면 현재 제작 중인 탈출맵에 훨씬 정교한 기믹(감지 센서, 특정 위치 발판 등)을 추가할 수 있을 것이다.
  • 계획: 점프 시 지면 접지 여부를 체크하는 기능을 Raycast로 구현하여 공중 점프 버그를 수정할 예정이다.

profile
코딩 학습 공간

0개의 댓글