๋ฐ˜์‘ํ˜•

๐ŸŽฅ Unity์˜ ๋ฉ”์ธ ์นด๋ฉ”๋ผ(Main Camera)๋ž€?

โœ… 1. ๊ธฐ๋ณธ ์ •์˜

  • Unity ์”ฌ(Scene)์—์„œ **ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๋ณด๋Š” ์‹œ์ (Viewport)**์„ ๊ฒฐ์ •ํ•˜๋Š” ๋ Œ๋”๋ง ์นด๋ฉ”๋ผ
  • ๊ธฐ๋ณธ์ ์œผ๋กœ Main Camera ํƒœ๊ทธ๋ฅผ ๊ฐ€์ง„ GameObject๋กœ ์ž๋™ ์ƒ์„ฑ๋จ
  • Camera.main ์œผ๋กœ ์‰ฝ๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Œ (GameObject.FindWithTag("MainCamera")์˜ ์„ฑ๋Šฅ ์ตœ์ ํ™” ๋ฒ„์ „)

โœ… 2. Camera ์ฃผ์š” ์„ค์ •

์†์„ฑ ์„ค๋ช…
Clear Flags ๋ฐฐ๊ฒฝ์„ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ• ์ง€ ๊ฒฐ์ • (Skybox, Solid Color, Depth Only, Don't Clear)
Culling Mask ์–ด๋–ค ๋ ˆ์ด์–ด์˜ ์˜ค๋ธŒ์ ํŠธ๋งŒ ๋ Œ๋”๋งํ• ์ง€ ์„ ํƒ
Projection ์นด๋ฉ”๋ผ ํˆฌ์˜ ๋ฐฉ์‹ (Perspective: ์›๊ทผ, Orthographic: ํ‰๋ฉด)
Field of View ์‹œ์•ผ๊ฐ (Perspective์ผ ๋•Œ๋งŒ ์ ์šฉ)
Clipping Planes ์นด๋ฉ”๋ผ๊ฐ€ ๋ Œ๋”๋งํ•  ์ตœ์†Œ/์ตœ๋Œ€ ๊ฑฐ๋ฆฌ
Depth ์—ฌ๋Ÿฌ ์นด๋ฉ”๋ผ๊ฐ€ ์žˆ์„ ๋•Œ ๊ทธ๋ฆฌ๋Š” ์ˆœ์„œ (๋†’์„์ˆ˜๋ก ์œ„์— ๊ทธ๋ ค์ง)
Target Texture RenderTexture์— ์ถœ๋ ฅํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉ (์˜ˆ: ํฌํƒˆ, CCTV ํšจ๊ณผ)

โœ… 3. ์นด๋ฉ”๋ผ ์ œ์–ด ์˜ˆ์‹œ

๐ŸŽฎ ํ”Œ๋ ˆ์ด์–ด ๋”ฐ๋ผ๊ฐ€๊ธฐ

public class FollowCamera : MonoBehaviour
{
    public Transform target;
    public Vector3 offset;

    void LateUpdate()
    {
        if (target != null)
            transform.position = target.position + offset;
    }
}

๐ŸŽž ์นด๋ฉ”๋ผ ํ”๋“ค๊ธฐ (Shake)

public IEnumerator CameraShake(float duration, float magnitude)
{
    Vector3 originalPos = transform.localPosition;

    float elapsed = 0f;
    while (elapsed < duration)
    {
        float x = Random.Range(-1f, 1f) * magnitude;
        float y = Random.Range(-1f, 1f) * magnitude;

        transform.localPosition = new Vector3(x, y, originalPos.z);
        elapsed += Time.deltaTime;
        yield return null;
    }

    transform.localPosition = originalPos;
}

โœ… 4. ๋ฉ”์ธ ์นด๋ฉ”๋ผ ๊ด€๋ จ ์‹ค์ „ ์˜ˆ์‹œ

์˜ˆ์‹œ ์„ค๋ช…
2D ๊ฒŒ์ž„ Orthographic ํˆฌ์˜ ์‚ฌ์šฉ, ํ”Œ๋ ˆ์ด์–ด๋ฅผ ๋”ฐ๋ผ๋‹ค๋‹ˆ๋ฉฐ ํ”๋“ค๋ฆผ ์—†์Œ
3D ๊ฒŒ์ž„ Perspective ํˆฌ์˜ ์‚ฌ์šฉ, ์ž์œ  ์‹œ์  ํšŒ์ „, ์คŒ ์ธ/์•„์›ƒ
๋ฏธ๋‹ˆ๋งต ๋ณ„๋„ ์นด๋ฉ”๋ผ ์‚ฌ์šฉ + RenderTexture
ํฌํƒˆ/๊ฑฐ์šธ ์นด๋ฉ”๋ผ + RenderTexture + RawImage ์‚ฌ์šฉ

โœ… 5. ์ž์ฃผ ํ•˜๋Š” ์‹ค์ˆ˜

  • ์นด๋ฉ”๋ผ๊ฐ€ ์”ฌ์— ๋‘ ๊ฐœ ์ด์ƒ ์žˆ์„ ๋•Œ, Camera.main์€ ๊ฐ€์žฅ ๋จผ์ € ์ฐพ์€ MainCamera ํƒœ๊ทธ๋งŒ ์‚ฌ์šฉํ•จ → ๋ช…ํ™•ํ•œ ์ฐธ์กฐ ๊ถŒ์žฅ
  • ์นด๋ฉ”๋ผ Depth ์„ค์ • ์•ˆ ํ•ด์„œ UI์šฉ ์นด๋ฉ”๋ผ๊ฐ€ ๊ฒŒ์ž„ ์”ฌ์„ ๋ฎ์–ด๋ฒ„๋ฆฌ๋Š” ๊ฒฝ์šฐ ๋ฐœ์ƒ
  • ํด๋ฆฌํ•‘ ๊ฑฐ๋ฆฌ ์กฐ์ • ์‹คํŒจ → ๋„ˆ๋ฌด ๋ฉ€๊ฑฐ๋‚˜ ๊ฐ€๊นŒ์šด ๋ฌผ์ฒด๊ฐ€ ์•ˆ ๋ณด์ด๋Š” ๊ฒฝ์šฐ

๐Ÿง  ๋งˆ๋ฌด๋ฆฌ ์ •๋ฆฌ

๊ฐœ๋… ๊ธฐ์–ต ํฌ์ธํŠธ
Main Camera ํƒœ๊ทธ Camera.main ์ ‘๊ทผ ๋Œ€์ƒ
Projection ์„ค์ • 2D: Orthographic / 3D: Perspective
์ด๋™ LateUpdate๋กœ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋”ฐ๋ผ๊ฐ€๊ธฐ
๋‹ค์ค‘ ์นด๋ฉ”๋ผ Depth, Culling Mask, RenderTexture ํ™œ์šฉ
์ตœ์ ํ™” ๋„ˆ๋ฌด ๋งŽ์€ ์นด๋ฉ”๋ผ ํ™œ์„ฑํ™”๋Š” ์„ฑ๋Šฅ ์ €ํ•˜ ๊ฐ€๋Šฅ

 

 

๐ŸŽฏ 3D์—์„œ Orthographic ์นด๋ฉ”๋ผ๋ฅผ ์“ฐ๋ฉด?

โœ… ํ•ต์‹ฌ ํšจ๊ณผ

  • **์›๊ทผ๊ฐ(Perspective)**์ด ์—†์–ด์ง„๋‹ค
  • ์นด๋ฉ”๋ผ์™€์˜ ๊ฑฐ๋ฆฌ์— ์ƒ๊ด€์—†์ด ๋ชจ๋“  ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ๊ฐ™์€ ํฌ๊ธฐ๋กœ ๋ณด์ธ๋‹ค
  • ๋ฉ€๋ฆฌ ์žˆ๋Š” ๋ฌผ์ฒด๋„ ์ž‘์•„์ง€์ง€ ์•Š์Œ
  • ํˆฌ์‹œ ์™œ๊ณก ์—†์Œ → ๋งˆ์น˜ 2D์ฒ˜๋Ÿผ ๋ณด์ด๋Š” 3D

๐Ÿ‘€ ๋น„๊ต ์˜ˆ์‹œ

ํ•ญ๋ชฉ Perspective (์›๊ทผ) Orthographic (์ง๊ต)
๊ฐ€๊นŒ์šด ๋ฌผ์ฒด ํฌ๊ฒŒ ๋ณด์ž„ ๋™์ผํ•˜๊ฒŒ ๋ณด์ž„
๋จผ ๋ฌผ์ฒด ์ž‘๊ฒŒ ๋ณด์ž„ ๋™์ผํ•˜๊ฒŒ ๋ณด์ž„
์‹œ์•ผ๊ฐ Field of View ์„ค์ • Size๋กœ ๋ณด๊ธฐ ๋ฒ”์œ„ ์„ค์ •
๋Œ€ํ‘œ ์‚ฌ์šฉ ์ผ๋ฐ˜ 3D ๊ฒŒ์ž„, FPS, 3์ธ์นญ ๋“ฑ ์ „๋žต ์‹œ์ , ๊ฑด์ถ• ์‹œ๋ฎฌ, ํผ์ฆ, ๋“ฑ๊ฐ ๋ทฐ ๊ฒŒ์ž„ ๋“ฑ
 

๐ŸŽฎ ์‹œ๊ฐ์  ์ฐจ์ด ์˜ˆ์‹œ

  • Perspective
    ์บ๋ฆญํ„ฐ ์•ž์— ์žˆ๋Š” ์ ์€ ํผ์งํ•˜๊ฒŒ, ๋ฉ€๋ฆฌ ์žˆ๋Š” ์ ์€ ์ž‘๊ฒŒ ๋ณด์ž„ → ์ž์—ฐ์Šค๋Ÿฌ์šด ํ˜„์‹ค ๋А๋‚Œ
    ์˜ˆ: FPS, RPG
  • Orthographic
    ์•ž์— ์žˆ๋Š” ์ ์ด๋“ , ๋ฉ€๋ฆฌ ์žˆ๋Š” ์ ์ด๋“  ํฌ๊ธฐ๊ฐ€ ๋˜‘๊ฐ™์ด ๋ณด์ž„ → ๊นŠ์ด ๊ตฌ๋ถ„์ด ์—†์Œ
    ์˜ˆ: ์ „ํ†ต์  RTS, ์Šคํƒ€๋“€๋ฐธ๋ฆฌ ๊ฐ™์€ ํƒ‘๋ทฐ, ๊ฑด์ถ• ํ”„๋ฆฌ๋ทฐ, ์—๋””ํ„ฐ ํˆด

๐Ÿงช Unity ์‹ค์Šต: ์ „ํ™˜ ๋ฐฉ๋ฒ•

Camera.main.orthographic = true;      // ์ง๊ต ํˆฌ์˜ ๋ชจ๋“œ๋กœ ์ „ํ™˜
Camera.main.orthographicSize = 5f;    // ๋ณด์ด๋Š” ์˜์—ญ ๋ฒ”์œ„ ์กฐ์ •

๐Ÿง  ์–ธ์ œ Orthographic์„ ์“ฐ๋ฉด ์ข‹์„๊นŒ?

์“ฐ๋ฉด ์ข‹์€ ๊ฒฝ์šฐ ์ด์œ 
๋“ฑ๊ฐ๋ทฐ ๊ฒŒ์ž„ (ex: ์‹œ๋ฎฌ๋ ˆ์ด์…˜, ํƒ‘๋ทฐ ํผ์ฆ) ๋ชจ๋“  ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๋™์ผํ•œ ํฌ๊ธฐ๋กœ ์ •๋ฐ€ํ•˜๊ฒŒ ๋ณด์—ฌ์ฃผ๊ณ  ์‹ถ์„ ๋•Œ
๊ฑด์ถ•/์—๋””ํ„ฐ ํˆด ์ •ํ™•ํ•œ ์œ„์น˜ ๋น„๊ต์™€ ๊ฑฐ๋ฆฌ๊ฐ ์—†๋Š” ์ž‘์—…์ด ํ•„์š”ํ•  ๋•Œ
2.5D ๊ฒŒ์ž„ 3D ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์ง€๋งŒ ์นด๋ฉ”๋ผ ๋ทฐ๋Š” 2D์ฒ˜๋Ÿผ ๊ณ ์ •ํ•  ๋•Œ

 


โœ… ์š”์•ฝ

  • Orthographic์€ ์›๊ทผ์ด ์—†๋Š” ํ‰๋ฉด์  ์‹œ์ 
  • 3D ์”ฌ์—์„œ๋„ 2D์ฒ˜๋Ÿผ ์—ฐ์ถœ ๊ฐ€๋Šฅ
  • ๊ฐ์ฒด๊ฐ€ ์นด๋ฉ”๋ผ์—์„œ ๋ฉ€์–ด์ ธ๋„ ํฌ๊ธฐ ๋ณ€ํ™” ์—†์Œ
  • 2D UI ๋А๋‚Œ์ด๋‚˜ ๋“ฑ๊ฐ๋ทฐ ๊ฒŒ์ž„์— ์ ํ•ฉ

 

์‚ฌ์‹ค ์ด๊ฑธ ์ž‘์„ฑํ•˜๋Š”๊ฑด ์ด๋ฒˆ์— ๊ถ์ˆ˜์˜ ์ „์„ค ๋ชจํ‹ฐ๋ธŒ๋กœ 2.5D ๊ฒŒ์ž„์„ ๋งŒ๋“ค์—ˆ์–ด์•ผ ํ–ˆ๋Š”๋ฐ ์–ด๋–ป๊ฒŒํ•ด๋„ ์ž˜ ์•ˆ๋์—ˆ๋‹ค..๊ทธ๋Ÿฌ๋‹ค๋ณด๋‹ˆ 3D ๋ฉ”์ธ ์นด๋ฉ”๋ผ์—์„œ Orhographic์„ ์“ฐ๋ฉด ๋œ๋‹ค๊ณ  ๊ทธ๋Ÿฌ๊ธธ๋ž˜ ํ•ด๋ดค๋”๋‹ˆ..์™„๋ฒฝํ–ˆ๋‹ค ํ—ˆํ—ˆ.. ์ƒˆ๋กœ์šด๊ฑธ ํ•˜๋‚˜ ๋ฐฐ์›Œ๊ฐ„๋‹ค.

์™ผ์ชฝ์€ Projection - Perspective ์˜ค๋ฅธ์ชฝ์€ Projection - Orhograpihc

 

๋ฐ˜์‘ํ˜•