Unity์˜ ๊ณ„์ธต ๊ตฌ์กฐ ํƒ์ƒ‰๊ณผ Transform ์‚ฌ์šฉ ์ด์œ 

โœ… ๊ฒฐ๋ก 

Unity์—์„œ ์ž์‹ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ํƒ์ƒ‰ํ•  ๋•Œ๋Š”
GameObject๊ฐ€ ์•„๋‹Œ Transform์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

๊ทธ ์ด์œ ๋Š” Unity์˜ ๊ณ„์ธต ๊ตฌ์กฐ๊ฐ€ Transform์„ ๊ธฐ์ค€์œผ๋กœ ๊ตฌ์„ฑ๋˜๊ณ ,
Transform์€ Unity C++ ์—”์ง„์˜ ํ•ต์‹ฌ ๊ณ„์ธต ์ •๋ณด์™€ ์—ฐ๊ฒฐ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.


๐Ÿ” ๊ทผ๊ฑฐ 1: Unity ๊ณ„์ธต ๊ตฌ์กฐ๋Š” Transform์ด ๋‹ด๋‹นํ•œ๋‹ค

Unity์˜ ์˜ค๋ธŒ์ ํŠธ๋“ค์€ ๋ถ€๋ชจ-์ž์‹ ๊ตฌ์กฐ๋กœ ์—ฐ๊ฒฐ๋œ ํŠธ๋ฆฌ(Tree)๋ฅผ ์ด๋ฃฌ๋‹ค.
์ด ๊ตฌ์กฐ๋Š” GameObject๊ฐ€ ์•„๋‹Œ Transform ์ปดํฌ๋„ŒํŠธ์— ์˜ํ•ด ํ˜•์„ฑ๋œ๋‹ค.

  • ๋ชจ๋“  GameObject๋Š” ๋ฐ˜๋“œ์‹œ ํ•˜๋‚˜์˜ Transform์„ ํฌํ•จํ•œ๋‹ค.
  • ์ž์‹ ์˜ค๋ธŒ์ ํŠธ๋“ค์€ Transform์˜ ์ž์‹ ๋ชฉ๋ก์— ๋“ค์–ด๊ฐ„๋‹ค.
  • ์œ„์น˜, ํšŒ์ „, ์Šค์ผ€์ผ ์™ธ์—๋„ ๊ณ„์ธต ๊ตฌ์กฐ๊นŒ์ง€ ๊ด€๋ฆฌํ•œ๋‹ค.

๋”ฐ๋ผ์„œ ๊ณ„์ธต ํƒ์ƒ‰์€ Transform์„ ํ†ตํ•ด์„œ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค.


๐Ÿ” ๊ทผ๊ฑฐ 2: Transform์€ ๊ณ„์ธต ํƒ์ƒ‰ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค

Transform์€ ์ž์‹ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ํƒ์ƒ‰ํ•˜๊ธฐ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

  • transform.GetChild(i)๋กœ i๋ฒˆ์งธ ์ž์‹ ์ ‘๊ทผ
  • transform.childCount๋กœ ์ž์‹ ์ˆ˜ ํ™•์ธ
  • GetComponentsInChildren<T>()๋กœ ์žฌ๊ท€ ํƒ์ƒ‰ ๊ฐ€๋Šฅ

์ด ๊ธฐ๋Šฅ๋“ค์€ GameObject ์ž์ฒด๊ฐ€ ์•„๋‹Œ
Transform์—๋งŒ ์กด์žฌํ•œ๋‹ค.


๐Ÿ” ๊ทผ๊ฑฐ 3: Transform์€ ๋‹จ์ˆœ ์œ„์น˜ ์ •๋ณด๊ฐ€ ์•„๋‹Œ ๊ณ„์ธต ๊ตฌ์กฐ์˜ ํ•ต์‹ฌ์ด๋‹ค

๋งŽ์€ ๊ฐœ๋ฐœ์ž๋“ค์€ Transform์ด ๋‹จ์ˆœํžˆ
์œ„์น˜, ํšŒ์ „, ํฌ๊ธฐ ์ •๋ณด๋ฅผ ๋‹ด๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.

ํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” Unity ์—”์ง„์—์„œ ๊ณ„์ธต ๊ด€๊ณ„๋ฅผ ์ •์˜ํ•˜๋Š” ํ•ต์‹ฌ ์ปดํฌ๋„ŒํŠธ์ด๋‹ค.

  • ๋ถ€๋ชจ ์˜ค๋ธŒ์ ํŠธ์˜ ์œ„์น˜๊ฐ€ ๋ฐ”๋€Œ๋ฉด
    ์ž์‹ ์˜ค๋ธŒ์ ํŠธ๋„ ํ•จ๊ป˜ ์˜ํ–ฅ์„ ๋ฐ›๋Š”๋‹ค.
  • ์ด๋Š” ์˜ค๋ธŒ์ ํŠธ๋“ค์ด Transform ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ
    ๊ฐ•ํ•˜๊ฒŒ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๐Ÿ’ก ์˜ˆ์‹œ: FindChild ๋ฉ”์„œ๋“œ์—์„œ์˜ Transform ํ™œ์šฉ

๋‹ค์Œ์€ ์ž์‹ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ฐพ๋Š” ์˜ˆ์‹œ ์ฝ”๋“œ์ด๋‹ค:

Transform transform = FindChild<Transform>(go, name, recursive);
if (transform == null)
    return null;
return transform.gameObject;
  • Transform์œผ๋กœ ์ž์‹ ํƒ์ƒ‰์„ ์ˆ˜ํ–‰ํ•œ ํ›„
    ํ•ด๋‹น ์˜ค๋ธŒ์ ํŠธ์˜ gameObject๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • ์žฌ๊ท€ ์—ฌ๋ถ€๋‚˜ ์ด๋ฆ„ ์กฐ๊ฑด ๋“ฑ ๋‹ค์–‘ํ•œ ๊ฒฝ์šฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿง  Unity๋Š” ์™œ C++ ๊ธฐ๋ฐ˜์ธ๊ฐ€?

โœ… ๊ฒฐ๋ก 

Unity๋Š” ์šฐ๋ฆฌ๊ฐ€ C#์œผ๋กœ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•˜์ง€๋งŒ,
์—”์ง„ ์ž์ฒด๋Š” ๊ณ ์„ฑ๋Šฅ C++๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค.

๋”ฐ๋ผ์„œ GameObject.transform๋„ ๋‚ด๋ถ€์ ์œผ๋กœ๋Š”
C++ ์ฝ”๋“œ์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ๊ตฌ์กฐ๋‹ค.


๐Ÿ”ง Unity ๊ตฌ์กฐ ์š”์•ฝ

Unity๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ๋กœ ๋˜์–ด ์žˆ๋‹ค:

  1. C++ Native Engine Layer
    • ๋ Œ๋”๋ง, ๋ฌผ๋ฆฌ, ์˜ค๋””์˜ค ๋“ฑ ์„ฑ๋Šฅ์ด ์ค‘์š”ํ•œ ์‹œ์Šคํ…œ์ด ๊ตฌํ˜„๋จ
    • Transform, Rigidbody, Mesh ๋“ฑ์ด ์—ฌ๊ธฐ์—์„œ ๋™์ž‘ํ•จ
  2. C# Scripting Layer
    • ์šฐ๋ฆฌ๊ฐ€ ์ž‘์„ฑํ•˜๋Š” ์ฝ”๋“œ (์˜ˆ: Start(), Update() ๋“ฑ)
    • ์—”์ง„์˜ ๊ธฐ๋Šฅ์„ โ€œ์ œ์–ดโ€ํ•˜๊ณ  โ€œ๋ช…๋ นโ€์„ ๋‚ด๋ฆฌ๋Š” ์—ญํ• 
  3. Interop ๋ฐ”์ธ๋”ฉ Layer (C# โ†” C++)
    • InternalCall, Injected, IL2CPP ๋“ฑ์˜ ๊ธฐ์ˆ ๋กœ
      C#์—์„œ C++ ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•จ

๐Ÿ” ์˜ˆ์‹œ: GameObject.transform ๋‚ด๋ถ€ ๊ตฌํ˜„

Unity C# ๋‚ด๋ถ€์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค:

public Transform transform
{
    [FreeFunction("GameObjectBindings::GetTransform", HasExplicitThis = true)]
    get
    {
        IntPtr intPtr = MarshalledUnityObject.MarshalNotNull(this);
        if (intPtr == (IntPtr)0)
        {
            ThrowHelper.ThrowNullReferenceException(this);
        }
        return Unmarshal.UnmarshalUnityObject<Transform>(get_transform_Injected(intPtr));
    }
}
  • GameObject.transform์€ ๋‹จ์ˆœ ํ”„๋กœํผํ‹ฐ๊ฐ€ ์•„๋‹ˆ๋‹ค.
  • ๋‚ด๋ถ€์ ์œผ๋กœ C++ ์—”์ง„ ํ•จ์ˆ˜ GetTransform์„ ํ˜ธ์ถœํ•œ๋‹ค.
  • MarshalledUnityObject, Unmarshal, Injected๋Š”
    C++ โ†” C# ๊ฐ„ ํฌ์ธํ„ฐ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ „๋‹ฌํ•˜๊ณ  ๋ณ€ํ™˜ํ•˜๋Š” ์žฅ์น˜๋‹ค.

๐Ÿ“ ์ตœ์ข… ์š”์•ฝ

Unity์—์„œ ์˜ค๋ธŒ์ ํŠธ ๊ฐ„์˜ ๊ณ„์ธต ๊ตฌ์กฐ๋Š” Transform์„ ํ†ตํ•ด ๊ตฌํ˜„๋œ๋‹ค.
์ž์‹ ํƒ์ƒ‰ ๋“ฑ ๋ชจ๋“  ๊ณ„์ธต ๊ด€๋ จ ์ž‘์—…์€ Transform์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋ฉฐ,
๊ทธ ์ด์œ ๋Š” Transform์ด Unity C++ ์—”์ง„์˜ ๊ณ„์ธต ๊ตฌ์กฐ ์ค‘์‹ฌ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
๋น„๋ก ์šฐ๋ฆฌ๋Š” C#์œผ๋กœ ์ฝ”๋”ฉํ•˜์ง€๋งŒ,
๋‚ด๋ถ€์ ์œผ๋กœ๋Š” C++ ๊ธฐ๋ฐ˜์˜ ๊ณ ์„ฑ๋Šฅ ์—”์ง„๊ณผ ์ƒํ˜ธ์ž‘์šฉํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.