아크에 의한 2D 충돌 감지를 구현해야합니다. 나는 선수 (검은 점)와 적 (붉은 점)을 가지고있다. 플레이어는 어떤 방향으로 공격 할 수 있으며 그의 히트 영역은 120도 (녹색 선이 표시)와 특정 반경 (검은 색 곡선)입니다. 호에서의 2D 충돌 감지
어떻게 탐지를 달성하기 위해?플레이어와 적 사이의 각도를 계산하는 코드를 작성했지만 플레이어의 방향 벡터를 사용하여 호 안에 있는지 확인하는 방법을 이해할 수 없습니다.
아크에 의한 2D 충돌 감지를 구현해야합니다. 나는 선수 (검은 점)와 적 (붉은 점)을 가지고있다. 플레이어는 어떤 방향으로 공격 할 수 있으며 그의 히트 영역은 120도 (녹색 선이 표시)와 특정 반경 (검은 색 곡선)입니다. 호에서의 2D 충돌 감지
어떻게 탐지를 달성하기 위해?플레이어와 적 사이의 각도를 계산하는 코드를 작성했지만 플레이어의 방향 벡터를 사용하여 호 안에 있는지 확인하는 방법을 이해할 수 없습니다.
적의 각도와 거리를 계산하십시오. 그들이 범위 내에 있는지 확인하기 위해 이것을 사용하십시오.
데카르트 좌표를 사용하고 있으므로 사각형이있는 영역이므로 방사형 좌표로 변환하면 문제가 간단 해집니다. 새로운 정보
플레이어의 방향 벡터이다.
벡터 B의 길이가 너무 길지 않은지 확인하십시오. 각도가 60 개도 (반 120)을 적 범위 인 경우
(| A.B |/| | ||의 B) ACOS :
이어서 벡터 사이의 각도는 다음과 같이 주어진다.
감사합니다. 접근 방식이 내 것이 분명합니다. 그것은 작동합니다. –
먼저 플레이어는 방향, 예를 들어 2D 벡터를 가져야합니다. 간단히 말해 첫 번째 녹색 선 = 각은 다른 녹색 선과의 각도입니다.
당신은이 검사 수행해야 적의와 플레이어 사이의 거리가 반경보다 작은 경우하지 않을 경우,
아이디어로 충분해야합니다. 도움이 되셨을 것입니다.
단위 길이 벡터가 "앞으로"라고 가정 해 봅시다. 그리고 잠재적 인 목표를 가리키는 단위 길이 벡터가 있다고 가정 해 봅시다. target이 ark 안에 있다면,
dot(forwardVector, targetVector) >= cosf(arcAngle/2)
.
벡터가 단위 길이가 아닌 경우 물론 작동하지 않습니다. 목표물이 필요한 각도 안에 있는지 확인합니다.
필요한 거리 내에 있는지 확인하는 것은 간단하고 꽤 많이 squaredLength(targetPosition - playerPosition) <= arkDistance*arkDistance
입니다. 여기에서 squaredLength는 dot(vector, vector)
입니다.
커브와 녹색 선의 길이 사이에 관계가 있습니까? –
녹색 선은 각도를 나타냅니다. 커브는 실제 반지름입니다 –
예, 플레이어가이 호를 회전시킬 수 있습니다 –