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

유니티 에셋 스토어에서 인디 이노베이션 세일이 계속되고 있습니다!

 

지난 7월 27일부터 8월 9일까지는 인스퍼레이션 기간으로 개발자의 프로젝트에 영감을 주는 에셋들이라는 컨셉으로 180종의 에셋을 할인했습니다. 그리고 이번 8월 10일부터 8월 22일까지는 개발자의 시간을 절약하고 효율성을 높이기 위한 에셋 180종을 할인하는 스피드 업 할인이 시작되었습니다.

 

컨셉이 바뀌면서 할인되는 에셋의 종류 역시 바뀌었으니 필요한 에셋을 찾아보시고 구매하시면 좋을 듯 합니다.

 

그리고 지난 인스퍼레이션 기간과 마찬가지로 스피드 업 기간에도 인디 이노베이션 세일의 일환으로 구매 금액별 할인 쿠폰이 제공됩니다. 이 쿠폰을 사용하면 일정 금액 이상 구매할 때마다 추가 할인을 받을 수 있습니다. 100달러 이상 구매 시 5% 추가 할인을 받을 수 있고 175달러 이상 구매 시 10%, 250달러 이상 구매시 15% 추가 할인을 받을 수 있습니다. 할인은 세일 중인 항목에 대해서만 적용이 되며, 각 세일 기간마다 쿠폰 코드가 달라지므로 주의하셔야 합니다. 하지만 쿠폰 사용 횟수의 제한이 없으므로 마음껏 사용하셔도 됩니다.

 

이번 인디 이노베이션 세일 스피드 업 기간의 쿠폰 코드는 이것입니다.

 

[스피드 업 기간 추가 할인 코드]

SPEEDUP2022

영상 하단의 링크를 통해서 에셋 스토어에 방문하여 할인하는 에셋들을 살펴본 뒤 필요한 에셋들을 구매하면 됩니다.

이 링크를 통해 에셋을 구매하면 저에게 수수료가 지급됩니다.

물론 이렇게 저에게 수수료가 지급된다고 해서 구매하는 에셋의 비용이 증가한다던가 하지는 않으니 여러분들은 필요한 에셋을 구매하면서 제 채널을 후원해주실 수 있게 됩니다.

 

[인디 이노베이션 스피드 업 세일 에셋 보러가기]

 

당신의 게임 개발 속도를 높이세요 - Asset Store

게임 제작은 시간이 오래 걸리는 작업입니다. 에셋스토어의 에셋으로 개발 프로세스의 속도를 높이세요.

assetstore.unity.com

 

 

 

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

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

 

에셋스토어

여러분의 작업에 필요한 베스트 에셋을 찾아보세요. 유니티 에셋스토어가 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

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

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

 

[패키지 다운로드]

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

 

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

이번에는 유니티에서 JSON을 사용하는 방법에 대해서 알아봅시다.

 

사용 엔진 버전 : 2020.3

 

타임라인

0:00 인트로

0:10 JSON이란?

1:04 JSON 데이터의 기본구조

1:50 JSON 데이터 검사기

2:23 Newtonsoft JSON 라이브러리

3:15 유니티 엔진 .NET 세팅

3:56 오브젝트를 JSON 데이터로

6:50 JSON 데이터를 오브젝트로

7:45 유니티에서 JSON 사용시 주의점

10:11 유니티의 JSONUtility

11:39 Vector3 시리얼라이즈

12:44 모노비헤이비어를 상속받는 클래스의 오브젝트 시리얼라이즈

14:27 JSON 데이터 파일로 저장하기

15:47 파일로 저장한 JSON 데이터 불러오기

16:23 JSON 2 C sharp

17:16 아웃트로

 

[예제]

https://drive.google.com/file/d/1G2e87vkxyG2cFRM0YhUp9mpOATCVBkB1/view?usp=sharing

 

스크립트

인트로

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

이번 영상에서는 유니티에서 JSON을 사용하는 방법에 대해서 알아보도록 하겠습니다.

JSON이란?

JSON을 사용하는 방법에 대해서 알아보기 전에 JSON이 무엇인지 알아보도록 하겠습니다.

JSON은 웹이나 네트워크에서 서버와 클라이언트 사이에 데이터를 주고 받을 때 사용하는 개방형 표준 포맷입니다.

좀 더 쉽게 말해보자면 어떻게 서버와 클라이언트 사이에 데이터를 주고 받을지에 대한 약속 같은 겁니다.

이 JSON이라는 포맷은 텍스트를 사용하기 때문에 사람이 이해하기 쉽다는 장점을 가지고 있습니다.

그래서 유니티에서도 상당히 많이 사용되며, 네트워크 게임을 개발할 때 게임에 필요한 데이터를 주고 받거나, 게임 진행 상황이나 게임 설정을 저장하는 식으로 사용됩니다.

XML이라는 것도 사용 범위가 거의 일치하지만 XML은 JSON에 비해서 가독성이 떨어지고 데이터를 넣거나 꺼내기 위해서 파싱하는 과정이 까다로운데 반해서, JSON은 XML에 비해서 가독성이 좋고 직렬화와 비직렬화 함수를 통해서 오브젝트에서 JSON 데이터로, JSON 데이터에서 오브젝트로 편하게 변환할 수 있다는 장점이 있습니다.

JSON 데이터의 기본 구조

앞서 말했다시피 JSON 데이터는 텍스트로 구성되며 이런 형태의 구조를 가지고 있습니다.

찬찬히 보시면 아시겠지만 JSON의 데이터는 key와 value의 쌍으로 이루어진 데이터로 저장하는데, items와 같이 배열로 된 데이터 역시 저장이 가능하고 객체 안에 객체를 넣는 것도 가능합니다.

그리고 데이터 내용이 문자열로 되어 있기 때문에 사람이 알아보기 매우 쉽습니다.

JSON 데이터에서 중괄호는 객체를 의미하고, 대괄호는 순서가 있는 배열을 나타냅니다.

그리고 JSON은 정수, 실수, 문자열, 불리언, null 등의 데이터 타입을 지원합니다.

추가로 JSON은 주석을 지원하지 않기 때문에, JSON 파일을 사람이 읽고 수정할 수 있도록 할 계획이라면 key의 이름을 명확하게 정해서 이 값이 무엇을 의미하는지 알려주는게 좋습니다.

JSON 데이터 검사기

이런 JSON의 단점으로는 작은 문법 오류에도 민감하게 반응한다는 점입니다.

중간에 중괄호나 대괄호, 콜론, 쉼표가 하나라도 빠지면 JSON 파일이 깨져버리고 문자열 형태인 JSON 데이터를 원하는 데이터로 변환할 수 없게 됩니다.

이런 문제 때문에 구글에서 JSON 검사기를 검색하면 JSON 데이터가 유효한지 검사해주는 웹 페이지들이 많습니다.

JSON 데이터를 작성하고 난 뒤에는, JSON 데이터 파일의 깨짐으로 인한 버그를 막기 위해서 이런 JSON 검사기로 검사하고 사용하는 것이 좋습니다.

Newtonsoft JSON 라이브러리

그럼 이제 유니티에서 JSON을 사용하는 방법을 알아보겠습니다.

유니티에서 JSON을 사용하는 방법은 여러 가지가 있는데 그 중 첫 번째는 Newtonsoft의 라이브러리를 사용하는 것입니다.

먼저 구글에서 Newtonsoft JSON을 검색하면 첫 페이지에서 Json.NET - Newtonsoft 페이지를 찾을 수 있습니다.

이 페이지에 접속하고 Download 버튼을 누른 뒤 아래 쪽에 있는 Json.NET 버튼을 클릭합니다.

그러면 Newtonsoft의 깃허브 페이지로 이동하게 됩니다.

이 릴리즈 페이지에서 최신 버전의 압축 파일을 다운로드 받아줍니다.

다운로드가 완료된 다음에는 받은 파일의 압축을 해제하고 Bin 폴더로 들어가서 이중에 필요한 .NET 버전을 선택합니다.

보통은 .NET 4.5 버전을 선택하면 됩니다.

여기 있는 DLL 파일을 JSON을 사용할 프로젝트 폴더 안으로 옮겨줍니다.

.NET 4.X 이상 세팅

단, 여기서 놓치지 말아야 할 주의 사항이 있습니다.

우리가 임포트한 DLL은 .NET 4버전 이상에서 사용되는 것인데 기본적으로 설정을 건드리지 않은 유니티 엔진은 .NET 2.0을 사용합니다.

그래서 에디터 상태에서는 DLL이 잘 동작하는데 막상 게임을 빌드하면 DLL이 동작하지 않게 됩니다.

이 문제를 수정하기 위해서는 먼저 상단 메뉴 바에서 [Edit > Project Settings] 항목을 선택해서 프로젝트 세팅 창을 열어줍니다.

그리고 Player 항목을 선택하고 Other Settings 카테고리를 보면 Api Compatibility Level 프로퍼티를 볼 수 있습니다.

이 프로퍼티를 .NET 4.X로 변경해줍니다.

오브젝트를 JSON 데이터로

모든 세팅을 마친 다음에는 본격적으로 Newtonsoft의 라이브러리를 사용해보겠습니다.

먼저 해볼 작업은 C# 클래스를 기본으로 생성된 오브젝트에 담긴 데이터를 JSON 데이터로 변환하는 것입니다.

NewtonsoftJsonExample이라는 이름으로 새 스크립트를 생성하고 스크립트 에디터로 이동합니다.

스크립트에서 Newtonsoft JSON 라이브러리를 사용하기 위해서 스크립트의 상단에 Newtonsoft.Json 네임스페이스를 using 선언해줍니다.

이제 Newtonsoft의 JSON 라이브러리를 사용할 준비가 끝났습니다.

본격적인 테스트 이전에 테스트 용도로 사용할 클래스를 하나 정의하겠습니다.

이 클래스에는 JSON에 담을 수 있는 대부분의 타입을 멤버변수로 하나씩 넣도록 하겠습니다.

int, float, bool, string처럼 가장 기본적인 데이터 타입부터 배열, 리스트, 딕셔너리같은 컨테이너 타입, 그리고 사용자가 직접 정의한 클래스 형식도 한 클래스에 묶어서 JSON 데이터로 만들 수 있습니다.

멤버 변수 선언이 끝난 다음에는 생성자에서 각 값을 자동으로 초기화하게 만들어주고 Print 함수를 만들어서 모든 값을 하나씩 출력하는 코드도 작성해줍니다.

JsonTestClass 작성이 끝난 다음에는 NewtonsoftJsonExample클래스의 Start 함수로 이동합니다.

먼저 JsonTestClass의 오브젝트를 생성해서 JSON 데이터로 만들어보겠습니다.

하나의 오브젝트를 문자열인 JSON 데이터로 만드는 과정은 아주 간단합니다.

JsonConvert의 SerializeObject 함수를 호출해서 오브젝트를 매개변수로 넣어주기만 하면 됩니다.

이 과정을 직렬화라고 부릅니다.

이렇게 JSON 데이터로 바뀐 문자열을 출력하게 만든 뒤 코드를 저장하고 에디터로 돌아가서 테스트해보겠습니다.

에디터로 돌아와서는 새 게임 오브젝트를 하나 만들고 방금 만든 컴포넌트를 붙여줍니다.

그리고 게임을 플레이시켜보면 우리가 만든 JsonTestClass의 오브젝트가 문자열로 바뀐 것을 볼 수 있습니다.

문자열로 바뀐 JSON 데이터를 찬찬히 뜯어보면 우리가 클래스의 멤버 변수로 선언해주고 값으로 넣어준 것들이 제대로 문자열로 바뀌어 담긴 것을 확인할 수 있습니다.

JSON 데이터를 오브젝트로

그럼 이제 반대로 문자열로 된 JSON 데이터를 오브젝트로 변환해보겠습니다.

다시 NewtonsoftJsonExample의 Start 함수로 돌아가서 jTest2 변수를 만들고 JsonConvert의 DeserializeObject 함수를 호출해줍니다.

JSON 데이터를 다시 오브젝트로 바꿀 때는 JSON 데이터를 어떤 오브젝트로 변환하는지 명시적으로 함수에 알려줘야합니다.

만약 JSON 데이터가 가진 구조가 함수에 알려준 클래스의 구조와 다르다면 변환 도중에 에러가 발생하기 때문에 잘 확인하고 진행해야 합니다.

JSON 데이터를 다시 오브젝트로 만든 다음에는 변환 확인을 위해서 jTest2의 Print 함수를 호출해줍니다.

코드 작성이 끝나면 코드를 저장하고 에디터로 돌아갑니다.

그리고 게임을 플레이시켜보면 JSON 데이터로 바뀌었던 jTest1의 내용이 정상적으로 JsonTestClass로 바뀌어서 출력되는 것을 볼 수 있습니다.

유니티에서 JSON 사용시 주의점

이번에는 유니티에서 JSON을 사용할 때 주의해야 할 점을 알아보겠습니다.

에디터에서 TestMono라는 이름으로 C# 스크립트를 생성하고 스크립트를 열어줍니다.

그리고 int 타입 멤버 변수만 하나 만들어주고 NewtonsoftJsonExample스크립트로 이동합니다.

이렇게 새 게임 오브젝트를 생성하고 여기에 TestMono를 붙인 다음, 이 TestMono를 가져와서 JSON 데이터로 변환해서 출력하는 코드를 작성합니다.

이 코드의 기본 의도는 클래스에 들어있는 int 타입의 i를 JSON 데이터로 만들어서 저장하려는 것입니다.

하지만 이 코드를 저장하고 에디터로 돌아가서 플레이해보면 전혀 의도대로 동작하지 않고 JsonSerializationException을 발생시킵니다.

로그를 읽어보면 Self Referencing loop, 즉 자기 참조 루프에 빠진 것을 알 수 있습니다.

이 예외는 gameObject에서 gameObject를 호출할 수 있는 순환구조 때문에 생기는 것인데, 이 문제를 해결할 방법은 있지만, 이후에도 다른 예외가 많이 발생하고 몇몇 문제는 해결책이 없기 때문에 Newtonsoft의 JSON 라이브러리로는 모노비헤이비어를 상속받는 클래스의 오브젝트를 JSON 데이터로 시리얼라이즈할 수는 없습니다.

그렇기 때문에 모노비헤이비어를 상속받는 클래스의 오브젝트를 시리얼라이즈하는 대신에 스크립트가 가지고 있는 프로퍼티 중에서 필요한 프로퍼티를 클래스로 묶어서 해당 클래스만 시리얼라이즈 하거나 뒤에서 설명할 유니티가 기본 제공하는 JsonUtility 기능을 사용해서 시리얼라이즈하는 것을 추천합니다.

다음 문제는 Vector3를 시리얼라이즈 하는 문제입니다.

Vector3 역시 간단한 벡터를 담은 클래스를 만들고 시리얼라이즈 하려고 하면 모노비헤이비어를 상속 받은 클래스의 오브젝트를 시리얼라이즈하려고 할 때처럼 Self Referencing loop 문제가 발생합니다.

이것 역시 Vector3의 프로퍼티인 normalized에서 다시 normalized를 호출할 수 있기 때문에 발생하는 문제입니다.

이 문제를 해결하기 위해서는 이렇게 JsonSerializerSetting 오브젝트를 만들고 ReferenceLoopHandling을 Ignore로 설정하고 시리얼라이즈를 해야합니다.

하지만 이런 식으로 레퍼런스 반복을 무시하게 만들어도 normalized 벡터나 벡터의 길이 등의 불필요한 값들이 시리얼라이즈되기 때문에 쓸데없이 JSON 데이터의 길이나 용량이 늘어나는 문제가 생깁니다.

외부 라이브러리를 이용해서 Vector3에서 좌표 값만을 JSON 데이터로 시리얼라이즈하기를 원한다면 이렇게 별도의 시리얼라이즈용 Vector 클래스를 만들어서 시리얼라이즈해야 할 겁니다.

유니티의 JsonUtility

외부 라이브러리인 Newtonsoft의 Json 라이브러리를 알아보았으니 이제 유니티에서 기본 제공되는 JsonUtility를 알아보겠습니다.

그리고 시리얼라이즈와 디시리얼라이즈에 대해서는 앞에서 다 설명했으니 여기서는 한꺼번에 가겠습니다.

먼저 JsonUtilityExample이라는 이름으로 새 C# 스크립트를 생성합니다.

그리고 아까 전에 만들어둔 JsonTestClass 클래스를 이용해서 오브젝트에서 JSON 데이터로 만들겠습니다.

JsonUtility의 ToJson 함수를 사용하면 됩니다.

반대로 JSON 데이터에서 오브젝트로 만들 때는 JsonUtility의 FromJson 함수를 사용하면 됩니다.

나머지는 전부 동일합니다.

다만 JsonUtility의 단점은 기본적인 데이터 타입과 배열, 리스트에 대한 시리얼라이즈만 지원합니다.

그래서 JSON 데이터로 변경된 결과물을 보면 데이터 내에 딕셔너리와 직접 생성한 클래스가 보이지 않는 것을 알 수 있습니다.

직접 생성한 클래스의 경우에는 [System.Serializable] 어트리뷰트를 붙여줘야만 JSON 데이터로 함께 변환되며, 딕셔너리는 아예 지원하지 않습니다.

때문에 딕셔너리를 시리얼라이즈하려면 외부 라이브러리를 사용해야 합니다.

Vector3 시리얼라이즈

이제 유니티의 JsonUtility가 제공하는 특수 기능을 알아보겠습니다.

앞에서도 보았다시피 외부 라이브러리로는 유니티 내장 클래스를 시리얼라이즈할 때 자기 참조 문제가 발생해서 시리얼라이즈가 제대로 이루어지지 않습니다.

특히 Vector3 타입은 유니티에 내장된 클래스로써 위치나 방향을 표시하는데 자주 쓰입니다

그렇기 때문에 이전에 접속한 캐릭터의 마지막 위치 같은 데이터로 저장될 수 있습니다.

하지만 Vector3는 유니티의 JsonUtility나 유니티의 특성에 맞춘 라이브러리가 아닌 일반 JSON 라이브러리를 사용해서 시리얼라이즈를 하면 normalized 프로퍼티로 인해서 Self Reference loop 문제를 발생시킵니다.

이 문제를 해결해도 저장하려고한 좌표값 외에 벡터의 길이와, 제곱 그리고 정규화된 벡터와 그 길이같은 필요하지 않은 정보를 많이 포함하게 됩니다.

하지만 JsonUtility를 사용해서 앞에서 만든 벡터를 담은 클래스로 테스트 해보면 불필요한 값을 제외하고 필요한 좌표만 저장되는 것을 확인할 수 있습니다.

모노비헤이비어를 상속받는 클래스의 오브젝트 시리얼라이즈

그리고 유니티의 JsonUtility를 사용하면 모노비헤이비어를 상속받는 클래스의 오브젝트 역시 시리얼라이즈가 가능합니다.

앞에서 사용한 TestMono 클래스에 간단하게 Vector3 타입의 멤버 변수를 추가하고 JsonUtilityExample의 Start 함수에서 새 게임 오브젝트를 생성하고 거기에 TestMono 컴포넌트를 붙인 뒤 JsonUtility로 시리얼라이즈하는 코드를 작성합니다.

여기서 주의할 점은 모노비헤이비어를 상속받는 클래스의 오브젝트를 시리얼라이즈 할 때는 클래스가 컴포넌트로 붙어있는 게임 오브젝트가 아니라 GetComponent등으로 직접 가져온 클래스의 오브젝트로 시리얼라이즈해야 합니다.

코드를 저장하고 에디터로 돌아가서 테스트해보면 JsonUtility로 모노비헤이비어를 상속받는 클래스의 오브젝트를 시리얼라이즈 했을 때 문제 없이 깔끔하게 오브젝트가 JSON 데이터로 변환되는 모습을 볼 수 있습니다.

그럼 다시 이 데이터를 오브젝트로 변환해보겠습니다.

코드로 돌아가서 FromJson 함수를 사용해서 디시리얼라이즈하는 코드를 작성하고 테스트합니다.

그러면 이렇게 새로운 인스턴스를 생성하지 못했다고 에러가 발생하고 디시리얼라이즈에 실패합니다.

이 문제를 해결하기 위해서는 FromJson 함수 대신에 FromJsonOvewrite 함수를 사용해야 합니다.

이 함수는 JSON 데이터를 오브젝트로 변환할 때 새로운 오브젝트를 만들지 않고 기존에 있는 오브젝트에 클래스의 변수 값을 덮어씌우는 처리를 합니다.

한 마디로 모노비헤이비어를 상속받는 오브젝트의 JSON 데이터를 다시 오브젝트로 만들려면 같은 형태를 가진 오브젝트를 미리 생성한 뒤에 디시리얼라이즈해야 한다는 뜻입니다.

이 기능을 이용하면 게임 내의 오브젝트를 JSON 데이터로 저장해서 게임 진행 상황을 저장하고 다시 불러와서 게임 진행 상황을 원래대로 세팅하는 세이브&로드 기능을 구현할 수 있습니다.

JSON 데이터 파일로 저장하기

그럼 일종의 세이브 파일을 만들기 위해 JSON 데이터로 변환된 정보를 파일로 저장하는 방법을 알아봅시다.

먼저 JsonSaveLoader라는 이름으로 C# 스크립트를 생성합니다.

스크립트 생성이 완료되고 나면 파일 입출력과 문자열 처리를 하기 위해서 스크립트의 상단에 System.IO 네임스페이스와 System.Text 네임스페이스를 using 선언해줍니다.

그리고 Json 기능을 사용하기 위해서 Newtonsoft.Json 네임스페이스도 using 선언합니다.

그리고 Start 함수에서 파일을 저장할 경로와 파일 이름으로 FileStream을 만들어 줍니다.

보통 json 파일은 .json이라는 확장자를 가집니다.

그 다음 문자열인 JSON 데이터를 Encoding.UTF8의 GetBytes 함수로 byte 배열로 만들어줍니다.

그리고 이렇게 만든 데이터를 fileStream에 써줍니다.

코드 작성을 마친 후에 저장하고 에디터로 돌아가서 플레이해보면 지정한 경로에 json 파일이 생성되고 그 내용이 정상적으로 저장된 모습을 볼 수 있습니다.

파일로 저장한 JSON 데이터 불러오기

그 다음은 이렇게 저장한 json 파일을 읽어 들일 차례입니다.

역시 이번에도 FileStream을 생성하되 이번에는 FileMode를 Open으로 설정합니다.

그리고 생성된 fileStream에서 Read로 데이터를 읽어들인 다음, 읽은 데이터를 반대로 string으로 인코딩 해줍니다.

그 다음에 이 문자열을 디시리얼라이즈 해줍니다.

코드를 저장하고 에디터에서 플레이해보면 정상적으로 파일의 JSON 데이터가 로드되어서 오브젝트로 변환되고 오브젝트의 내용이 로그로 출력되는 것을 볼 수 있습니다.

JSON 2 C Sharp

마지막으로 유용한 사이트를 하나 더 추천해드리겠습니다.

보통 서버 단 작업을 하는 개발자와 협업을 하다보면 보통 주고 받는 데이터 타입을 테이블이나 표로 만들어서 주고 받겠지만, 작업이 빠르게 진행되어야 하는 경우에는 그냥 JSON 데이터로 던지고 클라이언트에서 이 JSON 데이터의 구조만 보고 직접 클래스를 짜야하는 경우도 왕왕 발생합니다.

물론 받은 JSON 데이터를 일일이 분석해서 클래스를 짜도 되겠지만 훨씬 간단하고 원터치로 JSON데이터를 클래스로 만드는 방법이 있습니다.

구글에서 JSON 2 C sharp이라고 검색하면 JSON을 바로 C# 클래스로 변환해주는 사이트들이 나옵니다.

이중에서 적당한 사이트를 골라서 접속하고 JSON 데이터를 입력한 뒤 Convert 버튼을 눌러주면 JSON 데이터 구조를 분석해서 자동으로 C# 클래스로 만들어줍니다.

이 코드를 복사해서 클래스 이름만 원하는 대로 바꿔서 사용하면 됩니다.

아웃트로

이번 영상에서는 유니티에서 JSON을 다루는 방법을 알아보았습니다.

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

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

 

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

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

 

에셋스토어

여러분의 작업에 필요한 베스트 에셋을 찾아보세요. 유니티 에셋스토어가 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

 

반응형

'Unity3D > Programming' 카테고리의 다른 글

[Unity] JSON  (0) 2022.04.05
[Unity] Time 클래스 통합본  (0) 2021.12.27
[Unity] Time.time & Time.realtimeSinceStartup & Time.timeSinceLevelLoad  (0) 2021.12.07
[Unity] timeScale과 unscaledDeltaTime  (0) 2021.11.29
[Unity] Time.deltaTime  (0) 2021.11.22
[Unity] 인보크(Invoke)  (0) 2021.07.12

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

 

베르의 게임 개발 유튜브

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

www.youtube.com

 

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

이번에는 전선 수리하기 임무에서 전선에 색을 입히고 같은 색 전선끼리 연결되었을 때 불빛이 들어오는 기능을 만들어봅시다!

 

예제 : https://drive.google.com/file/d/1W_xeHVrH7KueNOgW-HRGONCs5qFVlsFA/view?usp=sharing

 

사용 엔진 버전 : 2019.4

 

타임라인

0:00 인트로

0:09 각 와이어에 색깔 입히기

2:25 와이어를 연결했을 때 불 들어오게 하기

5:50 아웃트로

스크립트

인트로

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

이번에도 지난 시간에 이어서 임무를 만들어 보겠습니다.

각 와이어에 색깔 입히기

지난 영상에서는 끊어진 전선을 연결하는 기능을 만들었으니 각 전선이 어디에 연결되어야 하는지 알려주기 위해서 전선들에 색깔을 부여해보겠습니다.

먼저 FixWiringTask 스크립트로 이동해서 연결되어야 하는 전선의 색을 표시하는 WireColor 열거형을 선언해줍니다.

그리고 그 다음에는 LeftWire 스크립트로 이동해서 방금 만든 WireColor 열거형 타입을 이용한 프로퍼티를 선언하고 색을 입혀줄 전선 이미지들을 담고 있을 List<Image> 멤버 변수를 선언해줍니다.

멤버 변수 선언을 한 다음에는 SetWireColor 함수를 만들고 매개변수로 받은 색상 값에 따라 이미지의 색을 변경하도록 코드를 작성합니다.

그 다음에는 RightWire 스크립트로 이동해서 같은 멤버 변수와 함수를 만들어줍니다.

RightWire 스크립트에서 작업을 끝낸 다음에는 다시 FixWiringTask 스크립트로 돌아가서 OnEnable 함수를 만들고 왼쪽 와이어와 오른쪽 와이어에 랜덤으로 색을 입히도록 만들어줍니다.

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

에디터로 돌아온 다음에는 각 와이어의 컴포넌트에 이미지들을 할당해줍니다.

그 다음 게임을 플레이시켜보면 양 쪽의 전선에 랜덤하게 색상이 입혀지는 모습을 볼 수 있습니다.

와이어를 연결했을 때 불 들어오게 하기

전선의 색을 입히는 작업까지 마쳤으니 이제 색이 맞는 전선끼리 올바르게 연결되었을 때, 전선 위에 불빛이 들어오게 만들 차례입니다.

먼저 LeftWire 스크립트로 이동해서 Image 타입으로 불빛이 들어올 이미지와 RightWire 타입으로 연결된 오른쪽 와이어를 담을 변수, 그리고 bool 타입의 IsConnected 프로퍼티를 선언해줍니다.

그 다음에는 ConnectWire 함수를 만들고 두 전선의 색이 같으면 LightImage의 색을 변경하고 IsConnected 프로퍼티도 true로 변경해줍니다.

그리고 DisconnectWire 함수도 만들어서 연결이 끊어졌을 때 상태를 원래대로 돌리는 코드도 작성해줍니다.

그 다음에는 RightWire 스크립트로 이동해서 bool 타입의 IsConnected 프로퍼티와 Image 타입의 LightImage, 그리고 List<LeftWire> 타입으로 연결된 와이어들을 담을 변수를 선언합니다.

그리고 여기에서도 ConnectWire 함수와 DisconnectWire 함수를 만들어줍니다.

RightWire의 ConnectWire 함수에서는 여러 개의 LeftWire가 연결될 수 있기 때문에 List에서 연결된 와이어의 갯수와 함께 연결된 와이어의 색상을 검사한 뒤 불빛 이미지와 IsConnected를 변경해줍니다.

그리고 DisconnectWire 함수에서도 마찬가지로 연결된 와이어의 갯수가 1개이며 연결된 와이어와 현재 와이어의 색이 같은 경우에만 연결된 상태로 보도록 코드를 작성합니다.

나머지 경우는 불을 끄고 연결 해제하도록 코드를 작성하면 됩니다.

함수를 완성한 다음에는 FixWiringTask 스크립트의 Update 함수로 이동해서 각 상황에 맞게 만든 함수들을 호출해줍니다.

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

에디터로 돌아온 다음에는 모든 와이어 객체의 LightImage에 각자 불빛 이미지를 할당해줍니다.

그 다음에 게임을 플레이시켜서 테스트해보면 잘 동작해야 하는데 약간 문제가 있습니다.

색상이 다른 와이어에 연결했다가 바로 다른 색 와이어에 연결하면 이전에 연결했던 오른쪽 와이어가 제대로 동작하지 않게 됩니다.

RightWire 스크립트로 돌아가서 연결된 와이어 리스트를 인스펙터에서 볼 수 있게 SerializedField 어트리뷰트를 붙여주겠습니다.

그리고 게임을 플레이시켜서 다시 테스트해보면 예상대로 연결을 완전히 떼지 않고 다른 와이어에 연결했을 때 리스트가 제대로 초기화되지 않는 모습을 볼 수 있습니다.

플레이를 중단하고 LeftWire 스크립트의 ConnectWire 함수로 이동해서 연결된 와이어가 비어있지 않고 매개변수로 받은 오른쪽 와이어가 현재 연결된 와이어가 아니라면 와이어 연결을 끊도록 코드를 작성해줍니다.

수정이 끝나면 저장하고 다시 에디터로 돌아갑니다.

그리고 게임을 플레이시켜보면 모든 와이어가 1:1로 같은 색상 와이어끼리 연결되었을 때만 불빛이 들어오는 모습을 확인할 수 있습니다.

아웃트로

이번 영상에서는 와이어 연결하기 임무에서 와이어들에게 무작위로 색상을 부여하고 같은 색상을 가진 와이어끼리 연결했을 때, 불빛이 들어오도록 하는 기능을 구현해보았습니다.

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

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

 

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

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

 

에셋스토어

여러분의 작업에 필요한 베스트 에셋을 찾아보세요. 유니티 에셋스토어가 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

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

이번에는 서로 다른 3D 모델의 애니메이션을 가져와서 적용할 수 있는 애니메이션 리타게팅 기술에 대해서 알아보겠습니다.

 

사용 엔진 버전 : 2020.3

 

타임라인

0:00 인트로

0:10 3D 애니메이션 제작 과정

1:06 애니메이션 리타게팅

1:48 유니티의 애니메이션 리타게팅

4:03 아웃트로

스크립트

인트로

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

이번에는 유니티에서 제공하는 애니메이션 리타게팅에 대해서 알아보도록 하겠습니다.

애니메이션 제작

애니메이션 리타게팅이라는 기술에 대해서 알아보기 전에 3D 애니메이션 제작 과정에 대해서 얘기해보겠습니다.

3D 애니메이션을 만들기 위해서는 먼저 당연하게도 애니메이션을 입힐 3D 모델을 만들어야 합니다.

그리고 이 3D 모델을 완성하고 나면 모델을 움직이게 하기 위한 뼈대인 본을 심고, 각 본이 3D 모델의 버텍스에 미칠 영향의 범위를 설정해줘야 합니다.

이 과정을 스키닝, 혹은 리깅이라고 부릅니다.

리깅을 모두 마친 다음에야 리깅 과정을 마친 3D 모델을 기준으로 캐릭터가 움직이는 모션을 만들게 됩니다.

모션을 만들 때는 프레임 단위로 키를 잡아주게 되는데 이 과정에서 애니메이션을 자연스럽게 만들려면 그만큼 많은 수고가 들게 됩니다.

하나의 동작을 만들 때마다 리깅된 3D 모델을 가져와서 프레임 단위로 키를 잡아주는 힘든 과정을 캐릭터의 애니메이션 하나를 만들 때마다 계속 반복해줘야하는 것이죠.

모든 3D 캐릭터를 만들 때마다 새로 애니메이션을 만드는 일은 굉장히 반복적이고 힘든 일입니다.

애니메이션 리타게팅

그래서 개발자들은 생각했습니다.

이미 만든 애니메이션을 조금만 손봐서 새로 만든 3D 모델 캐릭터에 입히면 좀 더 쉽게 애니메이션을 만들 수 있지 않을까? 하고 말입니다.

캐릭터만의 특징이 드러나는 동작이 아닌 숨쉬기, 걷기, 물마시기, 달리기, 이런 기본적인 동작을 매번 캐릭터를 새로 만들 때마다 다시 만들기에는 사용되는 인력에 비해 낭비로 여겨지기 충분했습니다.

그리고 기본적인 사람 형태의 캐릭터들은 똑같이 하나의 머리, 척추, 골반, 두 팔, 두 다리, 이렇게 공통적인 형태를 가지고 있습니다.

그래서 기본적인 사람 형태의 공통점을 이용해서 애니메이션을 돌려쓸 수 있도록 만든 기술, 그것이 바로 애니메이션 리타게팅입니다.

유니티의 애니메이션 리타게팅

그럼 이제 유니티에서 애니메이션 리타게팅을 사용하는 모습을 보도록 하겠습니다.

먼저 에셋 스토어에서 유니티 짱 에셋과 Mixamo사의 Magic Pack을 내 에셋에 추가해줍니다.

그리고 유니티 에디터에서 패키지 매니저를 열고 두 에셋을 찾아서 임포트 시켜줍니다.

그 후에 유니티 짱의 데모 씬과 Mixamo Magic Pack의 데모 씬을 살펴보면 서로 다른 캐릭터의 애니메이션을 확인할 수 있습니다.

만약 유니티 짱 캐릭터로 마법을 사용하는 게임을 만들려고 할 때, 애니메이션 리타게팅 기술이 없다면 이 수 많은 애니메이션을 모두 새로 만들어야 할 겁니다.

하지만 애니메이션 리타게팅이 있는 한 우리는 손쉽게 이 마법사 애니메이션을 유니티 짱에게 적용할 수 있습니다.

그 전에 먼저 유니티에서 애니메이션 리타게팅을 사용하기 위해서는 한 가지 제약사항이 있습니다.

그것은 바로 3D 모델과 애니메이션이 사람 형태로 제작된 휴머노이드 형태일 것입니다.

그래서 유니티 짱과 마법사 애니메이션 팩 데모에 사용되는 사람 형태 모델을 찾아서 선택하고 Rig 탭을 보면 애니메이션 타입이 Humanoid로 되어 있는 것을 볼 수 있습니다.

애니메이션을 적용할 3D 모델과 애니메이션이 포함된 FBX 파일의 애니메이션 타입이 모두 Humanoid여야 애니메이션 리타게팅 적용이 가능합니다.

그럼 이제 마법사 애니메이션을 유니티 짱에게 입혀보겠습니다.

마법사 애니메이션 데모 씬을 열고 마법사 애니메이션 모델 앞에 유니티 짱을 배치해줍니다.

그리고 유니티 짱의 애니메이터 컨트롤러를 바로 뒤에 있는 마법사 애니메이션 모델의 애니메이터 컨트롤러로 교체해줍니다.

물론 애니메이터 컨트롤러를 새로 만들어서 마법사 애니메이션으로 구성한 뒤에 넣어도 됩니다.

이렇게 유니티 짱 캐릭터에 마법사 애니메이션을 넣은 뒤 게임을 플레이시켜보면 아주 간단하게 애니메이션이 적용되는 것을 볼 수 있습니다.

아웃트로

여담으로 개나 고양이, 말 같은 동물들 역시 각 종류 별로 공통적인 동작이 많은 편이기 때문에 애니메이션 리타게팅이 적용되면 좋은 대상입니다.

그래서 동물에도 애니메이션 리타게팅을 적용하게 위해서 3D 맥스에서 제공되는 사람 형태의 본 구조인 바이패드를 동물 형태로 왜곡해서 사용하는 경우가 자주 있습니다.

이것 덕분에 가능한게 바로 스카이림의 스파이더맨이죠.

이번 영상에서는 유니티의 애니메이션 리타게팅에 대해서 알아보았습니다.

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

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

 

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

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

 

에셋스토어

여러분의 작업에 필요한 베스트 에셋을 찾아보세요. 유니티 에셋스토어가 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