본문 바로가기
게임 프로그래밍/게임개발 중급

게임개발 중급(19) - 유니티 엔진 활용(2)

by jyppro 2023. 5. 8.

유니티 엔진 활용(2)

저번시간은 유니티에서 게임을 만들 때 자주 사용되고, 유용하게 쓰이는 것들에 대해 알아보았습니다. 정확히 Transform, Rigidbody, Collider, Main Camera에 대해 알아보았고, 이번에도 지난시간에 이어서 진행하겠습니다.

 

Directional Light(디렉셔널 라이트)

디렉셔널-라이트-인스펙터-창
인스펙터 창

유니티의 Directional Light는 무한히 떨어지는 평행한 광선을 방출하는 빛으로, 태양이나 달 등의 자연광을 표현할 때 자주 사용됩니다. 3D 프로젝트를 생성하면 기본적으로 Main Camera와 함께 기본생성되는 오브젝트입니다. 씬 뷰에서 Directional Light 오브젝트를 생성하면, 오브젝트를 중심으로 일직선으로 뻗은 빛이 발사되는 것을 확인할 수 있습니다.

Directional Light는 그림자 생성이 가능하며, Real-time, Baked, Mixed 3가지 모드로 지원됩니다. Real-time 모드는 게임 플레이 중 그림자를 계산하므로 프레임 드랍이 발생할 수 있습니다. Baked 모드는 게임 실행 전에 그림자를 미리 계산해 놓아 게임 플레이 중 계산량이 줄어들어 프레임 드랍을 예방할 수 있지만, 빛의 움직임에 대한 반응이 없습니다. Mixed 모드는 Real-time과 Baked를 혼합한 모드로, 게임 플레이 중 빛이 움직이는 경우 Real-time, 정지된 경우 Baked로 그림자를 처리합니다.

Directional Light는 씬의 모든 물체에게 영향을 미치므로, 조명 설정은 게임 전체적인 분위기를 결정하는 중요한 요소 중 하나입니다.

아이콘
아이콘

씬에서의 아이콘은 이렇게 생겼습니다. 다른 오브젝트와 마찬가지로 크기나 방향, 회전 등을 조절할 수 있습니다.

 

 

Audio Source(오디오 소스)

오디오-소스-컴포넌트
인스펙터 창

게임을 만드는 데 사운드가 없으면 말이 안되겠죠? 사실상 모든 게임에 필요한, 소리를 제공해주는 오디오 소스입니다.

유니티 오디오 소스(Audio Source) 컴포넌트는 게임 오브젝트에 소리를 추가하는데 사용됩니다. 오디오 클립(Audio Clip)을 로드하고 재생, 일시 정지, 다시 시작, 중지 등의 오디오 기능을 제어할 수 있습니다.

오디오 소스 컴포넌트는 다양한 속성을 가지고 있습니다. 가장 기본적인 속성은 클립과 볼륨(Volume)입니다. 클립은 오디오 소스에서 재생할 오디오 파일을 가리키며, 볼륨은 오디오 소스의 소리 크기를 조절합니다.

그 외에도, 오디오 소스 컴포넌트는 3D 오디오 기능을 제공합니다. 이를 통해 오디오 소스를 3D 공간상에 배치할 수 있으며, 거리에 따른 볼륨 감쇠와 패닝 등의 기능을 사용할 수 있습니다. 또한, 오디오 소스 컴포넌트에는 스팟라이트(Spotlight) 속성이 있어 3D 공간상에서 오디오 소스를 방향성 있는 스피커처럼 사용할 수도 있습니다.

오디오 소스 컴포넌트는 다른 컴포넌트와 연계하여 다양한 오디오 효과를 구현할 수 있습니다. 예를 들어, 오디오 소스 컴포넌트를 이용하여 반사음(Reverb) 효과를 추가하거나, 오디오 필터(Audio Filter) 컴포넌트를 이용하여 이퀄라이저(EQ) 효과를 추가할 수 있습니다.

오디오 소스 컴포넌트를 사용하기 위해서는, 먼저 오디오 클립(Audio Clip)을 로드해야 합니다. 그리고, 이후에 Play() 메서드를 호출하면 오디오가 재생됩니다. 재생이 종료된 후에는 Stop() 메서드를 호출하여 재생을 중지할 수 있습니다. 다음은 유니티 스크립트에서 오디오 소스 컴포넌트를 사용하는 간단한 예시입니다.

using UnityEngine;

public class AudioExample : MonoBehaviour
{
    public AudioClip clip;  // 오디오 클립

    private AudioSource source;  // 오디오 소스

    private void Start()
    {
        // 오디오 소스 컴포넌트 가져오기
        source = GetComponent<AudioSource>();

        // 오디오 클립 로드
        source.clip = clip;
    }

    private void Update()
    {
        // 스페이스바를 누르면 오디오 재생
        if

 

Particle System(파티클 시스템)

파티클-시스템-컴포넌트1파티클-시스템-컴포넌트2
인스펙터 창

사진을 보면 인스펙터 창에 뭔가가 상당히 많고 복잡해 보이지만, 막상 실제로 사용하는 것은 그렇게 복잡하지 않습니다.

유니티 파티클 시스템 컴포넌트는 2D 또는 3D 환경에서 다양한 파티클 효과를 생성할 수 있는 기능을 제공합니다. 파티클 시스템을 사용하면 폭발, 연기, 불꽃, 물결 등 다양한 시각적 효과를 쉽게 구현할 수 있습니다.

파티클 시스템은 주로 다음과 같은 구성 요소로 구성됩니다.

에미터 (Emitter): 파티클이 발생하는 지점으로, 위치, 크기, 방향 등을 설정할 수 있습니다.
파티클 (Particle): 에미터에서 발생한 작은 물체로, 위치, 속도, 크기, 색상 등을 가집니다.
메인 모듈 (Main Module): 파티클의 기본 속성을 설정하는 모듈입니다. 이 모듈에서는 파티클의 수, 속도, 크기, 생명주기 등을 설정할 수 있습니다.
서브 모듈 (Sub Module): 메인 모듈 외에도, 파티클의 색상, 크기, 이동 경로 등을 설정할 수 있는 모듈입니다.
파티클 시스템 컴포넌트를 사용하면, 유니티에서 제공하는 다양한 효과를 빠르고 쉽게 구현할 수 있으며, 각각의 구성 요소를 조절하여 자신만의 파티클 효과를 만들어낼 수 있습니다.

씬에서의-파티클-시스템-창
씬에서의 파티클 시스템 창

씬에서 볼 수 있는 파티클 창입니다.

 

Prefab(프리팹)

프리팹-사용
메뉴에서의 프리팹 생성

프리팹은 제가 이전에도 2D 플랫포머 게임 만들기를 통해 사용한 적이 있습니다. 게임제작에서 필수에 가까운 기능입니다.

유니티에서 프리팹(Prefab)은 게임 오브젝트(Game Object)를 미리 만들어 놓고 재활용하기 위한 기능입니다. 프리팹은 게임 오브젝트의 모든 컴포넌트, 설정 값, 자식 오브젝트, 스크립트 등을 포함하는 하나의 템플릿으로 볼 수 있습니다.

프리팹을 사용하면, 똑같은 게임 오브젝트를 여러 번 생성할 필요 없이, 하나의 프리팹으로 여러 개의 게임 오브젝트를 만들 수 있습니다. 이를 통해 게임 오브젝트의 생성 및 파괴 비용을 줄일 수 있어, 성능 최적화에 유리합니다.

또한, 프리팹의 값을 변경하면 프리팹을 사용하는 모든 게임 오브젝트의 값이 변경됩니다. 예를 들어, 한 개의 적 캐릭터 프리팹을 만들어 놓고, 이를 사용하여 게임에 여러 개의 적 캐릭터를 생성한다면, 프리팹을 수정하면 모든 적 캐릭터의 값이 한 번에 변경됩니다.

유니티에서 프리팹을 만드는 방법은 매우 간단합니다. 프리팹으로 만들고 싶은 게임 오브젝트를 선택한 후, 프로젝트 창에서 마우스 오른쪽 버튼을 클릭하면 나오는 메뉴에서 "Prefab"을 선택하면 됩니다. 이렇게 만들어진 프리팹은 프로젝트 창에 저장되어, 다른 씬에서도 사용할 수 있습니다.

 

<NEXT>

이번에도 저번에 이어서 유니티에서 활용하기 좋고 자주 사용되는 도구 및 컴포넌트 등에 대해 알아보았습니다. 실제로 다양한 분야 및 장르에서 사용되는 유용한 도구가 다르고 훨씬 종류가 많지만 다음에 마지막으로 유니티 도구에 대해 알아보고 마무리 짓겠습니다. 설명하지 못한 기능은 추후에 프로젝트를 진행하면서 차근차근 알아가겠습니다. 감사합니다.