[Unity] 1주차 - 빗물받는 르탄이

MINO·2024년 3월 20일

게임 개발 종합반

목록 보기
1/6
post-thumbnail

2024-03-20

유니티로 만드는 게임개발 종합반 강의를 사전 캠프의 Unity 강의 자료로 제공 받았다.

작년에 유니티로 만드는 게임개발 종합반 강의를 이미 수강했기에 큰 어려움은 없었지만,
당시에 "그런가보다" 하고 넘어갔던 부분에 집중하며 강의를 들을 수 있었다.

전체적인 강의의 흐름과 강의에서는 다루지 않았지만 궁금했던 내용 위주로 포스팅하고,
앞으로도 쓸 일이 많은 C# 코드와 컴포넌트는 다른 글에 포스팅 해야겠다.


Animations

Animation 을 생성하면 Inspector 창에 다음과 같은 정보가 표기된다.

강의에서는 Loop Time 을 체크하여 Rtan이 걸어다니는 애니메이션이 반복되게 설정해주었다.

Animation Clip

기능설명
Loop Time애니메이션 클립을 끝까지 재생하고, 끝에 도달하면 다시 재생을 시작
Loop Pose모션을 자연스럽게 반복
Cycle Offset반복 재생 애니메이션의 사이클 오프셋. 애니메이션이 다른 시간에 시작하는 경우 설정

Inspector 하단 공간에 Hierarchy 창에서 Rtan을 끌어다 놓으면 애니메이션이 적용된 모습을 볼 수 있다.

Insepector 하단실행 화면

Components

모든 게임 오브젝트의 작동과 관련된 부품.
각 컴포넌트마다 게임 오브젝트의 동작을 정의하기 위해 편집할 수 있는 속성이 포함되어 있다.

  • 오브젝트를 클릭한 뒤, Inspector 하단의 Add Component 를 통해 다양한 컴포넌트를 추가할 수 있다.
  • 게임 오브젝트에 여러 컴포넌트를 연결할 수 있지만, 모든 게임 오브젝트에는 하나의 Transform 컴포넌트만 있어야 한다.
  • Audio, Physics, Light, Button 등의 컴포넌트를 추가할 수 있다.

Rigidbody 2D

게임 오브젝트의 움직임과 위치를 제어하는 물리 기반 법칙을 제공한다.


Light

게임 오브젝트에 비치는 광원의 강도, 방향, 색상 등의 정보를 제공한다.


Collider 2D

물리적 충돌을 위해 2D 게임 오브젝트 모양을 정의한다.

  • Circle Collider 2D , Box Collider 2D, Polygon Collider 2D, Capsule Collider 2D ...

충돌을 구현하기 위해서는 한 쪽에 Rigidbody 2D 컴포넌트를, 양 쪽에 Collider 2D 컴포넌트를 부여

Animator

씬의 게임 오브젝트에 애니메이션을 할당한다.


Scripts

오브젝트에 스크립트를 추가하여 동작이나 역할을 부여할 수 있다.


C# Script

Create - C# Script 를 통해 스크립트를 생성하면 다음과 같은 기본 코드가 생성된다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

Start( ) 는 오브젝트가 생성될 때, Update( ) 는 프레임 마다 호출된다고 주석이 달려있다.

이벤트 함수

Awake( ), FixedUpdate( ) 등의 함수는 이벤트 함수가 맞긴 하지만, 보통 라이프 사이클 이라고 부르고, OnCollisionEnter 과 같은 함수를 이벤트 함수 라고 한다. (By 매니저님 )

게임플레이 중에 발생하는 이벤트에 대응하여 Unity에서 활성화되기 때문에 이벤트 함수라고 한다.

강의 후반부에 Awake( ), FixedUpdate( ) 등의 이벤트 함수가 쓰이길래, 어떤 차이가 있는지 찾아보고 자주 사용될 것 같은 함수 위주로 정리해보았다.

이벤트 함수설명
Awake( )Start( ) 보다 먼저 실행 , 프리팹이 인스턴스화 된 직후에 호출
Start( )스크립트 인스턴스가 활성화된 경우에만 첫 번째 프레임 업데이트 전에 호출
Update( )프레임 당 한 번 호출 , 프레임 업데이트를 위한 주요 작업 함수 (불규칙한 호출)
FixedUpdate( )Fixed Timestep 에 설정된 값에 따라 일정한 간격으로 호출 (물리 효과가 적용된 오브젝트 조정 시 사용)
LateUpdate( )Update( ) 가 끝난 후 프레임 당 한 번 호출 (일반적으로 3인칭 카메라에 사용)
Reset( )오브젝트에 처음 연결하거나 스크립트의 속성을 초기화하기 위해 호출
OnDestroy( )오브젝트 존재의 마지막 프레임에 대해 모든 프레임 업데이트를 마친 후 호출
OnApplicationQuit( )애플리케이션 종료 전 모든 게임 오브젝트에서 호출 , 플레이 모드를 중지할 때 호출
OnDisable( )동작이 비활성화되거나 비활성 상태일 때 호출

Unity - 이벤트 함수의 실행 순서


Debug.Log( )

프로젝트가 실행되는 동안 어떤 일이 일어나고 있는지 파악하거나 조사하는 데 도움이 되는 정보를 에디터에서 시각화하는데 사용한다.

  • 콘솔 창에 메시지를 출력
  • 씬 뷰 및 게임 뷰에서 시각화 라인을 그리기
  • 스크립트에서 에디터의 플레이 모드를 일시 중지하는 데 사용
Debug.Log("This is a log message.");
Debug.LogWarning("This is a warning message!");
Debug.LogError("This is an error message!");

Unity - Debug

GameManager.cs - 게임 전체를 조율하는 오브젝트

  • 시간 관리
    1) 남은 시간이 0.0f 보다 클 때, 시간이 흐름
    2) 남은 시간이 0.0f 이하일 때, 게임 종료
    3) 남은 시간 표시
  • 빗방울 프리팹을 복제 생성
  • 점수 관리
  • 싱글톤 패턴 선언

1주차 - GameManager.cs


싱글톤 패턴

하나의 인스턴스만 생성하여 사용하는 디자인 패턴.

  • 인스턴스가 필요할 때, 똑같은 인스턴스를 만들지 않고 기존의 인스턴스를 활용
  • 전역으로 선언하여, 다른 클래스의 인스턴스들이 데이터를 공유하는 것이 가능
  • 메모리에 단 하나만 존재하고 모든 오브젝트가 공유
    • 클래스 이름과 점(.) 연산자를 이용해 접근
    • Ex) GameManager.instance.AddScore();

Rtan.cs - 캐릭터 르탄의 스크립트

  • 상황에 맞게 르탄이의 방향을 지정
    1) 유저가 마우스 왼쪽 클릭할 때
    2) 르탄이가 벽에 닿을 때
    • 르탄이의 이동 방향과 이미지의 좌우 반전 필요

1주차 - Rtan.cs

Rain.cs - 떨어지는 빗방울의 스크립트

  • 빗방울이 랜덤한 위치에서 생성
  • 빗방울의 타입을 나눠 크기와 점수, 색상을 다르게 지정
  • 빗방울과 충돌하는 상황 처리
    1) Player 와 충돌하였을 때
    2) Ground 와 충돌하였을 때
    • 빗방울은 제거하고 점수를 더하는 로직 필요

1주차 - Rain.cs


RetryButton.cs - 게임 재시작을 위한 스크립트

  • SceneManager 를 통해 MainScene 을 호출

1주차 - RetryButton.cs


1주차 - 빗물받는 르탄이

결과물


Unity Documentation 에 많은 정보가 있으니 참고하면 좋을 것 같다.

profile
안녕하세요 게임 개발하는 MINO 입니다.

0개의 댓글