작성
·
8
0
AddMarker를 했는데 east와 west는 잘되는데, north/south가 거꾸로 인식되는데 어떻게 해야할까요?
public void UpdateMarkers()
{
for (int i = ActiveMarkers.Count - 1; i >= 0; i--)
{
MarkerInfo markerInfo = ActiveMarkers[i];
if (markerInfo.TargetTransform == null)
{
Destroy(markerInfo.MarkerUI.gameObject);
ActiveMarkers.RemoveAt(i);
continue;
}
float heading = PlayerTransform.eulerAngles.y;
Vector3 directionToTarget = markerInfo.TargetTransform.position - PlayerTransform.position;
float distance = Vector3.Distance(markerInfo.TargetTransform.position, PlayerTransform.position);
float targetAngle = Mathf.Atan2(-directionToTarget.x, directionToTarget.z) * Mathf.Rad2Deg; // 각도 생성
float relativeAngle = (heading - targetAngle + 360.0f) % 360.0f;
float normalizedAngle = relativeAngle / 360.0f; //
float xPosition = Mathf.Lerp(-CompassWidth, CompassWidth, normalizedAngle);
markerInfo.MarkerUI.anchoredPosition = new Vector2(xPosition, markerInfo.MarkerUI.anchoredPosition.y);
markerInfo.MarkerText.text = string.Format("{0:0.0} m", distance);
}
}
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. 손봉호 님.
제시해주신 코드를 바탕으로 보았을 때, North
와 South
가 거꾸로 인식되는 문제는 주로 방향 벡터에 대한 처리가 잘못되었을 가능성이 높습니다.
현재 UpdateMarkers
함수에서 방향을 계산하는 부분을 살펴보면, 방향을 계산할 때 x
와 z
위치의 차이를 이용하여 각도를 구하고 있습니다. 여기서 잘못된 결과가 발생할 수 있는 요인은 방향 벡터의 x
축 변화가 역방향으로 계산되는 것입니다.
float targetAngle = Mathf.Atan2(-directionToTarget.x, directionToTarget.z) * Mathf.Rad2Deg;
위 코드에서 directionToTarget.x
의 값에 음수를 곱하고 있기 때문에, North
와 South
의 방향이 뒤집혀 나타날 수 있습니다. 대신 directionToTarget.z
에 음수를 곱하여 시도해 보시는 것은 어떨까요?
float targetAngle = Mathf.Atan2(directionToTarget.x, -directionToTarget.z) * Mathf.Rad2Deg;
이와 같은 변경이 North
와 South
의 표시 문제를 해결할 수 있을 것입니다.
관련된 다른 질문도 참고해 보시면 좋겠습니다:
- 캐릭터 이동 구현 rotation 값 변경 - 방향 전환에 어려움을 겪는 사용자들이 작성한 여러 사례와 해결 과정들을 확인할 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
위와 같이 하니 East,와 West가 거꾸로 인식이 되고 있는데 어떻게 해야할까?