๋ฐ์ํ
๐ฅ 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์ ์ฐ๋ฉด ๋๋ค๊ณ ๊ทธ๋ฌ๊ธธ๋ ํด๋ดค๋๋..์๋ฒฝํ๋ค ํํ.. ์๋ก์ด๊ฑธ ํ๋ ๋ฐฐ์๊ฐ๋ค.
๋ฐ์ํ
'Unity' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Unity - Input System - InputAction (6) | 2025.08.06 |
---|---|
ํ๋ก์ ํธ ์๊ฐ - ใํ๋์ธ๊ณ ์ตํ์ ๊ถ์ใ (3) | 2025.08.05 |
Unity - Unity Instantiate() ์ค๋ฒ๋ก๋ ์ ๋ฆฌ & ์์์ผ๋ก ์ค์ ํ ๋์ ์ฐจ์ด (2) | 2025.07.28 |
Unity - Invoke() vs Coroutine ๋น๊ต ์ ๋ฆฌ & InvokeRepeating() (2) | 2025.07.28 |
Unity - Unity Coroutine(์ฝ๋ฃจํด) (2) | 2025.07.28 |