Monster Factory 추가
- 지금 게임 오브젝트가 컴포넌트 패턴으로 조립되다보니, 하나의 객체를 내보내기까지 신경써야 할 것들이 많다
- 사람이다보니 실수를 할 수 있기 때문에, 오브젝트의 공통적인 부분들을 모아서 마치 공장에서 만드는 공산품(?) 처럼 만들어내기 위한 일련의 작업들을 추가했다.
- Transform, MeshRenderer, Material, Mesh 이런 컴포넌트들은 대부분의 객체가 가지고 있기 때문에 객체가 생성될 때 자동으로 붙여서 생성되도록 했다.
- RigidBody, Physical, Movement, Animator, DebugRenderer 등의 컴포넌트는 객체의 특성에 따라 붙일지 말지 결정되기 때문에 이 부분은 객체를 생성한 후 그 스코프 안에서 처리하는게 낫다고 생각했다.
(좀 더 작업해보고 이 부분도 간소화할 수 있으면 추가적인 함수를 팔 생각이다)
- 그리고 몬스터의 경우 애니메이션과 AI를 이루는 행동패턴 클래스들을 각기 관리하기엔 너무 시간이 오래 걸려서 이 부분 또한 Factory 클래스에 위임하기로 했다.
- 이 부분을 작업할 때 많은 고민을 했었는데 나중에 스테이지와 맵을 만들 때 몬스터가 맵에 추가되게끔 할 생각이라 툴에서 이 몬스터를 그때 그때 생성해서 추가하기 위해서 동일한 인터페이스를 맞추기 위함이다.
RigidBody 및 충돌 개선
- 타일 충돌을 계속 테스트해보니 또 여러 버그가 있었다.
- 현재 RigidBody에서 Velocity를 관리하고 있는데, 플레이어가 한번 움직일 때 그 방향으로 일정한 힘을 주게 하는 시스템이다. (이 벡터에 DeltaTime을 곱해서 매 프레임 일정하게 나아간다)
- 그런데 이 RigidBody에서 속도를 매 프레임 들고 있으니, 속도를 다시 재조정할 때까지 그 속도로 무한히 나아가는 것이다.
- 그렇다고 매 프레임 속도를 초기화하자니 중력의 자연스러운 표현을 위해서 y축은 내버려둬야할 것 같다
- 그래서 당장은 x축 속도만 처리하고, y축 속도는 뒀다가 각 State에서 처리해주는 방법을 택했다.
- 그리고 타일 충돌의 경우 Raycast로 계속 처리하고 있었는데, 프레임 탓에 정확한 위치 계산을 종종 놓치는 경우가 발생했다.
- 그래서 Raycast로 계산하지 않고, 마찬가지로 PhysX에서 제공하는 computePenetration이라는 함수를 사용했다.
https://dev-treadmill.tistory.com/167
11. Geometry Query
PhysX의 Geometry Query란 쉽게 말해 Geometry에 대한 충돌 검색 기능이라고 한다 Raycast - 레이(빛 줄기)를 Geometry와 테스트한다 Swift - 한 Geometry를 다른 Geometry와 교차하는 첫 번째 점을 찾기 위해 라인을
dev-treadmill.tistory.com
- 이 함수는 두 Geometry가 얼마나 침투했는지를 계산하고, 깊이와 방향을 반환해준다.
- 깊이와 방향을 곱한 벡터를 현재 위치에다 더해주면 충돌을 벗어나게 되므로, 깊이가 Zero가 아니라면 매 프레임 위치를 보정해주게 했다.
- 이렇게 했더니 전보다 훨씬 깔끔하고 부드러운 충돌이 이루어졌다.
etc.
- 그 밖에 몬스터 스폰/파괴 이벤트 처리
내일 할 일
- 파티클 시스템을 통해 타격 시 먼지가 튀는 듯한 효과 구현
'게임 개발 > [D2D_Portfolio] DirectX2D 포트폴리오 작업일지' 카테고리의 다른 글
31. Particle System을 활용하여 공격 시 발생하는 먼지 구현 (0) | 2023.04.22 |
---|---|
30. Physic Event 추가 & Particle System 구현 중 (0) | 2023.04.20 |
28. 몬스터 파티클 추가 (0) | 2023.04.17 |
27. 몬스터 추가 및 AI 초기 작업 & 타일 충돌 처리 완료 (0) | 2023.04.14 |
26. Light 구현 및 버그 수정 & 메테오 스킬 스모그 이펙트 추가 (0) | 2023.04.13 |
댓글