You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
목표: 텔레포트 도착 지점에서 가능한 플레이어가 끼지 않을 자리를 확인합니다.
이것저것 확인해보았으나 트레이스를 남발하거나 맵 데이터를 꺼내서 연산하는 것은 부하가 큰 것으로 확인되어 처음에 생각했던 방법처럼 트레이스를 활용하되 횟수를 최소한으로 낮추는 것이 목표입니다.
그리고 이번에 좌표 선정은 텔레포트를 사용하는 플레이어의 판단에 맡기는 형태로 구상하였습니다.
전제: 최초 트레이스의 충돌 확인 작업에서 벽 안에 들어간 트레이스를 밖으로 빼낸 다음에도 충돌이 확인된 경우
이는 아랫면에 조준한 것 중에 옆면이 BB에 충돌하지 않는 것에 한해 충돌 없음이 보장됩니다.
기본적으로 이 트레이스 길이를 BB의 넓이 만큼 전진시킬 것.
최초 트레이스의 바닥면 normal 값을 기준으로 해당 축의 정면과 양옆면 BB 길이를 각각 합한 좌표를 트레이스하여 결과 좌표에서 벽에서 삐져나온 좌표만큼 뒤로 뺍니다.
이때 선 중 하나라도 AllSolid, StartSolid로 판정되었다면 보정 실패로 간주, 마지막으로 넘어갑니다.
연산 순서: (정면 -> 정면 + 양옆면 -> 양옆면), 한 면을 위한 연산에 5번의 선형 트레이스 사용
normal 값은 오직 정면의 각도를 알아내는 것에 사용합니다. (x, y 중 절댓값이 가장 큰 것, 보통은 차이가 명확하게 갈리지만 울퉁불퉁한 벽이라면 사정이 좀 다를 수 있습니다..)
이후 z축(높이)를 BB의 정면을 합한 상태에서
시야 각도가 양수라면 아래에서 위, 위에서 아래로
반대로 음수라면, 첫번째는 보정했다고 간주하고 아래에서 위만 확인합니다.
StartSolid로 판정되었다면 보정하지 않고 무시합니다.
경우에 따라 벽 안쪽부터 트레이스 될 수 있지만 벽 안쪽에서 시작된 트레이스는 그 벽 안에서는 충돌 판정 되지 않고 다음 벽에서 충돌 판정이 이뤄집니다.
만약 처음 트레이스에서 보정이 이뤄진 상태에서 그 다음 트레이스에서 충돌되었다면 해당 벽 안에서 플레이어가 설 수 있는 높이가 없으므로 보정이 실패했다는 걸로 간주하여 마지막으로 넘어갑니다.
시야 범위는 예외로 적용되는 지형이 있어서 확인이 필요합니다.
BB의 윗면을 1번처럼 확인합니다.
이때 선 중 하나라도 AllSolid, StartSolid로 판정되었다면 보정 실패로 간주, 마지막으로 넘어갑니다.
마지막. 보정 실패 여부를 파악하기 위해 Hull로 최종 좌표를 확인하고 그래도 충돌되었다면 해당 좌표에서 시야 각도에 따라 일정 거리만큼 뒤로 이동한 후에 다시 1로 돌아갑니다. (부하 최소화를 위해 이 작업은 3번까지만 합니다.)
문제 될 요소:
벽이 복잡하게 되어있는 경우: 울퉁불퉁 또는 뾰족한 벽의 경우에 대비해서 마지막 단계에 뒤로 이동한다는 것을 추가했지만 플레이에 자연스럽지 않을 수 있다 생각하고 있습니다.
일단 이번까지만 지금까지의 보정을 따라서 적어볼 생각인데 이번에도 플레이에 문제가 많을 것 같다고 생각되면 아예 좌표 지정 방식이나 컨셉을 타협해 볼 생각입니다.
The text was updated successfully, but these errors were encountered:
목표: 텔레포트 도착 지점에서 가능한 플레이어가 끼지 않을 자리를 확인합니다.
이것저것 확인해보았으나 트레이스를 남발하거나 맵 데이터를 꺼내서 연산하는 것은 부하가 큰 것으로 확인되어 처음에 생각했던 방법처럼 트레이스를 활용하되 횟수를 최소한으로 낮추는 것이 목표입니다.
그리고 이번에 좌표 선정은 텔레포트를 사용하는 플레이어의 판단에 맡기는 형태로 구상하였습니다.
BB: Bounding Box
n + 2차 (작성 중)
전제: 최초 트레이스의 충돌 확인 작업에서 벽 안에 들어간 트레이스를 밖으로 빼낸 다음에도 충돌이 확인된 경우
이는 아랫면에 조준한 것 중에 옆면이 BB에 충돌하지 않는 것에 한해 충돌 없음이 보장됩니다.
이때 선 중 하나라도 AllSolid, StartSolid로 판정되었다면 보정 실패로 간주, 마지막으로 넘어갑니다.
시야 각도가 양수라면 아래에서 위, 위에서 아래로
반대로 음수라면, 첫번째는 보정했다고 간주하고 아래에서 위만 확인합니다.
이때 선 중 하나라도 AllSolid, StartSolid로 판정되었다면 보정 실패로 간주, 마지막으로 넘어갑니다.
마지막. 보정 실패 여부를 파악하기 위해 Hull로 최종 좌표를 확인하고 그래도 충돌되었다면 해당 좌표에서 시야 각도에 따라 일정 거리만큼 뒤로 이동한 후에 다시 1로 돌아갑니다. (부하 최소화를 위해 이 작업은 3번까지만 합니다.)
문제 될 요소:
일단 이번까지만 지금까지의 보정을 따라서 적어볼 생각인데 이번에도 플레이에 문제가 많을 것 같다고 생각되면 아예 좌표 지정 방식이나 컨셉을 타협해 볼 생각입니다.
The text was updated successfully, but these errors were encountered: