2022.09.24 개인 학습 - 특강
C++ : assert(조건, “문장”);
→ 조건이 충족되지 않으면 크러시가 일어나고 문장을 에러 로그로 출력
유니티 : Debug.LogError();
사용 이유 : 강제로 크러시를 일으켜 디버깅이 편하도록 한다.
_DEV_MODE_
전처리기 활용
코드 형식
#define _DEV_MODE_
#ifdef _DEV_MODE_ // <- 개발자 모드가 정의되어 있다면 실행
/*프로토타입 코드*/
#endif
사용 이유 : 일단 프로토타입을 눈으로 볼 수 있도록 (개발 진행 상황 확인 및 디버깅) 설정
주의 : 배포할 때는 개발자 모드를 껐는지 반드시 확인
무조건 null 체크가 좋은 것은 아니다.
개발자 모드를 만들고 잘 활용하자.
새로운 언어를 배울 때 이런 기능이 있는지 체크해보는 것도 좋다.
이미지 (스프라이트)의 일정 범위만 보이도록 하는 기능
Hide&Seek 프로젝트 때 미니맵의 구현에 도움이 되었으리라 생각된다. 아쉬운 부분
A* 알고리즘의 단점 보완 - ㄷ자형태의 장애물 등이 있는 길에서 효율이 많이 떨어지는 문제
JPS 알고리즘의 단점
격자 형태만 가능하다.
참고 자료
const char* str = "오늘,스터디,늦은사람\n대가리를,다,부숴버릴거야"
int startIndex = 0; // 0
int curIndex = 0; // 2
while(true)
{
if(str[curIndex] == ',' str[curIndex] == '\0' str[curIndex] == '\n')
{
int size = curIndex - startIndex; // 2
char* data = (char)malloc(sizeof(char) (size + 1));
data[size] = '\0';
for(int i = 0; i < size; ++i)
{
data[i] = str[startIndex + i];
}
// 입맛에 맞는 수정 알잘딱 하셈
startIndex = curIndex + 1;
}
++curIndex;
}
switch
문으로 상태를 처리
플레이어가 복잡한 상태를 가지고 있을 때
예외 처리가 늘어난다.
코드가 길어지고 처리 곤란
⇒ 디자인 패턴 등장 : 유한 상태 머신 (Finite State Machine; FSM)
상태를 객체화시켜 관리하는 것
객체 : 속성 (멤버 변수)과 기능 (멤버 메소드)를 갖는 가장 작은 단위
객체마다 시작 / 업데이트 / 종료의 기능을 갖추고 각 상태마다 그 객체를 갖도록 구현
예시 코드
2022. 09. 24 switch문과 FSM 상태 관리 비교
코드 설명
class FSM
상태를 관리하는 매니저 역할
AddState()
: State
를 추가할 때, FSM
을 가져야 한다.
abstract void OnEnter()
: 상태로 진입했을 때 호출할 함수
abstract void OnUpdate()
: 상태가 업데이트될 때 호출할 함수
abstract void OnExit()
: 상태에서 나갈 때 호출할 함수
FSM의 장단점
장점 : 그 전의 상태를 검사하지 않아도 된다.
단점 : 상태가 많아지면 그 연결을 파악하기 힘들어 도식화해야 한다.
도식화 툴 - PlantUML
시퀀스 다이어그램
클래스 다이어 그램
게임 프로그래밍 패턴
GoF의 디자인 패턴
게임 오브젝트에 대한 정보를 별개 정보(파일)로 갖고 있는 것