개발단에 가입하여 베르의 게임 개발 유튜브를 후원해주세요! 

 

베르의 게임 개발 유튜브

안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다! 게임 개발에 도움이 되는 강좌들을 올리는 채널입니다! [투네이션 후원] https://toon.at/donate/637735212761460238 [유니티 어필리에이트

www.youtube.com

안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다!

이번에는 유니티에서 공식 지원하는 오브젝트 풀링을 알아봅시다.

 

[패키지 다운로드]

https://github.com/WERGIA/WerGameDevChan/blob/main/Unity/unity-object-pool.unitypackage

 

사용 엔진 버전 : 2021.3

 

타임라인

0:00 인트로

0:10 오브젝트 생성과 파괴 방식의 문제

2:26 오브젝트 풀링의 개념

3:02 유니티 오브젝트 풀링

6:14 아웃트로

스크립트

인트로

안녕하세요. 여러분들과 함께 게임 개발을 공부하는 베르입니다.

이번에는 유니티 2021부터 정식 기능으로 포함된 오브젝트 풀링에 대해서 알아보도록 하겠습니다.

오브젝트 생성과 파괴 방식의 문제

오브젝트 풀링이 무엇인지는 이전에 만든 오브젝트 풀링 영상에서 이야기했었지만 그래도 한 번 더 간단하게 설명해보도록 하겠습니다.

먼저 오브젝트 풀링을 사용하지 않고 오브젝트를 생성하거나 파괴하면 두 가지 문제가 발생할 수 있습니다.

첫 번째 문제는 가비지 컬렉팅으로 인한 프레임 드랍입니다.

프로그래밍에서 오브젝트를 생성하거나 파괴하는 작업은 꽤나 무거운 작업으로 분류됩니다.

오브젝트 생성은 메모리를 새로 할당하고 리소스를 로드하는 등의 초기화 과정이 필요하고, 오브젝트 파괴는 파괴 이후에 발생하는 가비지 컬렉팅으로 인한 프레임 드랍이 발생할 수 있습니다.

가비지 컬렉팅이란 유니티 스크립팅의 기반이 되는 C# 프로그래밍에서 제공되는 기능입니다.

우리가 Destroy 함수로 게임 오브젝트를 파괴한다고 선언하면 곧바로 메모리에서 사라지는 것이 아닙니다.

그 게임 오브젝트는 게임에서 보이지 않게 되지만 가비지 콜렉터라고 부르는 것이 그것을 수거해서 파괴하기 전까지 메모리에 남아있습니다.

그래서 오브젝트를 파괴한다고 선언하면 일정 사이클이 지난 이후에 가비지 컬렉터가 메모리를 뒤져서 파괴 선언된 오브젝트를 수거해서 파괴합니다.

이렇게 파괴 선언된 오브젝트가 적으면 수거해서 파괴하는 시간이 짧지만, 많은 양의 오브젝트가 쌓여있다면 당연히 수거하고 파괴하는 데 더 많은 시간이 걸리게 됩니다.

거기에 컴퓨터는 이렇게 파괴한 오브젝트를 수거해서 정리하는 작업만 진행하고 있는게 아닙니다.

게임이 동작하는 로직도 처리하고 있고 게임 화면을 보여주기 위해서 렌더링 작업까지 진행하고 있습니다.

그렇기 때문에 파괴된 오브젝트가 많다면 많은 양의 메모리를 정리하기 위해서 게임의 프레임이 일시적으로 떨어지는 문제가 발생합니다.

두 번째 문제는 메모리 파편화입니다.

프로그램에서는 처음부터 정해진 메모리의 양도 있지만, 동작하는 도중에 필요한 양에 따라 새로 할당받는 경우도 있습니다.

그런데 이 예시 이미지처럼 64바이트의 A, B, C, D를 할당받은 상태에서 A와 C를 할당 해제하면 3번과 같이 빈 공간이 생겨납니다.

이 때 128바이트의 오브젝트를 생성하려고 하면 A와 C 자리에는 공간이 부족에서 D의 뒤에 있는 공간에 할당해야 합니다.

이 할당 이 후에 128바이트 짜리 오브젝트를 하나 더 생성하려고 하면, 메모리 빈 공간만 따졌을 때는 128바이트의 공간이 존재하지만, 연결된 크기가 128바이트인 공간이 없어서 오브젝트 생성에 실패합니다.

한마디로 메모리는 남아 있는데 메모리가 부족한 역설적인 상황이 발생하는 것입니다.

이런 문제들을 해결하기 위해서 고안된 개념이 바로 오브젝트 풀링입니다.

오브젝트 풀링의 개념

오브젝트 풀링의 개념은 생각보다 간단합니다.

먼저 오브젝트를 담아둘 오브젝트 풀을 만들고 여기에 빌려줄 오브젝트를 생성해서 담아둔 뒤 외부에서 이 오브젝트가 필요하면 오브젝트 풀에서 빌려가는 갑니다.

그리고 빌려온 오브젝트를 모두 사용하고 나면 다시 오브젝트 풀에 돌려주는 겁니다.

그런데 만약 외부에서 오브젝트 풀 안에 있는 모든 오브젝트를 다 빌려가서 더 빌려줄 수 없는 상황이 되면 그때서야 새로운 오브젝트를 생성해서 꺼내줍니다.

그리고 이렇게 새로 만든 오브젝트 역시 사용이 끝나서 돌려 받으면 파괴하지 않고 오브젝트 풀이 보관하고 있으면 됩니다.

이게 바로 오브젝트 풀링의 개념입니다.

유니티 오브젝트 풀링

유니티 오브젝트 풀링을 사용하는 방법을 알아보기 전에 영상 하단의 링크에서 자료를 다운로드 받아서 프로젝트에 임포트합니다.

패키지를 임포트한 다음에 Pooling Test Scene을 열고 플레이시켜보면 클릭하는 동안에 많은 수의 총알 오브젝트가 생성되는 모습을 볼 수 있습니다.

총알을 발사하는 역할의 Shooter 클래스를 보면 지금은 오브젝트 풀을 사용하지 않고 총알을 생성하고 있습니다.

이제 이 총알 생성과 파괴 부분을 유니티 오브젝트 풀로 대체해보겠습니다.

유니티 오브젝트 풀을 사용하기 위해서는 UnityEngine.Pool 네임스페이스가 필요합니다.

그리고 오브젝트 풀을 적용하기 위해서는 풀링의 대상이 될 오브젝트의 클래스와 풀링된 오브젝트를 관리할 클래스, 두 군데에 작업을 해줘야합니다.

먼저 풀링의 대상이 될 Bullet 클래스로 이동합니다.

그리고 클래스의 상단에 UnityEngine.Pool 네임스페이스를 선언해줍니다.

IObjectPool<Bullet> 타입으로 이 총알 오브젝트를 관리 중인 풀을 캐싱할 _ManagedPool 멤버 변수를 선언합니다.

그리고 SetManagedPool 함수를 만들고 매개변수로 받은 풀을 _ManagedPool에 저장하도록 만들어줍니다.

그 다음에는 DestroyBullet 함수를 만들고 호출되면 총알 오브젝트를 풀에 반환하도록 코드를 작성합니다.

그리고 Shoot 함수에서 총알을 5초 후에 파괴하는 부분을 5초 후에 DestroyBullet 함수를 호출하도록 수정합니다.

그 다음에는 Shooter 클래스로 이동해서 상단에 UnityEngine.Pool 네임스페이스를 선언해줍니다.

그리고 멤버 변수로 총알 오브젝트들을 관리할 IObjectPool<Bullet> 타입의 _Pool 변수를 선언해줍니다.

그리고 Awake 함수를 만들어서 _Pool 멤버 변수에 Object Pool을 생성해서 넣어줍니다.

여기서 생성자의 매개 변수에 넣어줄 것이 좀 많습니다.

먼저 총알 오브젝트를 생성할 때 호출될 함수인 CreateBullet 함수를 만들고 가지고 있는 프리팹으로 총알 오브젝트를 생성한 다음 생성된 bullet 오브젝트에 자신이 등록되어야할 풀을 알려주고 반환합니다.

그리고 풀에서 오브젝트를 빌려올 때 사용될 OnGetBullet 함수와 오브젝트를 풀에 돌려줄 때 사용될 OnReleaseBullet 함수를 선언하고 코드를 작성합니다.

마지막으로 풀에서 오브젝트를 파괴할 때 사용될 OnDestroyBullet 함수 역시 작성해줍니다.

그리고 이렇게 만든 함수들을 풀의 생성자 매개변수에 넣어주고, 생성가능한 오브젝트 최대 갯수 역시 넣어줍니다.

오브젝트 풀과 관련된 코드를 모두 작성한 다음에는 Update 함수로 가서 프리팹을 인스턴스화해서 총알 오브젝트를 생성하는 부분의 코드를 오브젝트 풀을 사용하도록 코드를 수정합니다.

코드를 모두 작성한 다음에는 저장하고 에디터로 돌아갑니다.

그리고 게임을 플레이해서 테스트해보면 처음에는 총알 오브젝트가 없지만 총알을 발사할 때 생겨납니다.

그리고 총알이 사라질 때가 되면 풀에 설정해놓은 최대 갯수만 남아서 비활성화되고 나머지는 완전히 파괴되는 모습을 볼 수 있습니다.

다시 한 번 총알을 발사해보면 비활성화된 총알들이 재활용되고 모자란 총알들만 생성되는 모습을 볼 수 있습니다.

아웃트로

이번 영상에서는 2021 버전부터 정식 지원되는 유니티 오브젝트 풀링에 대해서 알아보았습니다.

이 강좌는 시청자 여러분들의 시청과 후원으로 제작되었습니다.

이상 베르의 게임 개발 유튜브였습니다. 감사합니다.

 

[유니티 어필리에이트 프로그램]

아래의 링크를 통해 에셋을 구매하시거나 유니티를 구독하시면 수익의 일부가 베르에게 수수료로 지급되어 채널의 운영에 도움이 됩니다.

 

에셋스토어

여러분의 작업에 필요한 베스트 에셋을 찾아보세요. 유니티 에셋스토어가 2D, 3D 모델, SDK, 템플릿, 툴 등 여러분의 콘텐츠 제작에 날개를 달아줄 다양한 에셋을 제공합니다.

assetstore.unity.com

 

Easy 2D, 3D, VR, & AR software for cross-platform development of games and mobile apps. - Unity Store

Have a 2D, 3D, VR, or AR project that needs cross-platform functionality? We can help. Take a look at the easy-to-use Unity Plus real-time dev platform!

store.unity.com

 

Create 2D & 3D Experiences With Unity's Game Engine | Unity Pro - Unity Store

Unity Pro software is a real-time 3D platform for teams who want to design cross-platform, 2D, 3D, VR, AR & mobile experiences with a full suite of advanced tools.

store.unity.com

[투네이션]

 

-

 

toon.at

[Patreon]

 

WER's GAME DEVELOP CHANNEL님이 Game making class videos 창작 중 | Patreon

WER's GAME DEVELOP CHANNEL의 후원자가 되어보세요. 아티스트와 크리에이터를 위한 세계 최대의 멤버십 플랫폼에서 멤버십 전용 콘텐츠와 체험을 즐길 수 있습니다.

www.patreon.com

[디스코드 채널]

 

Join the 베르의 게임 개발 채널 Discord Server!

Check out the 베르의 게임 개발 채널 community on Discord - hang out with 399 other members and enjoy free voice and text chat.

discord.com

 

[참고자료]

https://luv-n-interest.tistory.com/1368

https://docs.unity3d.com/ScriptReference/Pool.ObjectPool_1.html

https://workinprogress.kr/wiki/programming/do-not-feed-the-gc/

반응형
  1. 개양반 2022.08.10 00:45 신고

    오웃... 유니티에서 만들어준거니 최적화가 사용법이 더 쉽겠죠!?

개발단에 가입하여 베르의 게임 개발 유튜브를 후원해주세요! 

 

베르의 게임 개발 유튜브

안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다! 게임 개발에 도움이 되는 강좌들을 올리는 채널입니다! [투네이션 후원] https://toon.at/donate/637735212761460238 [유니티 어필리에이트

www.youtube.com

 

안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다!

이번에는 유니티의 기본 개념인 게임 오브젝트와 컴포넌트에 대해서 알아봅시다!

 

사용 엔진 버전 : 2021.3

 

타임라인

0:00 인트로

0:10 게임 오브젝트

0:51 컴포넌트

3:29 아웃트로

스크립트

인트로

안녕하세요. 여러분들과 함께 게임 개발을 공부하는 베르입니다.

이번 영상에서는 유니티의 게임 오브젝트와 컴포넌트에 대해서 알아보도록 하겠습니다.

게임 오브젝트

게임 오브젝트는 유니티 엔진에서 가장 중요한 개념이며 씬에 배치되는 가장 기본 단위의 오브젝트입니다.

한마디로, 캐릭터나 바닥에 떨어진 아이템, 배경으로 배치된 건물이나 소품, 폭발하면서 발생하는 이펙트, 빛을 밝히는 광원, 모든 장면을 찍는 카메라까지 씬 안에 배치되는 모든 것은 게임 오브젝트입니다.

그리고 이 게임 오브젝트에 어떤 컴포넌트가 추가되느냐에 따라서 게임 속에서 그 게임 오브젝트의 역할이 결정되는 구조입니다.

한마디로 게임 오브젝트는 기능을 구현하는 컴포넌트들을 담는 하나의 컨테이너 역할을 하는 것입니다.

게임 오브젝트는 기본적으로 이름, 태그, 레이어를 가지고 있는데 이것을 이용해서 나중에 원하는 오브젝트를 찾는 등의 처리를 할 수 있습니다.

컴포넌트

컴포넌트는 게임 오브젝트에 붙일 수 있는 다양한 기능을 가진 구성요소입니다.

앞서 이야기했듯이 비어있는 게임 오브젝트에 어떤 컴포넌트를 붙이느냐에 따라서 그 게임 오브젝트의 역할이 달라집니다.

간단한 예시를 들기 위해 빈 게임 오브젝트를 하나 만들어 보겠습니다.

하이어라키 뷰에 우클릭 한 뒤 Create Empty 메뉴를 선택합니다.

이것은 비어있는 게임 오브젝트를 만든다는 의미입니다.

새로 생성된 게임 오브젝트를 보면 트랜스폼 컴포넌트가 붙어있는 것을 볼 수 있습니다.

비어있는 게임 오브젝트를 만들겠다고 했는데 왜 트랜스폼 컴포넌트가 붙어있는지 의문이 들 수도 있습니다.

유니티 엔진에서 트랜스폼 컴포넌트는 모든 게임 오브젝트에 기본 컴포넌트로 반드시 부착되어 있도록 되어 있으며 게임 오브젝트로부터 제거할 수 없게 되어 있습니다.

트랜스폼 컴포넌트는 이 게임 오브젝트가 씬의 어느 위치에 어떻게 회전되어서 어떤 크기로 배치되어 있는지를 결정합니다.

그럼 게임 오브젝트에 컴포넌트를 추가하는 방법을 배우기 위해서 방금 만든 빈 게임 오브젝트에 카메라 컴포넌트를 부착해서 새로운 카메라로 만들어보겠습니다.

컴포넌트를 추가할 게임 오브젝트를 선택하고 인스펙터창에서 Add Component 버튼을 누르면 게임 오브젝트에 추가할 수 있는 컴포넌트들의 목록이 보입니다.

이 중에서 게임 오브젝트에 추가할 컴포넌트를 찾아서 선택하면 됩니다.

하지만 이 상태로는 카메라 컴포넌트를 빠르게 찾기 어렵기 때문에, 검색창에 camera를 검색하여 선택합니다.

그러면 비어있던 게임 오브젝트 자리에 카메라 모양이 생기며 게임 오브젝트가 카메라가 된 것을 확인할 수 있습니다.

이렇게 유니티에서 제공하는 기본적인 컴포넌트 이외에도 개발자가 직접 컴포넌트를 만들어서 게임 오브젝트에 붙일 수도 있습니다.

대부분 실제 게임 기능을 하는 시스템들은 이런 커스텀 컴포넌트로 만들어지고 게임 오브젝트에 추가됩니다.

커스텀 컴포넌트를 만드는 방법은 프로젝트 뷰에서 우클릭한 뒤 Create > C# Script 항목을 선택하는 것입니다.

그러면 New BehaviourScript라는 이름으로 C# 스크립트 파일이 생성됩니다.

이렇게 만든 컴포넌트는 보통 용도에 맞게 이름을 지어줍니다.

커스텀 기능이 만들어지는 예시를 위해서 만든 스크립트를 더블 클릭해서 스크립트 에디터를 엽니다.

그리고 업데이트 함수에서 스페이스 바를 누르면 간단한 로그를 출력하도록 코드를 작성하겠습니다.

코드를 저장하고 에디터로 돌아갑니다.

이렇게 생성한 컴포넌트를 다른 컴포넌트와 마찬가지로 게임 오브젝트를 선택하고 Add Component 버튼을 누른 뒤 추가할 컴포넌트의 이름을 검색해서 게임 오브젝트에 붙일 수 있습니다.

그리고 게임을 플레이하고 스페이스 바를 누르면 작성한 코드대로 로그가 출력됩니다.

이런 간단한 예시를 확장해서 앞으로 여러분들이 게임에 필요한 기능들을 만들어 나가는 방식으로 개발을 하게 되는 겁니다.

아웃트로

이번 영상에서는 유니티의 게임 오브젝트와 컴포넌트에 대해서 알아보았습니다.

이 강좌는 시청자 여러분들의 시청과 후원으로 제작되었습니다.

이상 베르의 게임 개발 유튜브였습니다. 감사합니다.

 

[유니티 어필리에이트 프로그램]

아래의 링크를 통해 에셋을 구매하시거나 유니티를 구독하시면 수익의 일부가 베르에게 수수료로 지급되어 채널의 운영에 도움이 됩니다.

 

에셋스토어

여러분의 작업에 필요한 베스트 에셋을 찾아보세요. 유니티 에셋스토어가 2D, 3D 모델, SDK, 템플릿, 툴 등 여러분의 콘텐츠 제작에 날개를 달아줄 다양한 에셋을 제공합니다.

assetstore.unity.com

 

Easy 2D, 3D, VR, & AR software for cross-platform development of games and mobile apps. - Unity Store

Have a 2D, 3D, VR, or AR project that needs cross-platform functionality? We can help. Take a look at the easy-to-use Unity Plus real-time dev platform!

store.unity.com

 

Create 2D & 3D Experiences With Unity's Game Engine | Unity Pro - Unity Store

Unity Pro software is a real-time 3D platform for teams who want to design cross-platform, 2D, 3D, VR, AR & mobile experiences with a full suite of advanced tools.

store.unity.com

 

[투네이션]

 

-

 

toon.at

[Patreon]

 

 

WER's GAME DEVELOP CHANNEL님이 Game making class videos 창작 중 | Patreon

WER's GAME DEVELOP CHANNEL의 후원자가 되어보세요. 아티스트와 크리에이터를 위한 세계 최대의 멤버십 플랫폼에서 멤버십 전용 콘텐츠와 체험을 즐길 수 있습니다.

www.patreon.com

[디스코드 채널]

 

Join the 베르의 게임 개발 채널 Discord Server!

Check out the 베르의 게임 개발 채널 community on Discord - hang out with 399 other members and enjoy free voice and text chat.

discord.com

 

반응형

개발단에 가입하여 베르의 게임 개발 유튜브를 후원해주세요! 

 

베르의 게임 개발 유튜브

안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다! 게임 개발에 도움이 되는 강좌들을 올리는 채널입니다! [투네이션 후원] https://toon.at/donate/637735212761460238 [유니티 어필리에이트

www.youtube.com

 

안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다!

이번에는 유니티 에셋 스토어에서 진행되는 인디 이노베이션 세일에 대해서 알아봅시다!

 

[유니티 에셋 스토어 인디 이노베이션 세일 링크]

아래의 링크를 통해 에셋을 구매하시거나 유니티를 구독하시면 수익의 일부가 베르에게 수수료로 지급되어 채널의 운영에 도움이 됩니다.

 

 

인디 게임 아이디어 영감 받기 - Asset Store

에셋스토어의 에셋과 패키지로 당신의 인디 게임을 한 단계 더 높여보세요.

assetstore.unity.com

 

[인스퍼레이션 추가 할인 쿠폰 코드]

INSPIRE2022

 

[유니티 어필리에이트 프로그램]

아래의 링크를 통해 에셋을 구매하시거나 유니티를 구독하시면 수익의 일부가 베르에게 수수료로 지급되어 채널의 운영에 도움이 됩니다.

 

에셋스토어

여러분의 작업에 필요한 베스트 에셋을 찾아보세요. 유니티 에셋스토어가 2D, 3D 모델, SDK, 템플릿, 툴 등 여러분의 콘텐츠 제작에 날개를 달아줄 다양한 에셋을 제공합니다.

assetstore.unity.com

 

Easy 2D, 3D, VR, & AR software for cross-platform development of games and mobile apps. - Unity Store

Have a 2D, 3D, VR, or AR project that needs cross-platform functionality? We can help. Take a look at the easy-to-use Unity Plus real-time dev platform!

store.unity.com

 

Create 2D & 3D Experiences With Unity's Game Engine | Unity Pro - Unity Store

Unity Pro software is a real-time 3D platform for teams who want to design cross-platform, 2D, 3D, VR, AR & mobile experiences with a full suite of advanced tools.

store.unity.com

 

[투네이션]

 

-

 

toon.at

[Patreon]

 

 

WER's GAME DEVELOP CHANNEL님이 Game making class videos 창작 중 | Patreon

WER's GAME DEVELOP CHANNEL의 후원자가 되어보세요. 아티스트와 크리에이터를 위한 세계 최대의 멤버십 플랫폼에서 멤버십 전용 콘텐츠와 체험을 즐길 수 있습니다.

www.patreon.com

[디스코드 채널]

 

Join the 베르의 게임 개발 채널 Discord Server!

Check out the 베르의 게임 개발 채널 community on Discord - hang out with 399 other members and enjoy free voice and text chat.

discord.com

 

 

반응형

개발단에 가입하여 베르의 게임 개발 유튜브를 후원해주세요!

 

베르의 게임 개발 유튜브

안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다! 게임 개발에 도움이 되는 강좌들을 올리는 채널입니다! [투네이션 후원] https://toon.at/donate/637735212761460238 [유니티 어필리에이트

www.youtube.com

 

안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다!

이번에는 유니티의 버전 컨트롤 시스템인 플라스틱 SCM에 대해서 알아봅시다!

 

사용 엔진 버전 : 2021.3

 

타임라인

0:00 인트로

0:10 버전 컨트롤 시스템

1:14 플라스틱 SCM

2:44 가격 책정

3:08 결제 정보 등록 및 유니티 조직 만들기

4:09 플라스틱 워크스페이스 만들기

5:02 기본 기능

6:03 아웃트로

스크립트

인트로

안녕하세요. 여러분들과 함께 게임 개발을 공부하는 베르입니다.

이번에는 유니티에서 제공하는 버전 컨트롤 시스템인 플라스틱에 대해서 알아보겠습니다.

버전 컨트롤 시스템

버전 컨트롤 시스템은 간단하게 이야기해서 프로젝트의 버전을 관리하는 것을 도와주는 시스템입니다.

깃허브로 유니티 프로젝트를 관리하는 방법에 대한 영상에서 이야기했듯이 프로젝트의 버전 컨트롤을 제대로 하지 않으면 많은 문제들이 발생합니다.

특히 여러 개발자가 함께 개발을 하는 경우에 많은 문제가 발생할 수 있습니다.

버전 컨트롤 시스템이 없다면 보통은 프로젝트의 파일을 압축하거나 패키지를 만들어서 전달하는 방식으로 개발 내용을 공유하게 됩니다.

하지만 이런 경우에는 전달하는 사람이 실수로 옛날 버전의 파일을 보내거나, 파일을 받은 사람이 프로젝트에 적용하는 것을 깜빡하는 경우가 발생해서 프로젝트 최신 버전을 유지하기 어려워집니다.

그보다 심한 경우는 지금 작업 중인 파일과 같은 파일을 다른 개발자가 보내서 내용이 덮어씌워지는 바람에 작업중인 내용이 날아가는 경우도 있습니다.

이렇게 파일로 전달해서 작업물을 공유할 때, 덮어씌워진 내용은 복구가 어렵기 때문에 더욱 곤란한 상황을 만들게 됩니다.

그래서 개발자들은 버전 컨트롤 시스템이라는 것을 만들어서 최신 버전이 어디인지 알기 쉽게 만들고, 작업물을 쉽게 공유하고, 문제가 생긴 버전에서 원래 버전으로 쉽게 되돌릴 수 있도록 만들었습니다.

플라스틱 SCM

하지만 깃과 같은 기존의 버전 컨트롤 시스템은 프로그래머가 사용하기 위해서 만들어졌기 때문에 디자이너들이 다루기 어렵고, 이미지와 같은 리소스 비교가 어렵다는 단점이 있습니다.

이렇게 디자이너나 아티스트가 다루기 어렵고 리소스 비교가 어려운 문제를 개선하기 위해 플라스틱 SCM라는 버전 컨트롤 시스템이 개발되었습니다.

플라스틱 SCM에서 말하는 대표적인 특징은 3가지가 있습니다.

첫 번째는 분산식과 중앙 집중식, 두 방식을 모두 사용해서 작업할 수 있다는 것입니다.

분산식과 중앙 집중식에 대해서 짧게 설명하자면 먼저 분산식은 깃과 같이 각자의 PC에 로컬 리포지토리를 가지고, 개발 후에 안정된 버전만 커밋하고 서버로 푸시하는 방식입니다.

그리고 중앙 집중식은 로컬 리포지토리 없이, 곧바로 서버로 체크인해서 동기화하는 방식입니다.

두 번째는 특징은 대규모 파일을 쉽게 관리할 수 있다는 것입니다.

일반적인 깃 방식의 버전 관리 시스템에서는 100MB이상의 파일을 업로드하려면 LFS라는 것을 사용하는 번거로운 과정을 거쳐야 합니다.

요즘처럼 고퀄리티 게임 개발이 대중화되고 게임에 사용되는 리소스의 용량이 빠르게 늘어나는 상황에서는 이런 번거로운 과정이 꽤나 귀찮게 느껴질 겁니다.

하지만 플라스틱에서는 LFS와 같은 번거로운 과정없이 쉽게 대용량 파일을 다른 작업자들과 공유할 수 있습니다.

그리고 세 번째 특징은 이 플라스틱 SCM이라는 시스템이 유니티 뿐만 아니라 다른 종류의 게임 엔진도 지원한다는 것입니다.

그렇기 때문에 굳이 유니티 개발자가 아니더라도 지금 사용하는 게임 엔진에 도입해보는 것도 나쁘지 않을 것입니다.

비용

플라스틱 SCM는 기본적으로 사용자 3명과 월 5GB의 데이터 스토리지를 무료로 제공합니다.

5인 이상의 팀이라면 1인당 월 7달러의 추가비용이 책정되고, 데이터 스토리지는 5GB를 초과하여 25GB까지는 월 5달러의 비용이 책정됩니다.

그리고 25GB 이후로는 데이터 량이 25GB가 증가할 때마다 5달러가 추가됩니다.

플라스틱 결제 정보 등록 및 유니티 조직 만들기

대략적인 설명이 끝났으니 플라스틱을 사용하기 위해 결제 정보를 등록하고 유니티 조직을 만들어보겠습니다.

먼저 구글에서 플라스틱 SCM을 검색해서 웹 사이트에 접속하고 무료로 시작하기 버튼을 누릅니다.

그러면 결제 창이 뜨는데 비용이 0으로 뜨는 것을 볼 수 있습니다.

Sign in to continue 버튼을 클릭합니다.

유니티 로그인을 하지 않은 상태라면 로그인을 진행하고 기존에 가진 유니티 조직이 있다면 그것을 선택하면됩니다.

기존 조직이 없다면 새로운 조직을 만들고 절차를 계속 진행합니다.

그 다음에는 본인의 결제 정보를 입력하고 진행합니다.

결제가 완료되면 Complete Onboarding 버튼을 눌러줍니다.

그러고 나면 유니티 게이밍 서비스 대시보드가 열립니다.

결제 정보가 등록된 상태기 때문에 여러분이 플라스틱을 사용하다 무료 사용분을 초과하게 되면 자동으로 결제가 됩니다.

그러므로 테스트로 사용하실 때는 대시보드를 확인하면서 추가 결제가 발생하지 않도록 주의를 기울여야 합니다.

이렇게 하면 기본적인 준비는 끝났습니다.

플라스틱 워크스페이스 만들기

이제 플라스틱을 유니티에서 사용하는 방법을 알아보겠습니다.

유니티 허브를 실행하고 플라스틱을 테스트하기 위한 프로젝트를 생성합니다.

유니티가 실행되고 나면 화면의 좌측 상단에 육각형 모양에 P가 적힌 플라스틱 SCM 버튼을 볼 수 있습니다.

이 버튼을 누르면 플라스틱 SCM 뷰가 열립니다.

여기서 로그인 or Sign up 버튼을 눌러줍니다.

그러면 창이 하나 뜨는데 여기서 플라스틱 SCM을 사용할 유니티 조직을 선택해줍니다.

그 다음에는 [Create workspace] 버튼을 클릭합니다.

여기서는 필요에 따라 워크스페이스의 설정을 바꿀 수 있습니다.

보통은 내용을 바꿀 필요없이 이어서 [Create workspace] 버튼을 눌러주면 됩니다.

기본 기능

워크스페이스가 생성되고 나면 플라스틱 SCM 창이 이렇게 변합니다.

플라스틱 창에서 제일 앞에 있는 Pending Change 탭에서는 현재 내가 프로젝트에 변경한 작업 내용들이 표시됩니다.

변경한 내용 중에 서버에 올리고자 하는 것을 선택하고 변경 내용에 대한 로그를 적은 뒤 [Checkin Changes] 버튼을 누르면 변경사항이 서버에 공유됩니다.

그리고 두 번째 탭인 Incoming Changes 탭에서는 다른 사람이 공유한 내용을 받을 수 있습니다.

현재는 다른 사람이 공유한 내용이 없어서 아무 것도 없지만, 다른 사람이 작업을 공유하면 여기에 표시되고 아래에 있는 Update workspace 버튼을 누르면 다른 사람의 작업을 업데이트 받을 수 있습니다.

그 다음 Changesets 탭에서는 지금까지 공유된 작업의 히스토리를 볼 수 있습니다.

그리고 Branches 탭에서는 현재 프로젝트에 존재하는 브랜치의 목록을 볼 수 있습니다.

추가로 우측 상단의 톱니바퀴 모양의 버튼을 클릭하고 [Invite Members to workspace]를 선택하면 새로운 개발자를 이 워크스페이스에 초대할 수 있는 창이 뜹니다.

여기서 [Add new user] 버튼을 누르고 초대할 개발자의 이메일을 적어주면 다른 개발자를 이 워크스페이스로 초대할 수 있습니다.

아웃트로

이번 영상에서는 유니티의 버전 컨트롤 시스템인 플라스틱 SCM을 사용하는 기본적인 방법을 알아보았습니다.

이 강좌는 여러분들의 시청과 후원으로 제작되었습니다.

이상 베르의 게임 개발 유튜브였습니다. 감사합니다.

 

[유니티 어필리에이트 프로그램]

아래의 링크를 통해 에셋을 구매하시거나 유니티를 구독하시면 수익의 일부가 베르에게 수수료로 지급되어 채널의 운영에 도움이 됩니다.

 

에셋스토어

여러분의 작업에 필요한 베스트 에셋을 찾아보세요. 유니티 에셋스토어가 2D, 3D 모델, SDK, 템플릿, 툴 등 여러분의 콘텐츠 제작에 날개를 달아줄 다양한 에셋을 제공합니다.

assetstore.unity.com

 

Easy 2D, 3D, VR, & AR software for cross-platform development of games and mobile apps. - Unity Store

Have a 2D, 3D, VR, or AR project that needs cross-platform functionality? We can help. Take a look at the easy-to-use Unity Plus real-time dev platform!

store.unity.com

 

Create 2D & 3D Experiences With Unity's Game Engine | Unity Pro - Unity Store

Unity Pro software is a real-time 3D platform for teams who want to design cross-platform, 2D, 3D, VR, AR & mobile experiences with a full suite of advanced tools.

store.unity.com

 

[투네이션]

 

-

 

toon.at

[Patreon]

 

 

WER's GAME DEVELOP CHANNEL님이 Game making class videos 창작 중 | Patreon

WER's GAME DEVELOP CHANNEL의 후원자가 되어보세요. 아티스트와 크리에이터를 위한 세계 최대의 멤버십 플랫폼에서 멤버십 전용 콘텐츠와 체험을 즐길 수 있습니다.

www.patreon.com

[디스코드 채널]

 

Join the 베르의 게임 개발 채널 Discord Server!

Check out the 베르의 게임 개발 채널 community on Discord - hang out with 399 other members and enjoy free voice and text chat.

discord.com

 

반응형

개발단에 가입하여 베르의 게임 개발 유튜브를 후원해주세요! 

 

베르의 게임 개발 유튜브

안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다! 게임 개발에 도움이 되는 강좌들을 올리는 채널입니다! [투네이션 후원] https://toon.at/donate/637735212761460238 [유니티 어필리에이트

www.youtube.com

 

안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다!

이번 영상에서는 언리얼 엔진에 내장된 퀵셀 브릿지와 메가스캔 에셋에 대해서 알아봅시다.

 

사용 엔진 버전 : 5.0.2

 

타임라인

0:00 인트로

0:11 퀵셀 브릿지

1:16 메가 스캔 에셋

3:26 아웃트로

스크립트

인트로

안녕하세요. 여러분들과 함께 게임 개발을 공부하는 베르입니다.

이번 영상에서는 에픽 게임즈에서 제공되는 퀵셀 브릿지와 메가 스캔 에셋에 대해서 알아보도록 하겠습니다.

퀵셀 브릿지

퀵셀 브릿지는 물체를 직접 스캔하여 만들어진 고퀄리티의 3D 모델과 2D 텍스처를 제공하고 엔진에서 사용하기 쉽게 만들어주는 프로그램입니다.

원래는 별개의 회사에서 제공되는 서비스였는데 2019년에 에픽 게임즈에서 퀵셀사를 인수했고 언리얼 엔진 5에 기본 기능으로 내장되어서 손쉽게 고퀄리티 에셋을 임포트할 수 있게 되었습니다.

그럼 이제 퀵셀 브릿지를 사용하는 방법을 배워보겠습니다.

먼저 언리얼 엔진을 실행하고 프로젝트를 생성합니다.

언리얼 엔진에 내장된 퀵셀 브릿지를 여는 방법은 크게 두 가지가 있습니다.

첫 번째 방법은 상단 메뉴 바에서 [창 > 퀵셀 브리지] 항목을 선택하는 것입니다.

두 번째 방법은 콘텐츠 브라우저에 우클릭한 다음 [퀵셀 콘텐츠 추가] 항목을 선택하는 것입니다.

퀵셀 브릿지가 실행된 다음에는 우측 상단의 버튼을 눌러 에픽 게임즈 계정으로 로그인합니다.

로그인을 하고 나서 브릿지 창을 보면 가장 왼쪽에 에셋을 종류 별로 나눠놓은 목록이 있는 것을 볼 수 있습니다.

메가 스캔 에셋

퀵셀 브릿지에서 제공되는 에셋들은 오브젝트 스캔 기술을 이용해 만들어진 것으로 굉장히 높은 퀄리티를 제공하며 이것을 메가 스캔 에셋이라고 부르고 있습니다.

목록에는 3D에셋, 3D식물, 오브젝트의 표면을 표현하기 위한 머티리얼, 데칼 등의 분류가 있습니다.

여기에서 3D 에셋을 선택하면 그 내부에도 건물, 음식, 역사적 오브젝트, 인테리어, 자연 등 필요한 오브젝트를 찾기 쉽도록 나누어져 있습니다.

여기서 필요한 오브젝트를 찾은 뒤 선택하면 오른쪽 화면 레이아웃에 선택한 오브젝트가 표시되는 것을 볼 수 있습니다.

여기서 이 오브젝트의 대략적인 크기를 알려줍니다.

그리고 아래 쪽에 있는 퀄리티 드롭다운에서 오브젝트의 퀄리티를 결정할 수 있습니다.

언리얼 엔진 5의 나나이트 기능을 사용해서 고퀄리티의 게임을 만들고자 한다면 나나이트 퀄리티를 선택하면 됩니다.

퀄리티를 선택하고 옆에 있는 다운로드 버튼을 누르면 에셋 다운로드가 시작됩니다.

높은 퀄리티를 선택하면 다운로드 시간이 조금 걸리는 편입니다.

에셋의 다운로드가 완료된 다음에는 다운로드 버튼 옆에 있는 Add 버튼을 클릭합니다.

그러면 다운로드받은 에셋들이 현재 실행되고 있는 프로젝트에 임포트됩니다.

브릿지 창을 닫고 돌아가보면 콘텐츠 폴더 안에 있는 [Megascans > 3D Assets] 경로에 에셋이 임포트되어있습니다.

이 에셋을 드래그해서 레벨에 배치하면 고퀄리티의 에셋이 레벨에 잘 배치되는 것을 볼 수 있습니다.

보통의 게임에서는 높은 퀄리티를 달성하면서 게임의 퍼포먼스를 유지하기 위해서 폴리곤 수를 줄이고 노멀맵을 사용하는 등의 여러가지 기법을 사용하게 됩니다.

하지만 언리얼 엔진 5에서는 나나이트 지오메트리라는 기술을 사용해서 폴리곤 수 제한을 상당히 완화시켰습니다.

그래서 뷰포트의 설정을 와이어프레임으로 변경하면 엄청나게 많은 수의 폴리곤을 사용해서 오브젝트가 표현되고 있는 모습을 볼 수 있습니다.

그리고 이번에는 나나이트 시각화 > 트라이앵글로 변경해보면 이 오브젝트가 나나이트 기술이 적용되고 있는 모습을 볼 수 있습니다.

아웃트로

이렇게 에픽 게임즈에서는 AAA 퀄리티 게임의 인디화라는 목표를 가지고 고퀄리티의 에셋들을 무료로 제공하고 있습니다.

여러분들도 이런 고퀄리티의 에셋을 이용해서 여러분만의 AAA게임 제작에 도전해보실 수 있습니다.

이번 영상에서는 언리얼 엔진에 내장된 퀵셀 브릿지와 메가 스캔 에셋에 대해서 알아보고 메가 스캔 에셋을 언리얼 프로젝트에 임포트 하는 방법을 알아보았습니다.

이 강좌는 시청자 여러분들의 시청과 후원으로 제작되었습니다.

이상 베르의 게임 개발 유튜브였습니다. 감사합니다.

 

[투네이션]

 

-

 

toon.at

[Patreon]

 

WER's GAME DEVELOP CHANNEL님이 Game making class videos 창작 중 | Patreon

WER's GAME DEVELOP CHANNEL의 후원자가 되어보세요. 아티스트와 크리에이터를 위한 세계 최대의 멤버십 플랫폼에서 멤버십 전용 콘텐츠와 체험을 즐길 수 있습니다.

www.patreon.com

[디스코드 채널]

 

Join the 베르의 게임 개발 채널 Discord Server!

Check out the 베르의 게임 개발 채널 community on Discord - hang out with 399 other members and enjoy free voice and text chat.

discord.com

 

반응형

개발단에 가입하여 베르의 게임 개발 유튜브를 후원해주세요! 

 

베르의 게임 개발 유튜브

안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다! 게임 개발에 도움이 되는 강좌들을 올리는 채널입니다! [투네이션 후원] https://toon.at/donate/637735212761460238 [유니티 어필리에이트

www.youtube.com

안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다!

이번에는 앞에서 만든 와이어 수리 임무 UI를 게임과 직접 연결해봅시다.

 

사용 엔진 버전 : 2019.4

 

타임라인

0:00 인트로

0:12 초기화 기능 추가

0:32 닫힘 기능 만들기

1:44 임무 오브젝트 배치와 UI 연결

6:23 아웃트로

스크립트

인트로

안녕하세요. 여러분들과 함께 게임 개발을 공부하는 베르입니다.

지난 시간까지는 와이어 수리하기 임무의 기본 구성을 만들었으니 이제 이 기능을 본격적으로 게임과 연결해보겠습니다.

초기화 기능 추가

먼저 게임에서 임무창이 꺼졌다가 켜졌을 때 내용이 다시 초기화되는 기능을 만들어야 합니다.

FixWiringTask 스크립트를 열겠습니다.

그리고 OnEnable 함수에서 LeftWires 리스트에 들어있는 왼쪽 와이어들을 대상으로 연결을 초기화하는 코드를 작성합니다.

닫힘 기능 만들기

그 다음으로는 임무를 완료하거나 도중에 그만 뒀을 때 UI가 닫히도록 만들 차례입니다.

Open 함수와 Close 함수를 만들어줍니다.

이 Open 함수에서는 임무 UI를 켜는 것은 물론 도중에 캐릭터가 움직이지 않도록 IsMoveable을 false로 바꾸는 작업도 해야합니다.

Close 함수는 Open 함수와 반대로 동작하도록 만들면 됩니다.

그 다음에는 CheckCompleteTask 함수를 만들고 와이어를 검사해서 모든 와이어가 연결된 상태에서만 UI가 닫히도록 코드를 작성합니다.

그리고 이 함수는 Update 함수에서 오른쪽 와이어와 연결되고 끊어지는 순간마다 검사하도록 만들어줍니다.

코드를 모두 작성한 다음에는 저장하고 에디터로 잠시 돌아갑니다.

에디터에서는 Task UI 오브젝트 아래에 이미지를 하나 추가하고 화면 전체를 덮게 만들어 줍니다.

그리고 거기에 Button 컴포넌트를 붙이고 Transition을 None으로 바꾼 뒤 OnClick 이벤트에 FixWiring의 Close 함수를 등록해줍니다.

임무 배치하기

이제 임무를 실행하기 위한 오브젝트를 배치할 차례입니다.

먼저 맵이 잘 보이도록 만들기 위해 하이어라키 뷰에서 캔버스와 라이트맵 오브젝트를 꺼줍니다.

그리고 맵 리소스에서 관리실의 전선함 이미지를 찾아서 관리실 복도에 배치해주고 머티리얼을 M_Highlight로 변경해줍니다.

그 다음엔 배치한 스프라이트를 복제해서 원본의 자식 컴포넌트로 만들고 크기를 살짝 키운 뒤 Order in Layer를 원본 스프라이트보다 뒤로 가도록 설정해줍니다.

그리고 스프라이트 렌더러의 머티리얼에 전에 만든 M_Outline 머티리얼을 할당해줍니다.

BoxCollider2D 컴포넌트도 붙여주고 Is Trigger를 체크한 뒤 복도를 적당히 커버하도록 콜라이더의 크기와 위치를 수정합니다.

그리고 Sprite Renderer 컴포넌트를 비활성화 시켜줍니다.

이제 이 콜라이더에 캐릭터가 닿았을 때 색을 변경하도록 기능을 만들어야 하는데, 이전에 만든 OutlineObject 스크립트를 조금 확장하도록 하겠습니다.

OutlineObject 스크립트를 찾아서 열어줍니다.

스크립트가 열리고 나면 SpriteRenderer 변수의 지정자를 protected로 변경해줍니다.

그리고 OnTriggerEnter2D, OnTriggerExit2D 이벤트 함수들 역시 protected로 지정자를 변경하고 virtual 키워드를 붙여줍니다.

그 다음에는 잠시 에디터로 돌아가서 MissionOutlineObject라는 이름으로 새 스크립트를 생성합니다.

스크립트 생성이 완료된 다음에는 클래스의 상속을 MonoBehaviour에서 OutlineObject로 바꿔줍니다.

실제 기능은 나중에 구현하도록 하고 저장하고 에디터로 돌아가서 앞에서 만든 아웃라인 오브젝트에 컴포넌트를 붙여줍니다.

그 다음에는 FixWiringTaskObject 스크립트를 생성하고 스크립트 에디터를 엽니다.

이 스크립트에서는 먼저 Sprite 타입의 UseButtonSprite와 SpriteRenderer 타입의 SpriteRenderer 변수를 선언해줍니다.

그리고 Start 함수에서는 GetComponent 함수로 게임오브젝트에 부착된 SpriteRenderer를 가져오고 가져온 SpriteRenderer로부터 머티리얼을 인스턴싱하도록 코드를 작성해줍니다.

그 다음에는 OnTriggerEnter2D와 OnTriggerExit2D 이벤트 함수를 만들어줍니다.

이 두 함수에서는 IngameCharacterMover의 접근을 감지해서 머티리얼의 _Highlighted 값을 바꾸도록 해줍니다.

그 다음에는 IngameUIManager로 이동합니다.

그리고 스크립트의 상단에 UnityEngine.UI 네임스페이스와 UnityEngine.Events 네임스페이스를 using 선언해줍니다.

그리고 멤버 변수로 Button 타입의 useButton과 Sprite 타입의 originUseButtonSprite를 선언해줍니다.

그 다음에는 SetUseButton 함수를 만들고 useButton의 sprite를 교체한 뒤 버튼에 이벤트를 등록해줍니다.

이어서 UnsetUseButton 함수를 만들고 useButtone을 원상태로 돌리는 코드를 작성해줍니다.

이 함수들을 작성하고 난 다음에는 FixWiringTaskObject 스크립트로 이동해서 OnTriggerEnter2D와 OnTriggerExit2D 함수에서 호출하도록 만들어 줍니다.

<재녹음>이때 버튼 이벤트에 등록할 OnClickUse 함수를 만들어두겠습니다.

그리고 IngameUIManager 스크립트으로 이동해서 fixWiringTask 변수를 만들어서 캐싱이 가능하게 만들어줍니다.

다시 FixWiringTaskObject 스크립트로 돌아가서 OnClickUse 함수에서 FixWiringTask UI를 열도록 코드를 작성합니다.

코드를 모두 작성한 다음에는 저장하고 에디터로 돌아갑니다.

에디터로 돌아온 다음에는 앞에서 맵에 배치해둔 전선함 스프라이트 오브젝트에 콜라이더를 배치하고 위치를 잡아준 뒤 Is Trigger 체크해줍니다.

그리고 FixWiringTaskObject 컴포넌트를 붙이고 스프라이트 프로퍼티에 Use 버튼 스프라이트를 넣어줍니다.

그 다음에는 IngameUIManager 컴포넌트에 비어있는 프로퍼티들을 채워줍니다.

작업을 모두 마친 다음에는 게임을 빌드하고 실행해서 테스트합니다.

테스트를 진행해보면 전선함 근처에 다가가면 오브젝트가 강조되고 Use 버튼이 활성화됩니다.

그리고 버튼을 누르면 와이어 연결 임무 UI가 뜨고 전선을 모두 알맞게 연결하면 UI가 꺼지는 모습을 볼 수 있습니다.

아웃트로

이번 영상에서는 맵에 전선함 오브젝트를 만들고 앞에서 만든 와이어 연결 임무 UI와 연결해보았습니다.

이 강좌는 시청자 여러분들의 시청과 후원으로 제작되었습니다.

이상 베르의 게임 개발 유튜브였습니다. 감사합니다.

 

[유니티 어필리에이트 프로그램]

아래의 링크를 통해 에셋을 구매하시거나 유니티를 구독하시면 수익의 일부가 베르에게 수수료로 지급되어 채널의 운영에 도움이 됩니다.

 

에셋스토어

여러분의 작업에 필요한 베스트 에셋을 찾아보세요. 유니티 에셋스토어가 2D, 3D 모델, SDK, 템플릿, 툴 등 여러분의 콘텐츠 제작에 날개를 달아줄 다양한 에셋을 제공합니다.

assetstore.unity.com

 

Easy 2D, 3D, VR, & AR software for cross-platform development of games and mobile apps. - Unity Store

Have a 2D, 3D, VR, or AR project that needs cross-platform functionality? We can help. Take a look at the easy-to-use Unity Plus real-time dev platform!

store.unity.com

 

Create 2D & 3D Experiences With Unity's Game Engine | Unity Pro - Unity Store

Unity Pro software is a real-time 3D platform for teams who want to design cross-platform, 2D, 3D, VR, AR & mobile experiences with a full suite of advanced tools.

store.unity.com

[투네이션]

 

-

 

toon.at

[Patreon]

 

WER's GAME DEVELOP CHANNEL님이 Game making class videos 창작 중 | Patreon

WER's GAME DEVELOP CHANNEL의 후원자가 되어보세요. 아티스트와 크리에이터를 위한 세계 최대의 멤버십 플랫폼에서 멤버십 전용 콘텐츠와 체험을 즐길 수 있습니다.

www.patreon.com

[디스코드 채널]

 

Join the 베르의 게임 개발 채널 Discord Server!

Check out the 베르의 게임 개발 채널 community on Discord - hang out with 399 other members and enjoy free voice and text chat.

discord.com

 

반응형

개발단에 가입하여 베르의 게임 개발 유튜브를 후원해주세요! 

 

베르의 게임 개발 유튜브

안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다! 게임 개발에 도움이 되는 강좌들을 올리는 채널입니다! [투네이션 후원] https://toon.at/donate/637735212761460238 [유니티 어필리에이트

www.youtube.com

안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다!

이번에는 언리얼 엔진 5에서 입력을 받는 방법을 알아보도록 합시다!

 

사용 엔진 버전 : 5.0.2

 

타임라인

0:00 인트로

0:09 입력

0:25 액션 입력과 축 입력

0:48 매핑과 바인딩

1:14 입력 매핑 만들기

2:23 기능 구현과 바인딩

6:26 아웃트로

스크립트

인트로

안녕하세요. 여러분들과 함께 게임 개발을 공부하는 베르입니다.

이번 영상에서는 언리얼 엔진에서 입력을 받는 방법을 알아보도록 하겠습니다.

입력

게임은 입력 장치를 통해서 플레이어의 입력을 받아 게임과 상호작용을 하고 게임의 반응을 출력 장치로 돌려주는 것을 기본적인 로직으로 합니다.

그렇기 때문에 언리얼 엔진으로 게임을 만들기 위해서는 사용자로부터 기본적인 입력을 받도록 기능을 구현하는 방법을 알아야 합니다.

액션 입력과 축 입력

언리얼 엔진에서는 입력을 크게 두 가지로 구분합니다.

바로 액션 입력과 축 입력입니다.

먼저 액션 입력은 점프나 공격, 상호작용을 할 때처럼 마우스 버튼이나 스페이스 바, E키를 누르는 것 처럼 간단하게 눌렀다가 떼는 입력을 의미합니다.

그리고 축 입력은 이동이나 마우스 좌표처럼 연속적인 값을 가지는 입력을 의미합니다.

매핑과 바인딩

언리얼 엔진에서 입력을 받기 위해서는 먼저 축이나 액션을 추가하고 그 입력이 어떤 입력인지 이름을 정합니다.

그리고 그 이름으로 동작할 키 입력을 추가해 주는데 이 과정을 매핑이라고 부릅니다.

그 다음에는 클래스에서 입력을 받아서 동작할 함수를 구현하고 이 함수와 입력 매핑을 연결해줍니다.

이 과정을 바인딩이라고 합니다.

한 마디로 언리얼 엔진에서 입력을 받기 위해서는 매핑과 바인딩이라는 과정을 거쳐야 합니다.

입력 매핑 만들기

먼저 언리얼 엔진을 실행하고 C++ 타입으로 시작용 콘텐츠를 포함해서 프로젝트를 생성합니다.

그럼 이제 앞에서 말한 과정대로 입력을 구현해보도록 하겠습니다.

먼저 매핑을 추가해야 합니다.

상단 메뉴바에서 [편집 > 프로젝트 세팅] 항목을 선택해서 프로젝트 세팅 창을 엽니다.

그리고 엔진 섹션에서 입력을 선택합니다.

그리고 바인딩 섹션을 보면 액션 매핑과 축 매핑 항목을 볼 수 있습니다.

여기서 축 매핑에 MoveForward라은 이름의 매핑을 추가하고 W키와 S키를 넣어줍니다.

그리고 W 키가 앞으로 가는 것이라면 S 키는 뒤로 가는 것이기 때문에 스케일을 -1로 설정합니다.

그 다음에는 MoveRight를 추가하고 A키와 D키를 매핑한 다음 A의 스케일을 -1로 설정합니다.

마지막으로 액션 매핑에 Grow를 추가하고 스페이스 바를 매핑해줍니다.

기능 구현과 바인딩

매핑을 추가한 다음에는 기능을 구현하고 만든 기능과 입력 매핑을 바인딩해야 합니다.

프로젝트 세팅 창을 닫고 [툴 > 새로운 C++ 클래스] 항목을 선택해서 C++ 클래스 추가 창을 띄워줍니다.

부모 클래스로는 폰을 선택하고 클래스를 생성합니다.

폰은 언리얼 엔진에서 AI나 플레이어가 조작할 수 있는 오브젝트를 의미합니다.

클래스 생성이 끝나면 헤더 파일에서 MoveForward, MoveRight, StartGrowing, StopGrowing 함수를 추가합니다.

그리고 멤버 변수로는 FVector 타입의 CurrentVelocity와 bool 타입의 bGrowing, USceneComponent* 타입의 OurVisibleComponent를 선언해줍니다.

OurVisibleComponent는 어디서든지 수정할 수 있게 EditAnywhere 지정자를 넣어서 UPROPERTY 매크로를 붙여줍니다.

그 다음엔 소스 파일의 생성자에서 루트 컴포넌트와 OurVisibleComponent에 씬 컴포넌트를 생성해서 넣어주고 OurSceneComponent를 RootComponent에 붙여줍니다.

그리고 MoveForward 함수와 MoveRight 함수를 구현해 줍니다.

이 두 함수는 입력받은 값을 CurrentVelocity에 넣어서 이동 방향 벡터를 만들도록 코드를 구현합니다.

그 다음에는 StartGrowing 함수와 StopGrowing 함수를 구현하고 bGrowing 변수의 값을 바꾸도록 코드를 작성합니다.

여기까지 기능 구현을 마쳤고 이제 이 기능과 입력 매핑을 바인딩할 차례입니다. SetupPlayerInputComponent 함수로 이동합니다.

축 매핑을 바인딩하기 위해서는 InputComponent의 BindAxis 함수를 사용합니다.

액션 매핑은 BindAction 함수를 사용하면 됩니다.

액션 매핑 바인딩에는 InputEvent를 통해서 어떤 입력일 때 기능이 동작할 지를 결정할 수 있습니다.

누를 때, 뗄 때, 두 번 누를 때 등 다양한 조건을 설정할 수 있습니다.

키를 누를 때는 StartGrowing 함수를 호출하게 만들고 키를 뗄 때는 StopGrowing 함수를 호출하게 바인딩합니다.

그 다음에는 Tick 함수로 가서 bGrowing 변수의 상태에 따라서 액터의 크기를 바꾸고 CurrentVelocity 변수로 액터의 위치를 이동시키는 코드를 작성해줍니다.

모든 코드를 작성한 다음에는 저장하고 에디터로 돌아가서 [Ctrl + Alt + F11] 단축키를 눌러서 컴파일시켜 줍니다.

그 다음에는 콘텐츠 브라우저에서 MyPawn 클래스를 찾아서 우클릭하고 [MyPawn 기반 블루프린트 클래스 생성] 항목을 선택해서 블루프린트를 생성합니다.

블루프린트가 생성되서 블루프린트 에디터가 열리면 컴포넌트 패널에서 Our Visible Component를 선택하고 [추가] 버튼을 눌러서 그 아래에 스피어를 추가해줍니다.

그리고 루트 컴포넌트 아래에는 카메라를 추가하고 위치를 조정해줍니다.

블루프린트 수정이 끝나면 블루프린트를 컴파일하고 저장한 다음 블루프린트 에디터를 닫아줍니다.

그 다음에는 우리가 만든 폰을 게임에서 사용하도록 만들 차례입니다.

GameModeBase 클래스를 찾아서 우클릭하고 다시 블루프린트 클래스를 생성해줍니다.

블루프린트 에디터가 열리고 나면 디폴트 폰 클래스를 우리가 만든 BP_MyPawn으로 변경해줍니다.

그리고 블루프린트를 컴파일하고 저장한 다음 블루프린트 에디터를 닫아줍니다.

그 다음에는 메인 툴바의 오른쪽 끝에 있는 설정 버튼을 누르고 월드 세팅을 눌러서 월드 세팅 패널을 열어줍니다.

그리고 여기서 게임 모드를 우리가 만든 것으로 교체해줍니다.

모든 작업이 끝나고 게임을 플레이시켜서 테스트해보면 이동 키로 구체가 움직이고 스페이스 키를 눌렀다가 뗄 때 크기가 커지고 작아지는 모습을 볼 수 있습니다.

아웃트로

이번 영상에서는 언리얼 엔진에서 플레이어의 입력을 받는 방법을 알아보았습니다.

이 강좌는 시청자 여러분들의 시청과 후원으로 제작되었습니다.

이상 베르의 게임 개발 유튜브였습니다. 감사합니다.

 

[투네이션]

 

-

 

toon.at

[Patreon]

 

WER's GAME DEVELOP CHANNEL님이 Game making class videos 창작 중 | Patreon

WER's GAME DEVELOP CHANNEL의 후원자가 되어보세요. 아티스트와 크리에이터를 위한 세계 최대의 멤버십 플랫폼에서 멤버십 전용 콘텐츠와 체험을 즐길 수 있습니다.

www.patreon.com

[디스코드 채널]

 

Join the 베르의 게임 개발 채널 Discord Server!

Check out the 베르의 게임 개발 채널 community on Discord - hang out with 399 other members and enjoy free voice and text chat.

discord.com

 

반응형

개발단에 가입하여 베르의 게임 개발 유튜브를 후원해주세요! 

 

베르의 게임 개발 유튜브

안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다! 게임 개발에 도움이 되는 강좌들을 올리는 채널입니다! [투네이션 후원] https://toon.at/donate/637735212761460238 [유니티 어필리에이트

www.youtube.com

 

안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다!

이번에는 유니티 에디터의 레이아웃에 대해서 알아봅시다.

 

사용 엔진 버전 : 2020.3

 

타임라인

0:00 인트로

0:09 유니티 에디터 레이아웃

0:26 씬 뷰

1:09 하이어라키 뷰

1:50 프로젝트 뷰

2:39 인스펙터 뷰

3:03 게임 뷰

3:34 콘솔 뷰

3:53 그 외

4:09 레이아웃 변경

4:46 레이아웃 저장

5:39 아웃트로

스크립트

인트로

안녕하세요. 여러분들과 함께 게임 개발을 공부하는 베르입니다.

이번 영상에서는 유니티 에디터의 기본 레이아웃에 대해서 알아보겠습니다.

유니티 에디터 레이아웃

우선 유니티 에디터의 기본 레이아웃을 살펴보기 위해 유니티 엔진을 실행하겠습니다.

처음 실행했을 때 유니티 에디터의 레이아웃은 이렇게 되어 있을 것입니다.

유니티 에디터 화면 안에 있는 각 패널들을 유니티에서는 보통 뷰라고 부릅니다.

그럼 이 뷰들에 대해서 알아보도록 하겠습니다.

씬 뷰

제일 먼저 살펴볼 부분은 씬 뷰 입니다.

씬 뷰가 무엇을 하는 뷰인지 알기 위해서는 씬이라는 개념에 대해서 먼저 알아야 하지만 그렇게 어려운 개념은 아닙니다.

유니티에서 씬이라는 것은 쉽게 말해서 게임에서의 맵이나 레벨에 해당합니다.

즉, 씬 뷰는 게임 맵, 혹은 레벨을 보여주는 뷰입니다.

이 씬 뷰를 통해서 게임 레벨에 소품이나 건물 등의 배경 오브젝트들을 배치할 수 있습니다.

간단한 예를 보여드리자면 씬 뷰를 통해서 레벨에 이렇게 오브젝트를 배치하고 움직이거나, 회전시키고, 크기를 조절할 수 있습니다.

그리고 간단한 키보드 마우스 조작으로 씬 내부를 돌아다니면서 씬의 상태를 확인할 수도 있습니다.

하이어라키 뷰

그 다음은 씬 뷰의 왼쪽에 있는 하이어라키 뷰입니다.

하이어라키 뷰는 지금 로드되어 있는 씬과 그 씬에 배치되어 있는 오브젝트들을 계층구조로 보여주는 뷰입니다.

하이어라키 뷰에서는 가장 상단에 SampleScene이라는 이름으로 현재 열려 있는 씬의 이름이 표시되고, 그 아래에 씬에 들어있는 오브젝트들이 나타납니다.

하이어라키 뷰를 통해서 지금 씬에는 Main Camera라는 이름의 카메라와 Directional Light라는 이름의 조명, 좀 전에 배치한 큐브 오브젝트가 배치되어 있는 것을 볼 수 있습니다.

씬에 배치되어 오브젝트가 많거나 오브젝트가 넓게 배치되어 있어서 씬 뷰에서 원하는 오브젝트를 바로 찾기 어려울 때는 이 하이어라키 뷰에서 빠르게 찾아서 그 오브젝트로 이동할 수 있습니다.

프로젝트 뷰

하단에는 프로젝트 뷰가 있습니다.

프로젝트 뷰는 현재 프로젝트에 포함된 텍스처나 모델링, 스크립트, 씬 등의 애셋을 보여주는 뷰입니다.

개발 경험이 많지 않은 경우에는 프로젝트 뷰에 애셋들이 추가되는 대로 중구난방으로 쌓아두는 일이 많습니다.

그렇게 되면 나중에 원하는 에셋을 바로 찾기가 어려운 경우가 생깁니다.

그래서 에셋들을 잘 분류해서 정리해두는 버릇을 들이는게 중요한데 저 같은 경우에는 보통 폴더를 분류 별로 나누는 편입니다.

그래서 제일 자주 쓰이는 씬 폴더를 00_으로 번호를 붙이고, 스크립트 폴더에 01_로 번호를 붙입니다.

그 외의 폴더는 보통 생기는 순서대로 번호를 붙입니다.

이런 식으로 평소에 에셋을 잘 정리해두시면 나중에 필요한 애셋을 찾거나 불필요한 애셋을 정리할 때, 큰 도움이 되며 개발 속도에 긍정적인 영향을 미칩니다.

인스펙터 뷰

가장 오른쪽에 있는 뷰는 인스펙터 뷰입니다.

아마 눈썰미가 좋은 분이라면, 앞에서 다른 뷰를 설명하면서 오브젝트를 선택할 때마다, 인스펙터 뷰의 내용이 바뀌는 것을 얼핏 보셨을 겁니다.

이 인스펙터 뷰는 씬에 배치된 오브젝트를 하이어라키 뷰에서 선택하거나 프로젝트에 포함된 애셋을 프로젝트 뷰에서 선택하면 선택된 오브젝트나 애셋의 정보를 보여주는 역할을 합니다.

게임 뷰

그 다음은 씬 뷰 뒤에 겹쳐져 있는 게임 뷰입니다.

게임 뷰는 씬 뷰처럼 씬을 보여주는 역할을 하지만, 씬 뷰에서는 개발자가 씬 내부를 이리저리 움직이면서 살펴보고 게임 오브젝트를 선택하거나 여러 작업을 할 수 있었던 것과 달리, 씬 안에 배치된 카메라가 보여주는 것만을 볼 수 있는 뷰입니다.

즉, 실제 게임 화면을 미리 보여주는 역할을 하는 것이 게임 뷰입니다.

그리고 이렇게 겹쳐진 씬 뷰와 게임 뷰에서 알 수 있듯이 유니티 에디터의 레이아웃에서는 한 위치에 여러 개의 뷰가 겹쳐질 수도 있습니다.

콘솔 뷰

그 다음은 프로젝트 뷰 뒤에 숨어있는 콘솔 뷰입니다.

콘솔 뷰는 개발자가 기능 테스트를 위해서 출력시킨 로그나, 개발 도중에 발생한 에러, 경고가 출력되는 창입니다.

게임을 개발할 때는 기능이 원하는 대로 잘 동작하는지 확인해야 하는 경우가 많아서 로그를 자주 띄워보기 때문에 콘솔 뷰는 항상 잘 보이는 위치에 두는 것이 좋습니다.

그 외

이 외에도 에디터 상단 메뉴 바에서 Window 메뉴를 선택하여 드롭다운 메뉴를 펼치면 숨겨져 있는 뷰의 목록을 보고 필요한 뷰를 열어서 사용할 수도 있습니다.

유니티의 뷰에 대해서 대략적인 설명을 모두 드렸습니다.

레이아웃 변경

그럼 이제 유니티 에디터의 레이아웃을 바꾸는 방법을 알아봅시다.

유니티 에디터의 레이아웃은 이렇게 뷰의 탭을 잡고 드래그하면 에디터에서 완전히 떼어내거나 다른 곳에 배치할 수 있어서 언제든지 사용자가 사용하기 편한 방식으로 수정할 수 있습니다.

자 그럼 저를 따라서 레이아웃을 한 번 수정해보도록 하겠습니다.

먼저 프로젝트 뷰를 하이어라키 뷰 아래로 옮기고 콘솔 뷰를 씬 뷰 아래로 옮깁니다.

그리고 게임 뷰와 씬 뷰를 동시에 보고 싶기 때문에 씬 뷰를 떼서 게임 뷰 옆으로 옮깁니다.

그 다음에는 각 레이아웃의 크기를 적절하게 수정해줍니다.

레이아웃 저장

이렇게 수정한 레이아웃은 저장해두고 언제든 다시 불러올 수 있습니다.

에디터 우측 상단 제일 구석에 있는 Layout 버튼을 클릭합니다.

이 버튼을 클릭하면 저장된 레이아웃을 불러오거나, 새로 만든 레이아웃을 저장할 수 있습니다.

Save Layout... 버튼을 클릭하면 수정한 레이아웃의 이름을 지어줄 수 있는 대화상자가 뜹니다.

제가 배치한 레이아웃은 좌측부터 게임 뷰, 씬 뷰, 콘솔 뷰가 한 묶음으로 묶여있고, 그다음에 하이어라키 뷰와 프로젝트 뷰, 마지막으로 인스펙터 뷰가 나열되어 있습니다.

각 뷰들이 3-2-1 방식으로 배치되어 있으니 이 레이아웃의 이름은 countdown이라고 하겠습니다.

레이아웃을 저장하고나면 Layout으로 되어 있던 버튼 이름이 Countdown으로 바뀌어 있으며 추가한 Countdown 레이아웃이 드롭다운 목록에 추가되어 있는 것을 확인할 수 있습니다.

이렇게 레이아웃을 저장해두면, 나중에 레이아웃이 바뀌어도 언제든지 손쉽게 자주 사용하는 레이아웃으로 돌아올 수 있습니다.

아웃트로

이번 영상에서는 유니티 에디터의 레이아웃에 대해서 알아보았습니다.

이 강좌는 시청자 여러분들의 시청과 후원으로 제작되었습니다.

이상 베르의 게임 개발 유튜브였습니다. 감사합니다.

 

[유니티 어필리에이트 프로그램]

아래의 링크를 통해 에셋을 구매하시거나 유니티를 구독하시면 수익의 일부가 베르에게 수수료로 지급되어 채널의 운영에 도움이 됩니다.

 

에셋스토어

여러분의 작업에 필요한 베스트 에셋을 찾아보세요. 유니티 에셋스토어가 2D, 3D 모델, SDK, 템플릿, 툴 등 여러분의 콘텐츠 제작에 날개를 달아줄 다양한 에셋을 제공합니다.

assetstore.unity.com

 

Easy 2D, 3D, VR, & AR software for cross-platform development of games and mobile apps. - Unity Store

Have a 2D, 3D, VR, or AR project that needs cross-platform functionality? We can help. Take a look at the easy-to-use Unity Plus real-time dev platform!

store.unity.com

 

Create 2D & 3D Experiences With Unity's Game Engine | Unity Pro - Unity Store

Unity Pro software is a real-time 3D platform for teams who want to design cross-platform, 2D, 3D, VR, AR & mobile experiences with a full suite of advanced tools.

store.unity.com

[투네이션]

 

-

 

toon.at

[Patreon]

 

WER's GAME DEVELOP CHANNEL님이 Game making class videos 창작 중 | Patreon

WER's GAME DEVELOP CHANNEL의 후원자가 되어보세요. 아티스트와 크리에이터를 위한 세계 최대의 멤버십 플랫폼에서 멤버십 전용 콘텐츠와 체험을 즐길 수 있습니다.

www.patreon.com

[디스코드 채널]

 

Join the 베르의 게임 개발 채널 Discord Server!

Check out the 베르의 게임 개발 채널 community on Discord - hang out with 399 other members and enjoy free voice and text chat.

discord.com

 

반응형

+ Recent posts