TIL

[24/11/28 멋쟁이사자처럼 부트캠프 TIL 회고] - 8일차 Unity 게임개발 3기

앵발자 2024. 11. 28. 22:40

 

 

▼오늘 학습한 내용

 

[예제] 캐릭터 애니메이션 만들기

[예제] 캐릭터 애니메이션 만들기

오늘은 캐릭터 다리가 움직이는 애니메이션을 만들어 볼것이다.

단순히 다리를 회전시키면 다리가 어색하게 튀어나오는 문제가 발생할 수 있다.

그래서 피봇(Pibot)을 적절하게 조정해줘야한다.

 

피봇 설정을 통한 다리 애니메이션 개선

1. 자식 오브젝트 생성: Right Leg 오브젝트의 자식 오브젝트 생성 (이름:Right Leg Pivot)

2. 피봇 위치 조정: Right Leg Pivot 오브젝트를 다리 길이에 맞춰서 위쪽으로 올려준다. (Wireframe 모드 활성화 시 편리)

3. 왼쪽 다리에도 동일하게 적용: Right Leg Pivot  오브젝트를 복사하여 자식 오브젝트로 추가 (이름:  Left Leg Pivot)

4. 왼쪽 다리 피봇 조정: 왼쪽 다리 위쪽으로 이동 후 Position 값을 Right Leg Pivot와 동일하게 설정 나의 경우 Position(0, 0.8, 0)으로 바꿨다.

5. 부모 - 자식 관계 변경 : Pivot 오브젝트를 부모로, 다리 오브젝트를 자식으로 설정

부모 - 자식 관계 변경 모습

프리팹이 되어있어서 풀고 바꿔주었다.

  • Right Leg Pivot의 하위 Right Leg
  • Left Leg Pivot의 하위 Left  Leg

 

피봇 조정을 완료한 후 다리를 회전해보면 위쪽을 기준으로 자연스럽게 움직이는 것을 확인할 수 있다.

* Pivot / Local 상태로 해야한다.

 

걷는 애니메이션 만들기

최상위 개체 오브젝트를 선택한 뒤, 새 애니메이션을 생성하여 걷는 동작을 구현했다.

어제 문이 회전하는 애니메이션을 만들어봐서 수월하게 진행 할 수 있었다.

 

Animator 설정

  • Entry는 Transition을 하나만 설정할 수 있기 때문에, 새로운 상태( New State)을 생성했다.
  • 새로운 상태( New State)를 Character Move와 연결하여 걷는 동작이 반복적으로 실행되도록 설정해준다.

 

파라미터 설정

isWalk 라는 이름의 bool타입 파라미터를 생성했다.

(일반적으로 bool 타입 파라미터 이름은 'is~' 로 짓는다고 하셨다.)

  • 이동키를 누를 때: isWalk = true -> 걷는 애니메이션 실행
  • 이동키를 누르지 않을 때: isWalk = false -> 정지 상태로 전환

 

Movement 스크립트에 Animator 제어 추가

기존 Movement 스크립트에서 캐릭터 이동 관련 부분에 애니메이션 로직을 추가

public Animator anim; //Animater 타입의 변수 선언

private void Move() //캐릭터 이동 관련 기능
{
    if (h == 0 && v == 0) //아무런 키도 누르지 X
    {
        anim.SetBool("isWalk", false); // 걷는 애니메이션 중지
    }
    else //이동키 중 어떤 키라도 눌렀을 경우
    {
        anim.SetBool("isWalk", true); // 걷는 애니메이션 시작
    }
}

 

Input.GetAxis()와 키 입력에 따른 값

Input.GetAxis("Horizontal")과 Input.GetAxis("Vertical")은 -1.0 ~ 1.0 사이의 값을 반환하며, 누르는 키에 따라 값이 다르다.

  • W (앞으로) -> h=0, v=1
  • A (왼쪽으로) -> h=-1, v=0
  • S(뒤로) -> h=0, v=-1
  • D(오른쪽으로) -> h=1, v=0
  • 아무것도 누르지 않음 -> h=0, v=0

 

걷는 애니메이션 자연스럽게 수정

지금은 캐릭터가 멈출때 늦게 멈추거나,

걸을때 버벅거려보이는데 이 부분들을 자연스럽게 보이도록 수정해보겠다.

 

1. 멈출때 딜레이 제거 (즉시 반응하도록 수정)

- Has Exit time 체크 해제: 이동키를 뗐을 때 현재 애니메이션이 끝나기를 기다리지 않고 즉시 다른 상태로 전환한다.

- Setting을 열고 Transition Duratior을 0으로 설정: 두 애니메이션 전환 지연 시간을 없앤다.

 

2. 이동 시 부자연스럽게 걷는 문제 수정 (꼭 안해도 됨)

- Dopesheet에서 Carves로 전환: Animation Window에서 Carves탭을 클릭한다.

- 곡선 수정: 곡선이 완만한 부분을 직선으로 수정한다.

 

 

라이트(Light)

라이트(Light)

: 라이트는 Unity에서 씬에 조명을 추가하여 시각적 표현을 향상시키는 기능이다.

 

라이트의 종류

  • DirectionLight: 직선의 모든 범위
  • Point Light: 구형(Sphere) 모양 범위
  • Spot Light: 원뿔 모양(Cone) 모양의 범위
  • Area Light(Bake 전용): 사각형 또 타원 모양의 범위 -> Static 설정이 필요하며 실시간 조명 불가능 

 

낮과 밤 구현

LightRotation 스크립트

public class LightRotation : MonoBehaviour
{
    public float rotSpeed = 10f; // 회전 속도 설정

    void Update()
    {
    	// X축 기준으로 Light를 회전
        transform.Rotate(Vector3.right * rotSpeed * Time.deltaTime);
    }
}

 

 

[예제] 라이트 오브젝트 제작

[예제] 라이트 오브젝트 제작

손전등 리소스를 활용해 F키를 누르면 라이트를 키고 끄도록 구현해서 캐릭터가 손전등을 들고다니도록 만들어 볼 것이다.

 

FlashLight 스크립트

public class FlashLight : MonoBehaviour
{
    public GameObject spotLight;
    public bool isFlashLight = false; // 손전등 상태 (켜짐/꺼짐)

    void Update()
    {
        // F 키 입력 시 손전등 켜기/끄기
        if (Input.GetKeyDown(KeyCode.F))
        {
            isFlashLight = !isFlashLight; // 상태 반전
            spotLight.SetActive(isFlashLight); // SpotLight 활성화/비활성화
        }
    }
}

 

 

Flashlight오브젝트 생성

Flashlight오브젝트 인스펙터

  • Flash Light 스크립트 추가
  • Spot Light 변수에 SpotLight 오브젝트 연결

 

SpotLight 오브젝트 설정

SpotLight 오브젝트 인스펙터

 

  • Light 컴포넌트를 추가
  • Light 설정: Typr: Spot, 나머지는 필요에 따라 조정
  • 위치 조정: 캐릭터의 손 위치로 이동

Flashlight오브젝트의 자식으로 SpotLight오브젝트를 넣었다.

 

결과 화면

손전등 들고 다니는 어몽이

정상작동 확인!

 

 

스카이박스(Skybox)

스카이박스(Skybox)

: 배경 또는 환경을 표현하기 위해 사용되는 기술

   Cube Map 방식, Sided 방식, Panorama 방식 등이 있다.

 

변경한 하늘의 모습

 

 

유저 인터페이스(UI)

유저 인터페이스(UI)

: 사용자가 프로그램의 정보를 보거나 상호작용 할 수 있는 기능

 

유니티의 UI 시스템(UGUI)

 

UI 종류

1. 기본 UI

  • 유니티에서 제공하는 가장 기본적인 UI 요소.
  • 텍스트(Text), 이미지(Image), 버튼(Button), 슬라이더(Slider) 등.

2. OverLay UI

  • 화면에 고정되어 보이는 UI 방식.
  • 게임 카메라와 상관없이 항상 사용자의 화면에 표시
  • 예: HUD(체력바, 미니맵), 메뉴, 버튼 등.

3. World UI

  • 3D 공간에 위치하며, 게임 오브젝트처럼 배치
  • 카메라의 움직임이나 3D 월드 안에서 상호작용이 가능.
  • 예: 3D 환경의 NPC 상호작용 메뉴, 게임 오브젝트 위에 표시되는 정보.

 

 

캔버스(Canvas)

캔버스(Canvas)

: UI를 배치할 수 있는 2D 도화지의 개념

 

캔버스(Canvas)UI

: UI를 그리기 위한 도화지 역활로 모든 UI는 Canvas 내부에 존재해야 한다.

 

캔버스 렌더 모드(Render Mode)

1. Screen Space - Overlay

  • 화면 픽셀 기준으로 UI를 그리는 모드.
  • 게임 카메라와 관계없이 UI가 화면에 고정됩니다.
  • OverLay UI에 적합

2. Screen Space - Camera

  • 특정 카메라를 기준으로 UI를 그리는 모드.
  • 카메라의 위치와 회전에 따라 UI가 영향을 받음.
  • UI와 카메라 사이의 깊이 조정이 가능.

3. World Space

  • 3D 공간에 배치되는 UI 모드.
  • UI 요소가 게임 월드 내 오브젝트처럼 동작하며, 다른 오브젝트와 상호작용 가능.
  • World UI에 적합.

 

캔버스 스케일러(Scaler)

:  캔버스 스케일러는 UI 요소의 크기와 배율을 화면 해상도에 맞게 조정하는 설정 

일반적으로 Scale With Screen Size를 사용

 

 

[실습] Flappy Bird 2D_01

[실습] Flappy Bird 2D_01

내일은 간단한 게임인 플래피버드를 만들것이다.

 

 

 

▼마무리

내일은 기초학습의 마지막 날인데, 본격적으로 플래피버드라는 게임을 만들 수 있을 것 같아 기대가 된다.

사실 플래피버드는 한 번 만들어 본 경험이 있긴 하지만, 그 경험을 되살리며 당시 충분히 이해하지 못했던 부분까지 확실히 익히게 되리라 생각된다.