// 튜토리얼 화살표를 배치하는 메서드
public void Place(RectTransform target, bool placeOnTop)
{
// 타겟의 실제 높이 계산
Vector3[] targetCorners = new Vector3[4];
target.GetWorldCorners(targetCorners);
float actualTargetHeight = targetCorners[1].y - targetCorners[0].y;
// 화살표의 실제 높이 계산
Vector3[] indicatorCorners = new Vector3[4];
m_RectTransform.GetWorldCorners(indicatorCorners);
float actualIndicatorHeight =
Mathf.Abs(indicatorCorners[1].y - indicatorCorners[0].y);
// 간격 계산
float margin = 0f;
float indicatordist = (actualTargetHeight / 2f) +
(actualIndicatorHeight / 2f) + margin;
// 타겟의 정중앙 위치 계산
_targetPosition = (targetCorners[0] + targetCorners[2]) / 2f;
Vector3 position = _targetPosition;
Quaternion rotation;
if(placeOnTop)
{
position.y += indicatordist;
rotation = Quaternion.Euler(0, 0, 180.0f);
}
else
{
position.y -= indicatordist;
rotation = Quaternion.identity;
}
m_RectTransform.gameObject.SetActive(true);
m_RectTransform.position = position;
m_RectTransform.localRotation = rotation;
}
Canvas Scaler의 영향을 받지 않고, 어떤 해상도에서도 튜토리얼 화살표를 정확한 위치에 일관되게 표시하는 데 성공했습니다. 이 과정을 통해 반응형 UI 와 좌표계 처리에 대한 실질적인 이해도를 크게 향상시킬 수 있었습니다.