유니티 실행단계 중 OnEnable 에서 박스캐스트를 두개 쓰는 상황입니다.
하나의 박스캐스트(hitTest_1)는 정상 동작하는데, 다른 하나의 박스캐스트(hitTest_2)는 문제가 있습니다.
벡터 변수 (Debug.Log로 X,Y,Z값 확인 완료)를 박스의 위치로 하여도 0,0,0으로 되어버립니다.
그 외의 사항(박스의 크기, 방향, 길이 등)은 문제 없이 들어가고요.
// 정상 작동
hitTest_1 = Physics.BoxCast
(boxcastBoxPosition_1,
boxcastBoxSize_1 / 2,
transform.up,
out hit_1, transform.rotation, 1000f,);
// 오작동. (boxcastBoxPosition_2의 값과 상관없이 0,0,0을 박스 위치로 함)
hitTest_2 = Physics.BoxCast
(boxcastBoxPosition_2,
boxcastBoxSize_2 / 2,
transform.up,
out hit_2, transform.rotation, 1000f);
여기서 hitTest_1과 hitTest_2의 줄 순서를 바꿔도,
hitTest_2 의 boxcastBoxPosition_2 를 boxcastBoxPosition_1으로 하여도 동일합니다.
(두 Vector값 모두 Debug.Log() 로는 올바르게 나옵니다.)
이 현상의 원인은 무엇일까요?
유니티 엔진 자체의 문제? 코드 내 다른 부분의 문제? 박스캐스트 함수 자체의 문제?
비슷한 사례를 찾지 못하여 여기에 적어봅니다. 원인을 모르겠습니다.
스크립트 좀더 올려놔야 알거같은데 일단, 2와 1의 위치를 다르게 해도 2만 문제가 발생한다는 것인지? 아니면 뒷줄에서 실행되는 애만 문제가 생긴다는 것인지?
디버그 로그말고 디버깅으로 빨간점 찍어서 boxcastBoxPosition_2 실행할때 원하는 좌표가 찍혀서 나오는지 확인했음?
저렇게 많이 사용되는건 버그가 아직도 남아 있을리가 없음. 본인이 무언가 실수를 했다고 가정하고 찾아보는게 좋아보임
2와 1의 위치를 다르게 해도 2만 문제가 발생합니다. 빨간 점은 아니고 기즈모 박스로 또다른 박스캐스트를 테스트한 적이 있었는데, 기즈모 상에서는 정상적으로 동작하더라고요 (얘도 OnEnable로 갔을 때는 문제가 있었습니다.)
말씀대로 제 코드의 문제일 가능성이 제일 높으니까, 코드를 좀 더 봐야할 거 같아요.
테스트 방법에 문제가 있을수도 있음. boxcastBoxPosition_2 여기 실행되는 줄에 빨간점 찍고 디버깅 돌려서 원하는 좌표가 찍히는게 맞는지 확인해보셈.
아, 원인을 찾은 거 같아요. boxcastBoxPosition_2 = new Vector3 (clone.transform.position.x, clone.transform.position.y - 500, clone.transform.position.z); 이렇게 만들었는데, 빨간점 찍고 돌려본 좌표 중 y값이 -500이 반영되지 않은 값으로 출력되네요. 이러면 해당 박스캐스트의 탐지가 정상적으로 이루어지지 않는 상황이니, 이해가 됩니다. (If your box cast starts already overlapping with the ground, it won't detect a hit with the ground.)
빨간점의 중요성을 알게되었다면 방금 소비한 시간은 아깝지 않은 시간이 된거임.
미리 y값에 대한 연산을 해놓으면 되지 않을까 생각하여, 그렇게 해볼까 합니다. 댓글 감사합니다!
슬프게도, boxcastBoxPosition_2 에 원하는 좌표가 찍히게 해도 문제 해결은 되지 않았습니다. While문으로 돌리는 과정의 문제일지도 모르겠습니다...
디버깅 버튼 옆에 화살표 누르면서 어디서 문제가 터지는지 확인해보셈.
boxcastBoxSize_2 크기를 (480,420,120)으로 하였을 때 boxcastBoxPosition_2의 값이 '박스캐스트의 박스가 원점에서 시작했을 때 감지되는 범위'에 들어 갈 때 BoxCast의 bool값이 False에서 True로 바뀝니다. 이때 boxcastBoxPosiotion_2과 clone.transform.position의 값은 동일합니다.
본래는 이 조건으로 했을 때, 항상 True로 나와야 합니다. 해당 게임오브젝트을 따라다니며 박스캐스트가 진행되니까요. 원인은 모르겠지만, boxcastBoxPosition_2의 값과는 별개로, 박스캐스트가 진행되는 거 같아요.
문제를 찾았으니 해결해보셈
앞뒤 내용 다 알아도 고민을 해야할판인데 앞뒤 내용 모른 상태로 텍스트로만 특정 결과만 설명들으니 뭔 상황인지 알 수가 없음.
이것저것 해봐야겠습니다. 두리뭉실하고 부족한 설명에도 친절한 댓글 감사합니다.
근성으로..!