SMALL
위 글에서 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
'ETC > Unity' 카테고리의 다른 글
[Unity] Jenkins, Gitea를 활용해 유니티 자동빌드하기 - 2 - (0) | 2024.05.20 |
---|---|
[Unity] Jenkins, Gitea를 활용해 유니티 자동빌드하기 - 1 - (0) | 2024.05.20 |
[C#] The requested operation caused a stack overflow (0) | 2024.04.22 |
[Unity] 2D 쿼터뷰 공간 바닥에 랜덤 스폰하기 (0) | 2024.04.04 |
[Unity] Script에 의존하지 않고 스토리 씬 구현하기 (0) | 2024.03.04 |