Box와 Sphere충돌을 위해 우선 Collision 폴더에 있는 Boxcollider에 IsSphereCollision 부분에 우선
Obb충돌 정보를 가져온다.
축이 세개임으로 3번 반복
box에 투영을 시켜 벡터를 구하면 원에 가장 가까운 점이 나온다.
그것을 위해 우선 사각형에서 원으로 가는 벡터를 구한다.
다음 박스의 기준축과 거리를 내적하여 벡터를 구하고
mult 를 이용하여 음수 양수를 구한다. 음수는 90도 넘어갔을경우 양수는 90도가 안되었을떄 방향을 정함
그리고 구해진 값들을 이용하여 closestPointToSphere에 사각형Box에서 가장 가까운 점을 구해준다.
그후 원의 중점과 가장 가까운점과의 거리를 구하여 체크해주고
Spherecollider.cpp 파일에 값을 넘겨주면
이런식으로 충돌이 잘 이루어 지는것을 볼 수 있다.
다음으로는 앞서 했던 충돌들을 이용하여 Box에 충돌하였을때 통과하지 못하게 밀어내는것을 구현해보자
우선 새로운 Scene을 만들어준다.
만들어 준 후 Scene에 추가할 블럭모양의 모델을 불러와 출력준비를 해준다.
다음 모델을 관리하기 위해 Object에 Block.h 파일을 만들어준다.
정적으로 출력할것이기 떄문에 Update와 Render, GUIRender만 우선 설정해준다.
다음 cpp로 이동하여 Block생성자에서 model을 먼저 할당해주고
setParent로 상속을 해준다.
소멸자에서 model delete를 해주고
Render에서 model과 Collider(충돌)을 생성해준다.
block을 하나하나 collision설정을 하기엔 힘들기 때문에 자동으로 여러 block을 설치하여 할수있도록
관리를 해주기 위해 BlockManager.h 추가
Block이 게임에 있어 핵심이기 때문에 Singleton으로 관리를 해준다.
Singleton이기 때문에 friend 사용
다음 Block 생성을 위한 CreateBlocks함수로 x y z 좌표 받고.
GetHight 높이를 받아 유저가 Block위를 걸어다닐수 있도록 하고
PushCollder를 이용하여 유저가 큐브를 설치하거나 벽에 옆으로 닿아있을때 충돌 효과를
그 다음 list를 이용하여 유저가 Block을 채굴 할때마다 +
cpp파일을 만들어 이동
소멸자에서 block 만든것을 for문 사용하여 지워주고
다음 update로 block들의 생성 업데이트(Block이 설치하거나 부실때마다 바뀌기 때문)
다음 CreateBlocks로 Block 맵에 깔아주기
Random쓰는 이유(여러종류의 Block model을 Random으로 깔아주기 위해)
Random값은 GameMath.h 파일에서 Random_device 사용하여 뽑아주기
디버깅을 할때 Frame이 많이 떨어져서
Collision의 생성을 Key값으로 조절하여 껐다 켰다 할수있도록 만들기
우선 Collider.h파일로 이동하여 isDraw 생성 및 함수 추
다음 cpp로 이동하여 static변수이기 때문에 cpp의 헤더 밑에 만들어주고
Environment.cpp의 Update함수에서 Key값 추가하고
Collider.cpp의 Render에서
if문 사용하여 막아주고 실행하면
Key를 받아 on off 가능하게 된다.
'학원' 카테고리의 다른 글
DirectX 3D Block (2) | 2023.11.15 |
---|---|
DirectX 3D LayCollision Box (1) | 2023.11.09 |
DirectX 3D Box Collision (3) | 2023.11.09 |
DirectX 3D ModelRender (0) | 2023.11.08 |
DirectX 3D ExportMaterial (0) | 2023.11.08 |