45. 충돌 처리 5 - 실제 충돌체 생성 및 관리
*** 공부 방법 ***
1. 코딩을 해야 하는 부분은 첫 부분에 변수나 함수, 메소드에 대한 선언이 코드블럭으로 표시되어 있다. //ex) MakeFunction(); 2. 코드블럭 하단에는 해당 선언에 대한 구현 로직이 작성되어 있다. 처
hyrule.tistory.com
class CGameObject
- 충돌체는 CGameObject에 종속되어 해당 CGameObject의 충돌을 판정하게 될것이다.
- 한 게임오브젝트에 여러 개의 충돌체가 있을수도 있고, 충돌체가 종종 생성/제거될 일이 있으므로 여기에 맞는 자료구조를 생성해주어야 한다.
-- +참조 카운팅을 사용하여 포인터 관리의 편의를 도모한다.
< std::list<CShaerdPtr<CCollider> m_ColliderList >
< AddCollider(const std::string& Name) >
- 충돌체는 여러 모양이므로 다양한 클래스로 들어올 것이다 -> template 사용
- 성공하면 생성한 T의 포인터를 반환해주고, 실패하면 nullptr을 반환한다.
- 들어온 클래스를 동적 할당하고, 충돌체의 이름과 소유 CGameObject, 소유 CScene을 등록해 준다.
- 생성한 충돌체의 초기화를 실행시키고, 실패하면 nullptr을 반환한다.
- 과정이 완료되면 리스트에 삽입하고 주소를 반환해준다.
< Update(), PostUpdate(), Render() >
- 이제 만든 리스트를 각 메소드에서 순회를 돌며 충돌체의 Update, PostUpdate, Render 메소드를 호출한다.
- Render() 과정의 경우 ifdef를 통해 디버그 모드에서만 동작하도록 설정해 주자.
class CPlayer
- 이제 작동하는지 확인하는 차원해서 한번 생성해보자.
- 원하는 CGameObject의 초기화 단계에서 AddCollider<>() 메소드를 통해 생성해주고, SetExtent() 메소드와 SetOffset() 메소드를 통해 충돌체의 위치를 설정해 준다.
- CMonster에도 생성해 주자
- 충돌체 작동 확인