내일배움캠프 43일차 TIL : 유니티 심화 팀플 발표, const와 readonly 차이

woollim·약 10시간 전
0

내일배움캠프TIL

목록 보기
36/36
post-thumbnail

■ 학습 개요

오늘 계획

  • 유니티 심화 팀플 발표 자료 준비
  • 깃허브 Dev -> main으로 병합
  • 팀프로젝트 복기
  • 최종 프로젝트 준비


■ Enemy AI 요약

  • 이번 팀프로젝트에서 맡게된 Enemy AI 파트 발표 부분
    깃허브 링크

  • Enemy AI는 FSM 패턴과 NavMeshAgent 를 활용해서 만들었습니다.

  • 각 스테이트들은 클래스로 정의하여 관리하고, 스테이트에 돌입하면 그에 맞는 행동과 애니메이션을 수행합니다.

  • Idle 스테이트는 대기하며 주변이 플레이어가 없다면,
    NavMesh.SamplePosition 으로 다음 목적지를 탐색하고
    Wander 스테이트로 변환됩니다.

  • 주변에 플레이어가 추격 범위 안에 있다면 Chasing 스테이트로 변환하고
    NavMesh.SetDestination 으로 플레이어를 추격합니다.

  • 플레이어가 공격 범위 안으로 들어온다면,
    Aiming 스테이트 변환하고 플레이어를 조준합니다.

  • 마지막 공격 시간을 체크하여 공격 레이팅 시간이 지났다면,
    Attack 스테이트로 변환하고 플레이어를 사격합니다.

  • 이때 플레이어가 계속 공격 가능 범위 안에 있다면 공격 레이팅 시간을 체크하며,
    Aiming 스테이트와 Attack 스테이트 변환을 반복합니다.

  • Enemy 데이터 관리와 저장에 어려움이 있었습니다.

  • 초기에 작업할 때는 Hierachy에 직접적으로 에너미 프리팹을 올려놓고 작업했습니다.

  • 이 때문에 게임을 저장할때 Enemy들의 현재 체력과 마지막 위치를 저장하기로 했지만,
    Enemy 들이 개별적으로 따로 존재하고 있고 관리 시스템이 없었기에 Enemy 데이터에 접근하기 어려웠습니다.

  • 이를 해결하기 위하여 Enemy 리스트를 만들고 Enemy 를 동적 생성하여 리스트에 추가하였습니다.
    리스트로 관리하게 되며 저장관리와 게임 클리어 조건을 확인 하기 위한 Enemy 처치 카운트가 용이해졌습니다.


■ const와 readonly 차이

○ const

  • 정의: 컴파일 타임 상수로, 값이 컴파일 시점에 결정
  • 사용 범위:
    • 필드: 클래스, 구조체의 멤버 필드로 사용 가능
    • 지역 변수: 메서드 내부에서 사용 가능
  • 특징:
    • 반드시 선언과 동시에 초기화해야 함
    • static 키워드가 없어도 암시적으로 정적(static)
    • 컴파일러가 상수 값을 직접 치환하므로 성능에 이점이 있음
    • 불변(immutable)한 값, 예: const double Pi = 3.14159;
  • 주요 사용 사례:
    • 변하지 않는 값(예: 수학 상수, 설정 값 등)
public const double Pi = 3.14159;

○ readonly

  • 정의: 런타임 상수로, 값이 런타임 중에 초기화될 수 있음
  • 사용 범위:
    • 필드: 클래스, 구조체의 인스턴스 또는 정적 필드로 사용 가능
  • 특징:
    • 선언 시 초기화하거나, 생성자에서 초기화할 수 있음
    • 생성자를 통해 초기화하므로 실행 중 다른 값을 지정 가능
    • 초기화 후에는 변경할 수 없음(불변)
  • 주요 사용 사례:
    • 런타임에 결정되지만 이후 변하지 않아야 하는 값
public readonly int NumberOfSeats;

public Car(int seats)
{
    NumberOfSeats = seats; // 생성자에서 값 할당
}

0개의 댓글