๐ŸŽฎ Unity6๋กœ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋Š” 2D ์„œ๋ฒ„ ๋ฐฉ์–ด ๊ฒŒ์ž„ ๊ฐœ๋ฐœ๊ธฐ (1) - Computer Survival

5P2RS5ยท2025๋…„ 12์›” 10์ผ

์ปดํ“จํ„ฐ ์‚ด๋ฆฌ๊ธฐ

๋ชฉ๋ก ๋ณด๊ธฐ
5/8
post-thumbnail

ํƒ€์ผ๋งต ๊ตฌ์„ฑ๊ณผ ๊ธฐ๋ณธ ํ”Œ๋ ˆ์ด์–ด, ์Šคํ…Œ์ด์ง€ ๊ตฌ์กฐ ๋งŒ๋“ค๊ธฐ

์˜ค๋žœ๋งŒ์— Unity ๊ฐœ๋ฐœ์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋ฉด์„œ, ์˜ˆ์ „์— ๋งŒ๋“ค๋˜ โ€˜์ปดํ“จํ„ฐ ๋ฐ”์ด๋Ÿฌ์Šค ์ƒ์กด / ์„œ๋ฒ„ ๋ณดํ˜ธโ€™ ๊ฒŒ์ž„์„ Unity6 ๊ธฐ์ค€์œผ๋กœ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ์ œ์ž‘ํ•˜๊ณ  ์žˆ๋‹ค.

์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” ๊ธฐ๋ณธ ํ”„๋กœ์ ํŠธ ์„ค์ •๋ถ€ํ„ฐ 3๊ฐœ์˜ ์Šคํ…Œ์ด์ง€ ํƒ€์ผ๋งต ๊ตฌ์„ฑ, ํ”Œ๋ ˆ์ด์–ด ์ด๋™ ์„ค์ •, ๊ทธ๋ฆฌ๊ณ  ํƒ€์ผ๋งต์—์„œ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๊ฐ€๋ ค์ง€๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ๊นŒ์ง€ ์ •๋ฆฌํ•ด๋ณธ๋‹ค.

1. ํ”„๋กœ์ ํŠธ ์„ค์ • & Input System ์ ์šฉ

Unity6์—์„œ ์ƒˆ Input System์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๊ธฐ์กด ๋ฐฉ์‹(Input.GetAxisRaw)์„ ์‚ฌ์šฉํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

InvalidOperationException:
You are trying to read Input using the UnityEngine.Input class,
but you have switched active Input handling to Input System package

์ฆ‰, Input System์œผ๋กœ ์ „ํ™˜ํ–ˆ์œผ๋ฉด Player Input ๊ธฐ๋ฐ˜์œผ๋กœ ์ž…๋ ฅ์„ ๋ฐ›์•„์•ผ ํ•œ๋‹ค.

โœ” ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• ์š”์•ฝ

  1. PlayerInput ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€
  2. Input Actions์—์„œ Move ์•ก์…˜ ์ƒ์„ฑ
  3. C# PlayerMovement ์Šคํฌ๋ฆฝํŠธ์—์„œ OnMove(InputValue value) ํ˜•ํƒœ๋กœ ๊ฐ’ ๋ฐ›์•„์˜ค๊ธฐ
  4. Update ๋Œ€์‹  ์ž…๋ ฅ ์ฝœ๋ฐฑ์œผ๋กœ ์ด๋™ ์ ์šฉ

PlayerMovement.cs

using UnityEngine;
using UnityEngine.InputSystem;

public class PlayerMovement : MonoBehaviour
{
    public float speed = 5f;
    private Rigidbody2D rb;
    private Vector2 moveInput;
    private Animator animator;
    private SpriteRenderer sprite;

    private void Awake()
    {
        rb = GetComponent<Rigidbody2D>();
        animator = GetComponent<Animator>();
        sprite = GetComponent<SpriteRenderer>();
    }

    public void OnMove(InputValue value)
    {
        moveInput = value.Get<Vector2>();
    }

    private void FixedUpdate()
    {
        rb.linearVelocity = moveInput * speed;

        // ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ „ํ™˜
        float currentSpeed = moveInput.magnitude;
        animator.SetFloat("Speed", currentSpeed);

        // ์ขŒ์šฐ ๋ฐ˜์ „ (FlipX)
        if (moveInput.x != 0)
        {
            sprite.flipX = moveInput.x > 0;
        }
    }
}

2. 2D ํƒ€์ผ๋งต ์ƒ์„ฑ & ๋งต ๊ตฌ์กฐ ์„ค๊ณ„

์ด ๊ฒŒ์ž„์€ ์ค‘์•™์˜ ์„œ๋ฒ„๋ฅผ ํƒ€์›Œ๋””ํŽœ์Šคํ•˜๋Š” ๊ฒŒ์ž„์ด๋‹ค.

2.1 ํƒ€์ผ๋งต ์ƒ์„ฑ ๊ณผ์ •

โœ” 1) Tilemap ์ƒ์„ฑ
Hierarchy โ†’ Create โ†’ 2D โ†’ Tilemap โ†’ Rectangular
โœ” 2) Tile Palette ์ƒ์„ฑ
Window โ†’ 2D โ†’ Tile Palette
โœ” 3) png ํŒŒ์ผ๋กœ ํƒ€์ผ ์ƒ์„ฑ
Tile Palette์— png ํŒŒ์ผ ๋„ฃ๊ธฐ โ†’ asset ํŒŒ์ผ ์ƒ์„ฑ
โœ” 4) ํƒ€์ผ๋งต ์ƒ‰์น ํ•˜๊ธฐ
Tile Palette์—์„œ Box Fill ๋„๊ตฌ๋กœ ์žก๊ณ  ๋“œ๋ž˜๊ทธํ•˜๋ฉด ์‚ฌ๊ฐํ˜• ์˜์—ญ ํ•œ ๋ฒˆ์— ์ƒ‰์น  ๊ฐ€๋Šฅ.

3. โš ๏ธ ํƒ€์ผ ์‚ฌ์ด ๋นˆํ‹ˆ(ํ‹ˆ)์ด ์ƒ๊ธฐ๋Š” ํ˜„์ƒ

ํƒ€์ผ๋งต ์‚ฌ์ด์— ๋นˆ ๊ณต๊ฐ„์ด ์ƒ๊ธฐ๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ ํƒ€์ผ๋งต์„ ์น ํ–ˆ๋Š”๋ฐ ํƒ€์ผ ์‚ฌ์ด์— 1px ์ •๋„์˜ ๋นˆํ‹ˆ์ด ์ƒ๊ธด๋‹ค๋ฉด ๋‹ค์Œ์ด ์›์ธ์ผ ํ™•๋ฅ ์ด ๋งค์šฐ ๋†’๋‹ค.

โœ” ํ•ด๊ฒฐ ์ฒดํฌ๋ฆฌ์ŠคํŠธ

์Šคํ”„๋ผ์ดํŠธ Filter Mode - Point(no filter)
Pixel Per Unit - ํƒ€์ผ ํฌ๊ธฐ์™€ ๋™์ผํ•˜๊ฒŒ ์„ค์ •

4. ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ํƒ€์ผ๋งต ๋’ค์— ์ˆจ์–ด๋ฒ„๋ฆฌ๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ

Tilemap์ด SpriteRenderer๋ณด๋‹ค ์•ž์— ์žˆ์œผ๋ฉด ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๋’ค๋กœ ์ˆจ์–ด๋ฒ„๋ฆฌ๋Š” ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค.

โœ” Sorting Layer ์ถ”๊ฐ€

Edit โ†’ Project Settings โ†’ Tags and Layers

๋‹ค์Œ๊ณผ ๊ฐ™์€ Sorting Layer ์ƒ์„ฑ

Background
Tilemap
Player

๊ฐ๊ฐ ์ ์šฉ

Tilemap Renderer โ†’ Sorting Layer : Tilemap

Player SpriteRenderer โ†’ Sorting Layer : Player

๋˜๋Š” Order in Layer ๊ฐ’์œผ๋กœ๋„ ์กฐ์ ˆ ๊ฐ€๋Šฅ.

  1. ํ˜„์žฌ๊นŒ์ง€ ์™„์„ฑ๋œ ๊ตฌ์กฐ

Scene
โ”œโ”€โ”€ Grid
โ”‚ โ”œโ”€โ”€ Tilemap
โ”‚
โ”‚
โ”‚
โ””โ”€โ”€ Player

ํ”Œ๋ ˆ์ด์–ด๋Š” ํ˜„์žฌ ๊ธฐ๋ณธ ์ด๋™ ๋ฐ ๋งต๋งŒ ๊ตฌ์„ฑํ•œ ์ƒํƒœ๋กœ ์•ž์œผ๋กœ๋Š” ๋งต ์ „ํ™˜(์นด๋ฉ”๋ผ ์ด๋™), ๋ชฌ์Šคํ„ฐ(๋ฐ”์ด๋Ÿฌ์Šค) ์Šคํฐ, ์„œ๋ฒ„ ์˜ค๋ธŒ์ ํŠธ ๊ตฌํ˜„์„ ์ง„ํ–‰ํ•  ์˜ˆ์ •.

๐Ÿ“Œ ํ•œ๋™์•ˆ Unity๋ฅผ ๋– ๋‚ฌ๋‹ค๊ฐ€ ๋Œ์•„์™”์ง€๋งŒ, AI๋ฅผ ํ†ตํ•œ ๋ฐ”์ด๋ธŒ ์ฝ”๋”ฉ์œผ๋กœ ์ด๋ ‡๊ฒŒ ํ•˜๋‚˜์”ฉ ์ •๋ฆฌํ•˜๋ฉฐ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋‹ˆ ๊ฐ์ด ๋Œ์•„์˜ค๋Š” ์ค‘์ด๋‹ค.

profile
โ˜€๏ธ Infra_Architecture ๐Ÿ” ๐ŸŒ” Game_Dev

0๊ฐœ์˜ ๋Œ“๊ธ€