GPG 3권 챕터1.1 게임 이벤트 관리

(아마도 unity->edit->TimeManager와 같이 호출을 프레임과 다르게 하는법인것같다.)

이벤트관리 이하 스케줄러라한다.
랜더링, 에니, AI, 충돌검출, 물리를 매 프래임처리와 다르게 처리하는것을 말한다.
병목현상을 방지하기위함이다.

스케줄러는 즉석에서 추가, 제거가 가능해야한다.

구조
스케줄러 :  클럭 <- 이벤트관리자 -> 작업관리자 -> 작업

클럭 : 매시간(deltatime같은거)
이벤트관리자 : 클럭채크 후 제 시간이되면 작업관리자에게 일 할당, 시간갱신, 작업갱신등의 일도 한다.
작업관리자 : 이벤트관리자가 일주면 함

가상시간 : 단방향 시간과 달리 정지하거나 더빨리돌리게 조작가능한시간
시뮬레이션 시간 : 스케줄러에서 사용하는 가상시간(별 차이 없음)

특징
- 잘만 이용하면 순차디버깅 가능.
- 시뮬레이션이 시작될때 0으로 시작
- 적당히 호출하면, 사용자는 끊긴다는걸 모르지만, 일관수행하면 지연문제가 발생안한다.
- 작업이 순차적으로 수행하며, 프래임마자 작업중간에 갱신된다.
예) 20프레임당 렌더한다했을때, 51과54프레임에 변화가 생겼다면, 40프레임은 결과를 모르니 60번째 랜더순간에서 54프레임(마지막)만 랜더하면 됨

이벤트 종류들
N프래임 (N = 1) : 프레임1번할때 1번호출(unity에 update나 tick인것같다.)
시간차 호출 : 설정한 시간간격으로 호출, 일정하지 않게도 할수있다.

클럭
지난시간과 현제시간을 비교해서 시간을 결정
클럭이 1ms면 충분하다. 더필요하면 여러개두고 해상도를 높일수있다(그럴 필요가 있나?) 반올림 오차에 주의

순차처리
여러 작업을 동시에 할경우 우선순위를 주어서 연산을 시킬수있다. 우선순위가 같으면, 순환식(round-robin)을 주어서 처리.

작업관리자의 세부사항
작업할게 여러개면 list빠른 순차로 뽑아 연산후, 목록에 넣을때 적절한 곳에 삽입
그래야 빠른검색과 목록앞에 머문다.(캐싱에 유리) Key값을 주면 더 좋다

윈도우 환경에서 windowtimer(gettickcount를 쓰라는건가?)로 체크하던가, api에서 재공하는 메세지펌프를 쓰면된다(후자는 윈도우 크기조정하면 시간도 멈춘다. 그냥 mmwin.h로 하자) 결론은 컴퓨터 사향에 타지않는 시간을 구해서 적용하라는듯.


일정관리
예)200에 시작해서 3프래임식 하다 210에 끝난다 치면,
200에 작업후 203까지 프레임 계산,
203에 작업후 206까지 프레임 계산,
206에 작업후 209까지 프레임 계산, 209가 호출하고 이벤트 삭제한다.
Stop과Run같은 함수도 만들어놓자!


고급계념
규모가변성
어떤컴이든, 성능을 최대한 활용한다. 필요한게 컴퓨터 성능자료 수집해야한다.
수집한 성능으로, 시간예산을 편성, 예정보다 느리면 프래임을 느리게 돌린다.
5%~10%의 여유분의 시간을 두고 편성할것!

시뮬레이션
시뮬레이션할것, 로켓이 착륙하는데 너무 느리다면, 지구와 충돌하거나 뚫고 지나간다.

다중스레딩
자세한 설명은 생략 ㅋ

댓글

이 블로그의 인기 게시물

간단하게 언리얼 배터리 콜랙터 정리

전문가를 위한 c++ 18장 함수오버로딩

GPG 3권 챕터1.2 객체 조합식 게임 프레임웍