ETC/Unity
[Unity/게임수학] 2D 쿼터뷰 공간 Sprite Order (Vector2 수선의 발)
Jade Choe
2024. 5. 7. 03:04
SMALL
[Unity] 2D 쿼터뷰 공간 바닥에 랜덤 스폰하기
개발 진행중인 프로젝트는 2D게임인데, 쿼터뷰 형식으로 되어있다. 3D공간에 물체를 배치하고 Orthographic View로 보여주는게 아니라 각각의 장소가 모두 1장의 Sprite이다. 그렇기 때문에 공간 내에
blog.ysoft.kr
위 글에서 Y축을 기준으로 0~100까지 Layer Order를 줬다.
당연하게도 제대로 안된다.
아래 그림과 같이 각각의 Vector A, B, P가 있다고 가정할 때
점 P에서 선분 BA로 수선의 발을 내린 후, 0~1로 Normalize된 선분 BA와 수선의 발의 접점을 찾는다.
public float FindShortest(Vector2 point, Vector2 lineA, Vector2 lineB)
{
Vector2 BP = point - lineB;
Vector2 BA = lineA - lineB;
float _sqrBA = BA.sqrMagnitude; // BA 거리
float _dot = Vector2.Dot(BP, BA);
float _normalized = _dot / _sqrBA;
if(_normalized < .0f)
{
// 가장 가까운 점은 B
return BP.magnitude;
}
else if(_normalized > 1.0f)
{
// 가장 가까운 점은 A
return (point - lineA).magnitude;
}
Vector2 _shortest = lineB + _normalized * BA;
return (point - _shortest).magnitude;
}
다만, Left - Bottom - Right의 각도가 90도가 넘으므로 한쪽 변만 수행하면 안되고...
네 변에 전부 수행 후 최단거리를 비교해서 다시 한번 계산해줘야 한다.
계산을 다섯번이나 해야 하니 다른 방법을 찾아보도록 하자....
BIG