본문 바로가기
TIL

[멋쟁이사자처럼 부트캠프 TIL 회고] 유니티 게임개발 3기 18일차 2D 게임 제작

by HYttt 2024. 12. 14.

스프라이트 이미지 슬라이스

  • png 이미지의 Sprite Mode를 Multiple로 변경하고 적용
  • Sprite Editor에서 Slice -> Grid by Cell Size후 적용
  • 이미지 자식으로 Slice되어 들어감

Animator Blend Tree

  • Idle과 Run간의 전환을 BlendTree를 통해 구현
  • 애니메이터에서 블랜드 트리를 생성하고 Motion에 Idle과 Run 애니메이션 할당
  • 스크립트를 통해 변수 값을 변경하여 애니메이션 전환 (Idle 0, Run 1)

Input System

  • New Input System : 하나의 코드로 여러 플랫폼의 입력 환경을 지원

  • Package Manager에서 Input System 설치

  • Project Setting > Player > Active Input Handling을 Both로 설정하면 기존 Input Manager와 같이 사용됨

 

  • Input Actions Asset을 추가하고 Edit Action을 클릭해 Editor창을 열어준다.

  • Add Control Scheme에서 PC에서 사용할 Schema를 키보드로 생성

  • Action Maps에 Player로 생성
  • Actions Move로 이름 변경하고 하위에 NoBinding은 삭제
  • Action Properties의 Acton Type을 Value, Control Type을 Vector2로 설정

  • Up/Down/Left/Right 추가 후 각각 키 할당

  • 적용할 오브젝트에 Player Input 컴포넌트 추가
  • Actions에 만든 Input Asset 바인딩
  • Default Scheme을 PC Default Map을 Player Behaviour를 Invoke C Sharp Events로 설정하고 스크립트에서 제어
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;

public class CharController : MonoBehaviour
{
    private static readonly int Speed1 = Animator.StringToHash("Speed");	//애니메이터의 Speed 변수
    [SerializeField] private float Speed = 5.0f;
    
    private Vector3 cameraOffset;
    Vector3 velocity = Vector3.zero;
    
    InputAction Move_Input;
    private Animator _animator;
    private SpriteRenderer _spriteRenderer;
    
    
    void Start()
    {
        _animator = GetComponent<Animator>();
        _spriteRenderer = GetComponent<SpriteRenderer>();
        
        UnityEngine.InputSystem.PlayerInput Input = GetComponent<UnityEngine.InputSystem.PlayerInput>();
        Move_Input = Input.actions["Move"];
    }

    void Update()
    {
        Vector2 moveValue = Move_Input.ReadValue<Vector2>();

        if (moveValue.x != 0)
        {
            _spriteRenderer.flipX = moveValue.x < 0;    // 좌우 반전
        }
       
        _animator.SetFloat(Speed1, Mathf.Abs(moveValue.x));	// Speed 변수 변경
        transform.position += new Vector3(moveValue.x * Speed, 0, 0)  * Time.deltaTime;
    }
}

Tile Palette

  • 타일 에셋 다운로드 또는 직접 작업한 그림을 유니티에 드래그 앤 드롭

  • 유니티 Hierarchy뷰 공간에 우클릭 2D Object - Tilemap - Rectangular 선택하면 자동으로 Grid와 tilemap(자식) 생성

  • tilemap자식 오브젝트 선택 후 Ctrl + D 복사해서 각각 이름 변경 및 order in layer 수치 설정

  • 유니티 상단 Window - 2D - Tile Palette 선택 팔레트 창 나옴

 

  • 팔레트창에서 create new palette 눌러서 팔레트 이름 및 폴더 선택

  • 팔레트 빈 공간에 Project뷰에 있는 타일 스프라이드 드래그 앤 드롭

  • 팔레트에서 타일 클릭 후 맵 제작

  • TIle Collider 추가하고 Used By Composite 활성화