๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Unity

AnchoredPosition vs. LocalPosition, Pivot

by ใ…Ž-ใ…Ž 2022. 10. 19.

์œ„์™€ ๊ฐ™์ด ์‚ฌ๊ณผ Image์˜ Anchor๊ฐ€ Text์˜ ์ž์‹์ด๋ฉด์„œ ์™ผ์ชฝ ๋์— ๋ฐฐ์น˜๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ, ์ธ์ŠคํŽ™ํ„ฐ๋ฅผ Normal ๋ชจ๋“œ๋กœ ๋ดค์„ ๋•Œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด Pos X๋Š” Image๊ฐ€ Anchor๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ์— ์žˆ์œผ๋ฏ€๋กœ -2.999985๋กœ ํ‘œ์‹œ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ธ์ŠคํŽ™ํ„ฐ๋ฅผ Debug ๋ชจ๋“œ๋กœ ๋ฐ”๊พธ๋ฉด Local Position์€ -82.34499๋กœ ์ƒ์ดํ•˜๋ฉฐ, Anchored Position์ด Normal ๋ชจ๋“œ์—์„œ Pos X ๊ฐ’์œผ๋กœ ํ‘œ์‹œ๋˜์—ˆ์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. Local Position์€ ๋ถ€๋ชจ์ธ Text์˜ Pivot ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ, ๋ถ€๋ชจ์˜ Pivot ์œ„์น˜์—์„œ๋ถ€ํ„ฐ ๋‚˜์˜ Pivot ์œ„์น˜ ๊ฐ„์˜ ์ฐจ์ด์ด๋‹ค. ๊ทธ๋ž˜์„œ ๋ถ€๋ชจ์˜ Pivot์„ ๋ฐ”๊พธ๊ฑฐ๋‚˜ ๋‚˜์˜ Pivot์„ ๋ฐ”๊พธ๋ฉด ๊ฐ’์ด ๋‹ฌ๋ผ์ง„๋‹ค. Anchored Position์€ ๋‚˜์˜ Anchor ์œ„์น˜๋กœ๋ถ€ํ„ฐ ๋‚˜์˜ Pivot ์œ„์น˜ ๊ฐ„์˜ ์ฐจ์ด์ด๋‹ค.

Pivot

- Pivot์˜ Default ๊ฐ’์€ 0.5, 0.5์ด๊ณ  ์™ผ์ชฝ ์•„๋ž˜๊ฐ€ 0, 0, ์˜ค๋ฅธ์ชฝ ์œ„๊ฐ€ 1, 1์ด๋‹ค.

 

rect

- Local Transform ๊ธฐ์ค€ ์‚ฌ๊ฐํ˜• ๋ฒ”์œ„

 

GetWorldCorners

- RectTransform.GetWorldCorners(Vector3[] fourCornersArray) ๋กœ Local ๊ณต๊ฐ„ ๊ธฐ์ค€์ด๋˜ rect๋ฅผ World ๊ณต๊ฐ„ ๊ธฐ์ค€์œผ๋กœ ๋ณ€ํ™˜ ๊ฐ€๋Šฅ

- Vector3๊ฐ€ ๋„ค ๊ฐœ ์žˆ๋Š” ๋ฐฐ์—ด์„ ๋„ฃ์œผ๋ฉด 0, 1, 2, 3๋ฒˆ์งธ ์š”์†Œ๊ฐ€ ์‹œ๊ณ„ ๋ฐฉํ–ฅ์œผ๋กœ ๊ฐ๊ฐ ์™ผ์ชฝ ์•„๋ž˜, ์™ผ์ชฝ ์œ„, ์˜ค๋ฅธ์ชฝ ์œ„, ์˜ค๋ฅธ์ชฝ ์•„๋ž˜ ๊ผญ์ง“์ ์„ World ๊ณต๊ฐ„ ์ƒ์˜ ์ขŒํ‘œ๋กœ ๋ฐ”๊พธ์–ด์คŒ

- ํ•˜์ง€๋งŒ ๋นˆ Vector3 ๋ฐฐ์—ด์„ ๋„ฃ๊ณ  ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฑฐ์น˜๋ฉด ๋ฐฐ์—ด์ด ๋ณ€ํ™˜๋˜๋Š” ๋ฐฉ์‹์ธ๋ฐ๋‹ค rect์˜ Center๋ผ๋„ ๊ตฌํ•˜๋ ค๊ณ  ํ•˜๋ฉด array[0].x - array[3].x ์ด๋ ‡๊ฒŒ ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์•„๋ž˜ ์ฐธ์กฐ ๊ธ€์ฒ˜๋Ÿผ bounds๋กœ ๋Œ๋ ค๋ฐ›๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ๋งŒ๋“ค๋ฉด ํŽธ๋ฆฌ

private static Vector3[] WorldCorners = new Vector3[4];
public static Bounds GetRectTransformBounds(RectTransform transform)
{
    transform.GetWorldCorners(WorldCorners);
    Bounds bounds = new Bounds(WorldCorners[0], Vector3.zero);
    for (int i = 1; i < 4; ++i)
    {
        bounds.Encapsulate(WorldCorners[i]);
    }
    return bounds;
}

- ์ฐธ์กฐ: https://answers.unity.com/questions/1013011/convert-recttransform-rect-to-screen-space.html

 

Convert RectTransform rect to screen space - Unity Answers

 

answers.unity.com

 

Local Position

- ๋‚˜์˜ Pivot - ๋ถ€๋ชจ์˜ Pivot ์œ„์น˜

 

Anchored Position

- ๋‚˜์˜ Pivot ์œ„์น˜ - ๋‚˜์˜ Anchor ์œ„์น˜

- Anchor๊ฐ€ ๋งŒ์•ฝ Stretch ์ƒํƒœ๋ผ๋ฉด Anchor์˜ ๊ธธ์ด์— Pivot์˜ ๋น„์œจ์ด ๊ณฑํ•ด์ง„ ์œ„์น˜: ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์•„๋ž˜ ์ฐธ์กฐ

 

transform.position

- WorldPosition์—์„œ์˜ Pivot ์œ„์น˜

- RectTransform ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ถ€์ฐฉ๋œ ์˜ค๋ธŒ์ ํŠธ๋„ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ์ถœ๋ ฅ๋จ

  (transform.position==(transform as RectTransform).position)

 

Size Delta

- Anchor ๊ธฐ์ค€ Rect์˜ ์‚ฌ์ด์ฆˆ(Anchor๋กœ๋ถ€ํ„ฐ Rect์˜ ๊ฑฐ๋ฆฌ)

- Anchor๋กœ๋ถ€ํ„ฐ์˜ ๊ฒฐ๊ณผ์ ์ธ ์‚ฌ์ด์ฆˆ ์ฐจ์ด ๊ฐ’๋งŒ ์•Œ ์ˆ˜ ์žˆ์Œ

- Anchor๋กœ๋ถ€ํ„ฐ ์™ผ์ชฝ์—์„œ -100, ์˜ค๋ฅธ์ชฝ์—์„œ +100๋งŒํผ ์œ„์น˜ํ•ด ์žˆ๋‹ค๋ฉด Size Delta์˜ x ๊ฐ’์€ Abs((-100) + (+100)) = 0์ด ๋จ

- ๊ทธ๋ ‡๋“ฏ, Size Delta๊ฐ€ 0, 0์ด๋ผ๊ณ  ํ•˜๋ฉด Rect์˜ ๋„ค ๊ผญ์ง“์ ์ด Anchor์™€ ๋ฐ˜๋“œ์‹œ ์ผ์น˜ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‚˜ ์‚ฌ์ด์ฆˆ๋Š” ๊ฐ™์€ ๊ฒƒ(Anchor์˜ ๋„ค ๊ท€ํ‰์ด๋กœ๋ถ€ํ„ฐ Rect๊นŒ์ง€์˜ ๊ฑฐ๋ฆฌ)

- ํ•˜์ง€๋งŒ Stretch๋œ ์ƒํƒœ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ๊ทธ๋ƒฅ Rect์˜ Size ๊ฐ’

 

 

Anchored Position, Anchor์™€ Pivot์˜ ๊ด€๊ณ„

- Anchor์˜ min X~max X, min Y~max Y์˜ ๊ฑฐ๋ฆฌ์— Pivot์˜ ๋น„์œจ๋กœ ๊ณฑํ•œ ๊ฒƒ๊ณผ Pivot ๊ฐ„์˜ ๊ฐ„๊ฒฉ์ด Anchored Position์ด ๋จ

 

 

๋Œ“๊ธ€