충돌처리 만드는데, 유니티처럼 CollisionEnter, CollisionStay, CollisionExit 세 개 만들려고 했음.
이걸 구현하려다보니 서로 다른 두 콜라이더간의 이전 프레임 충돌 정보가 필요했음. 왜냐면 A랑 B가 충돌중인데 갑자기 C가 와서 B랑 충돌하면 B랑 C는 CollsionEnter를 호출해야함. 그러니까 콜라이더끼리 충돌 정보가 필요함.
게임 만드는 유튜브 영상에서는 콜라이더마다 4바이트 정수 ID를 줌. 그리고 8바이트 정수의 상위 4바이트와 하위 4바이트에 두 콜라이더의 ID를 넣어서 유일한 key값을 만듦. 그리고 그걸 해시맵에 넣어서 관리함.
이걸 보고, 해시맵보단 벡터로 만들어서 캐시레이트 높이는게 어떨까 생각해봤음.
그런데 잘 생각해보면, 콜라이더의 ID는 4바이트임. 그리고 키 값은 8바이트임. 벡터의 각 인덱스를 key값이라고 한다면, 2^64개의 키 값이 만들어짐.
그래서 콜라이더의 ID를 2바이트로 줄이고, 키 값을 4바이트로 만들어야겠다고 생각함. 근데 이 경우에도, 2^32개의 키 값이 만들어짐. bool 자료형을 이용한다고 해도 2^32 바이트 = 4GB. 너무 큼. 그래서 어차피 참/거짓을 표현할거니까 bool 벡터가 아니라, 그냥 UINT vector로 만들어서 N번째 비트를 사용하는 방향으로 만들려고 했음. 이러면 하나의 키당 1바이트 먹던게 1비트 먹으니까 8로 나눠져서 512MB를 먹게 됨.
콜라이더의 ID가 2바이트라는건, 콜라이더는 최대 65536개 만들어질 수 있다는 소리임.
---------------------
이후 어떻게 더 줄일 수 있을까 생각하다가 걍 OnCollision만 만들기로 함.
개소리를 길게 적어논듯
나도 모르겠다
벡터로 만들면 임의접근 속도는 좋아지지만 (캐시히트 + 인덱스 계산) 말대로 메모리 소모량이 커지기 때문에 그렇게 안 하는 거지. 정 벡터같은 임의접근가능...하게 하고 싶으면 기본 힙이 아니라 따로 가상 메모리 리저브-커밋 관리하는 게 메모리 소모는 적을 거임. 물론 빠르다고는 안 했음
ㅠㅠ 저거때문에 2일정도 고민했는데... 걍 바로 해시 쓸껄