유니티 2020.3.15버전을 사용중인데 oncollisionenter는 discrete로 해도 아주 정확하게 충돌체크를 해주지 않네
지름이 0.05짜리 작은 sphere를 만들어 물체의 근처에 가져다 대면 충돌 전에 이미 oncollisionenter가 발생함
속도가 빠르면 빠를수록 오차가 더 크게 생기는데 대신 spherecastall 로 검사를 하면 아주 정확하게 충돌 체크가 일어남
문제는 spherecastall 로 검사시엔 raycasthit 의 hitpoint 가 나오질 않음
overlapshpere의 대략적인 충돌지점 말고 spehrecastall 로 검사시 충돌포인트를 확인하는 방법 아시는 분 계시면 가르침을 부탁드림
아님 oncollisionenter의 오차를 줄일 수 있는 방법이라도..
spherecastall 의 반환형이 raycasthit의 배열형태인데 나오질 않는다는게 무슨소리임?
raycasthit는 나오는데 충돌지점인 raycasthit.point 값은 zero로 나옴 찾아보니 이래저래 이유를 적어놓았던데 충돌점을 찾는 방법은 안나와서..
1. discrete말구 Continuous Dynamic을 써보기 2. 리지드바디에서 interpolate 켜보기 3. raycasthit.transform 으로 부딪힌 오브젝트 transform 불러온다음 sphere의 transform 얻어와서 벡터값 계산하기 다 해보는 게 좋을 듯 나도 해보지 않은 상태론 모르겠네
3번 부연설명하자면 부딪힌 오브젝트의 위치 벡터값에 sphere 위치벡터값 빼주면 sphere에서 오브젝트로 향하는 벡터가 나오는데 그거 노말라이즈 한다음 0.05 곱해서 sphere위치 벡터에 더해주면 부딪힌 그 지점 정확히 나옴 근데 굳이 그렇게 안하고 부딪힌 순간 sphere 위치 얻어오기만하면 계산안해도 되는데 0.05의 오차가 신경쓰이면 계산해야지
근데 1,2 는 충돌 마진값이 오히려 더 커지게 됨 그리고 3번 방식은 둘다 구체인 경우에만 가능할 것 같고..
일단은 overlapsphere를 이용해 알아내기로 했음 예전에 뭔가 트러블이 있어서 overlapsphere를 안 쓰려고 마음을 먹었던 것 때문에 거부감이 나서 그런데 기억이 안 남 ㅋㅋㅋ 답변 ㄳㄳ
문서에 zero로 나온다는거는 SphereCastAll 시작 지점에 이미 Collider가 겹쳐 있는 경우에만인건데, offset같은걸 주거나 해서 Cast 시작지점에 찾으려는 대상이 겹치는 상황을 피하도록 하는게 가장 베스트임. - dc App
아 쪽팔려 그게 그 의미였구나 난 단순히 히트오브젝트가 캐스트 레인지 안에 들어온 상태에서는 검출 안 된다는 뜻인 줄 알았음 ㅋㅋ 이런 방식이면 오히려 내 조건에선 spherecastall보다 overlapsphere가 낫겠네.. 답변 ㄳㄳ