에셋스토어의 상반기 빅세일! 스프링세일을 맞아 유니티 유튜버 베르님과 함께 몇가지 에셋을 함께 살펴봅니다. 방송에서 소개드릴 에셋은 아래와 같습니다.

 

👇 Show More 클릭! 👇

1. Fluffy Grooming Tool​

2. Destructible 2D

3. AAA Projectiles Vol.2

4. RT-Voice PRO

5. KWS Water System (Standard Rendering)

6. Pure Nature

7. Amplify Impostors

8. Weather Maker - Volumetric Clouds and Weather System for Unity

9. Space Graphics Toolkit​

 

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

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

 

에셋스토어

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

 

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

지난 블랙 프라이데이 세일에 이어서 이번 스프링 세일 라이브커머스도 진행을 맡게 되었습니다!

 

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

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

 

에셋스토어

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

 

반응형

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

 

베르의 게임 개발 유튜브

안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다! 게임 개발에 도움이 되는 강좌들을 올리는 채널입니다! [투네이션 후원] 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

 

반응형

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

 

베르의 게임 개발 유튜브

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

www.youtube.com

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

이번에는 유니티에서 머티리얼을 다룰 때 알아두면 좋을 머티리얼 인스턴싱에 대해서 알아봅시다.

 

사용 엔진 버전 : 2020.3

 

타임라인

0:00 인트로

0:11 기본 머티리얼

1:25 머티리얼 인스턴싱

3:06 아웃트로

스크립트

인트로

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

이번에는 유니티에서 머티리얼을 다룰 때 알아두면 좋을 머티리얼 인스턴싱에 대해서 알아보겠습니다.

기본 머티리얼와 오브젝트

그럼 먼저 기본 머티리얼과 씬에 배치된 오브젝트의 특성에 대해서 알아보도록 하겠습니다.

씬에 캡슐 오브젝트를 3개 추가합니다.

각각의 캡슐 오브젝트가 똑같은 몬스터의 다른 타입이라고 가정해보겠습니다.

그 다음엔 프로젝트 뷰에서 이 몬스터들이 사용할 머티리얼을 생성하고 적용해줍니다.

이 몬스터 타입들은 같은 머티리얼을 공유하며 타입 1번 몬스터는 기본 형으로 빨간색을 머티리얼을 사용하고 타입 2는 검붉은 색 머티리얼을 사용하며, 타입 3번 몬스터는 주황색을 사용하도록 하는 방식으로 머티리얼의 색상만 다르게 적용하도록 기획되었다고 가정하겠습니다.

이제 이 기획을 적용하기 위해서 타입 2 몬스터를 선택하고 타입 2 몬스터의 머티리얼 색상을 변경하면 의도와는 다르게 모든 몬스터의 색상이 변경됩니다.

이것을 해결하는 가장 간단한 방법은 각 몬스터마다 머티리얼을 만들어서 적용해주는 것입니다.

이렇게 문제를 해결할 수도 있겠지만, 몬스터가 아니라 플레이어라면 또 문제는 달라집니다.

RTS 게임처럼 플레이어의 수에 따라 색상이 달라진다면, 이 색상에 대응하는 모든 머티리얼을 만드는 방식은 매우 비효율적입니다.

머티리얼 인스턴싱

그렇기 때문에 머티리얼 인스턴싱이라는 방법을 이용해야 합니다.

머티리얼 인스턴싱은 간단하게 이야기해서 원본 머티리얼을 복사해서 자기만의 머티리얼을 만드는 것입니다.

MaterialIntancer라는 이름으로 C# 스크립트를 생성하고 스크립트 에디터를 엽니다.

스크립트 에디터가 열리고 나면 멤버 변수로 인스턴싱할 머티리얼을 가지고 있는 MeshRenderer 타입의 변수와 캐릭터의 색상을 지정하는 Color 변수를 선언해줍니다.

그리고 Start 함수나 Awake 함수에서 GetComponent로 MeshRenderer를 가져오고 가져온 MeshRenderer의 material을 Instantiate 함수로 복제해줍니다.

그 다음에 머티리얼의 색상을 변경하도록 코드를 작성합니다.

코드 작업이 끝나면 코드를 저장하고 에디터로 이동합니다.

에디터로 돌아온 다음에는 각 몬스터 오브젝트에 컴포넌트를 부착하고 변경할 색상을 지정해줍니다.

이제 게임을 플레이시켜보면 각자의 머티리얼이 서로에게 간섭하지 않고 서로 다른 색깔을 표시하게 되는 것을 볼 수 있습니다.

그리고 오브젝트를 선택해서 살펴보면 원래는 M_Monster (Material)이라고 표시되던 머티리얼이 M_Monster (Instance) (Clone)으로 표시되면서 현재 머티리얼이 원본이 아닌 복제된 머티리얼임을 알 수 있습니다.

물론 이렇게 무작정 머티리얼을 복제하게 만들면 같은 머티리얼에 대해서도 복제본이 생겨나기 때문에 머티리얼 관리자 같은 방식을 이용해서 완전히 같은 머티리얼이 이미 복제 생성되어 있는 상황이라면 그것을 가져와서 사용하도록 하는 것이 좋습니다.

아웃트로

이번 영상에서는 원본 머티리얼을 공유하는 오브젝트들이 각자 다른 방식으로 표현되도록 할 수 있는 머티리얼 인스턴싱에 대해서 알아보았습니다.

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

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

 

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

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

 

에셋스토어

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

 

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

이번에는 유니티 2020에서 추가된 Properties 기능에 대해서 알아봅시다.

 

사용 엔진 버전 : 2020.3

 

타임라인

0:00 인트로

0:08 인스펙터에서 여러 개의 오브젝트를 컨테이너에 담기

0:26 1. 일일이 집어넣기

0:43 2. 인스펙터 잠그기

1:13 3. Properties 이용하기

1:45 아웃트로

스크립트

인트로

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

이번에는 유니티 에디터의 Properties 기능에 대해서 알아보겠습니다.

인스펙터에서 여러 개의 오브젝트를 컨테이너에 담기

유니티에서는 에디터의 인스펙터에서 오브젝트를 담을 컨테이너를 이렇게 스크립트에서 리스트나 배열로 만들 수 있습니다.

스크립트에서 만든 리스트나 배열은 에디터에서 이렇게 보여지죠.

그리고 이 컨테이너에 씬 안에 있는 오브젝트를 끌어넣을 수 있습니다.

1. 일일이 집어넣기

그런데 한꺼번에 여러 개의 오브젝트를 넣기 위해서 여러 오브젝트를 선택하면 컴포넌트가 붙어있는 오브젝트의 선택이 풀리면서 인스펙터에서 사라집니다.

그래서 인스펙터를 잠그는 방법을 몰랐을 때는 오브젝트를 하나하나 선택해서 일일이 집어넣을 수 밖에 없었죠.

2. 인스펙터 잠그기

하지만 인스펙터 뷰 우측 상단에 있는 자물쇠 모양 버튼을 클릭하면 인스펙터가 잠기면서 지금 선택한 오브젝트로 인스펙터가 고정됩니다.

그러면 다른 오브젝트를 선택해도 인스펙터가 바뀌지 않고 여러 오브젝트를 한꺼번에 컨테이너에 넣을 수 있게 되죠.

하지만 인스펙터 잠금을 푸는 것을 깜빡하면 다른 오브젝트를 변경하기 위해 선택해도 인스펙터가 변경되지 않아서 헤매게 되는 실수가 발생합니다.

그래서 작업이 끝나면 인스펙터 잠금을 일일이 풀어줘야 한다는 단점도 있습니다.

3. Properties

이 모든 단점을 해결하기 위한 기능이 바로 Properties입니다.

이 기능은 2020 버전에 추가된 기능으로 게임 오브젝트에 우클릭하고 제일 아래의 [Properties...] 항목을 선택하면 Properties 창이 열리며 인스펙터에서 보이는 것과 동일한 내용을 볼 수 있게 됩니다.

여기서는 다른 오브젝트를 선택해도 Properties 창의 내용이 바뀌지 않습니다.

그래서 여러 오브젝트를 선택해서 컨테이너로 한 번에 넣어줄 수 있습니다.

그리고 작업이 끝나면 어떤 잠금을 푼다던가 하는 일에 신경쓰지 않고 그냥 Properties 창을 꺼버리면 됩니다.

아웃트로

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

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

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

 

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

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

 

에셋스토어

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

 

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

이번에는 유니티 에디터에 붙여진 버전 넘버링의 의미와 LTS에 대해서 알아봅시다!

 

타임라인

0:00 인트로

0:10 어느 버전의 유니티를?

1:10 유니티 버전과 시맨틱 버전 분류법

3:59 LTS

5:21 아웃트로

 

# 참고자료

유의적 버전 2.0.0-ko2 - https://semver.org/lang/ko/

[인터뷰] 유니티 코리아 "엔진의 핵심 가치 '게임' 놓치지 않겠다” - https://www.inven.co.kr/webzine/news/?news=233326

 

스크립트

인트로

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

이번 영상에서는 유니티 엔진의 버전과 LTS라는 용어에 대해서 알아보도록 하겠습니다.

어느 버전의 유니티를?

우리는 유니티 엔진을 처음 배울 때 어떤 버전의 유니티를 설치해야 하는지 고민에 빠지게 됩니다.

먼저 유니티 허브에서 유니티 에디터를 설치하려고 해도 2018, 2019, 2020에 2021버전까지 있습니다.

그리고 사전 릴리즈 탭을 보면 2022 버전도 있죠.

거기에 유니티 홈페이지의 다운로드 아카이브에 가보면 각 연도별 버전마다 또 무수히 많은 세부 버전의 설치 파일들이 가득합니다.

그리고 버전 넘버링이 연도로 바뀌기 전의 3, 4, 5버전까지 있죠.

물론 이렇게 과거의 버전들이 제공되는 이유는 이전 버전의 유니티로 만들어진 프로젝트들을 지원하기 위한 것입니다.

오래된 버전의 유니티 엔진으로 만들어진 프로젝트를 정상적으로 열고 작업하기 위해서는 버전에 맞는 엔진을 설치해야 합니다.

하지만 새로운 프로젝트를 만들려는 사람은 가급적이면 최신 버전이며 안정적인 버전의 유니티 엔진을 다운로드 받아야 합니다.

그래야 최신으로 제공되는 기능과 가장 나은 비주얼로 안정적인 게임 개발이 가능하기 때문이죠.

유니티 버전과 시맨틱 버전 분류법

그럼 잠시 유니티 버전 숫자를 보도록 하겠습니다.

유니티의 다운로드 아카이브를 보면 초기에는 3, 4, 5와 같은 숫자를 사용했고 5 버전 후로는 2017과 같이 연도를 메인 버전 넘버로 사용했습니다.

유니티 3 다음에 4가 나오는데 1년, 유니티 4 다음에 5가 나오는데 3년 정도가 걸린 것을 보면 2017년 이후로는 매년 새로운 기능과 성능 향상으로 게임 엔진 계의 대격변을 일으키겠다는 포부가 엿보이는 것을 알 수 있습니다.

실제로도 2017 이후 버전들은 연도 버전이 바뀔 때마다 상당한 수준의 기능과 성능 개선이 있었습니다.

하지만 숫자 넘버에서 연도 넘버로 바뀐 것을 제외하고 보면 이 버전 넘버링에는 한 가지 공통점이 있습니다.

3.5.7 / 4.7.2 / 5.6.7 / 2017.4.40 / 2018.4.36 / 2019.4.34 / 2020.3.25 / 2021.2.7

어떤 공통점인지 알아채셨나요?

네, 맞습니다.

모든 버전 숫자가 3개로 나열되죠.

이런 방식으로 3개의 숫자로 버전을 표시하는 방식을 시맨틱 버전 분류법, 번역하면 유의적 버전 분류법이라고 합니다.

이 3개의 숫자 중에 첫 번째 숫자를 메이저(Major) 버전이라고 하고 이전 버전과 호환이 되지 않게 기능이 바뀌거나 추가되면 변경되는 숫자입니다.

두 번째 숫자는 마이너(Minor) 버전이라고 하고 이전 버전과 호환되면서 새로운 기능이 추가되면 변경되는 숫자입니다.

그리고 세 번째 숫자는 패치(Patch) 버전이라고 하고 이전 버전과 호환되면서 버그를 수정한 것이라면 변경되는 숫자입니다.

최신 버전의 유니티 엔진은 메이저 버전을 연도로 표시합니다.

이 부분은 앞에서 이야기 했듯이 유니티 측에서 매년 새로운 혁신을 이루어 내겠다는 포부로 볼 수 있지만, 약간의 문제는 업데이트 일정이 조금씩 밀리면서 연도 버전과 실제 연도가 일치하지 않는 경우가 현재 발생하고 있습니다.

이 버전 불일치 문제는 유니티 측에서도 인지하고 있고, 업데이트 일정을 조절해서 맞출 예정이라고 합니다.

그리고 두 번째 숫자인 마이너 버전은 유니티 5까지는 일관성이 없었지만 2017~2019까지는 1~4 사이의 숫자를 사용했습니다.

이 마이너 버전 1은 아직 에디터가 안정화되지 않은 베타 버전으로 안정화 단계에 따라서 버전이 올라가고 가장 안정화된 상태에서 장기 지원을 하는 버전에 버전 넘버 4를 붙여줍니다.

그리고 2020 버전이 이후에는 연도와 버전 넘버의 불일치를 되돌리기 위해 1~3까지만 버전 넘버를 사용하여 버전 넘버 3을 장기 지원 버전으로 하도록 변경했습니다.

그리고 마지막 패치 버전은 유니티 에디터에 자잘한 버그를 수정할 때마다 계속해서 올라가도록 되어 있습니다.

이런 버전 분류 방식으로 인해서 게임 개발 중인 유니티 프로젝트의 에디터 버전을 올릴 때는가급적이면 패치 버전과 마이너 버전까지만 올리도록 하고 메이저 버전을 바꿔야 한다면 프로젝트를 반드시 백업한 뒤에 버전을 올려서 문제가 없는지 확인해야 합니다.

LTS

그 다음으로 살펴볼 부분은 LTS입니다.

유니티 허브에서 다른 버전의 에디터를 설치하기 위해서 에디터 설치 버튼을 눌러보면 2020.3, 2019.4, 2018.4 버전 뒤에 LTS 라는 약자가 붙어있습니다.

버전 뒤에 붙어있는 이 LTS는 Long Term Support의 약자로 우리 말로는 장기 지원 버전이라고 합니다.

이런 장기 지원 버전은 연도 버전이 바뀐 이후에도 해당 연도의 LTS 버전이 최초로 릴리스된 날짜로부터 2년간 계속해서 매월 업데이트됩니다.

이런 식으로 장기 지원 버전을 만들어서 계속 업데이트를 해주는 이유는 이미 예전 버전의 에디터로 계속해서 진행해오던 프로젝트가 유니티 에디터의 바뀐 메이저 버전을 따라 무작정 버전을 올리면 어떤 문제가 발생할지 알 수 없기 때문에 이전 버전으로 개발하는 개발자들이 최대한 안정적으로 개발을 이어나갈 수 있게 하기 위해서 입니다.

그리고 유니티 엔진은 끊임없이 업데이트되는데, 버전 넘버링 중에 가장 앞자리인 연도 버전이 바뀔 때마다 유니티는 가장 많은 변화를 겪게 됩니다.

하지만 이 연도 버전이 처음 나온 시점인 1버전이나 2버전에서는 새로운 기능이 대거 들어와서 엔진이 조금 불안정한 상태가 됩니다.

그래서 새로운 연도 넘버링의 엔진은 곧바로 게임 개발에 사용하는 것보다는 새 버전의 엔진에 들어오는 기능을 테스트 해보는 용도로 사용하는 것이 좋습니다.

그리고 정식으로 게임을 개발할 때는 가장 최신의 LTS 버전인 에디터를 설치해서 개발하는 것을 추천합니다.

아웃트로

이번 영상에서는 유니티의 버전 넘버링과 LTS에 대해서 알아보았습니다.

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

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

 

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

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

 

에셋스토어

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

 

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

이번에는 유니티 애니메이션 시스템의 기본이 되는 애니메이션 클립에 대해서 알아보도록 하겠습니다.

 

사용 엔진 버전 : 2020.3

 

타임라인

0:00 인트로

0:16 애니메이션 클립

1:05 외부프로그램에서 만든 애니메이션

2:26 유니티 에디터에 만든 애니메이션

6:04 아웃트로

인트로

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

이번에는 유니티 애니메이션 클립에 대해서 알아보도록 하겠습니다.

본격적인 강좌에 들어가기 전에 필요한 리소스들을 영상 하단의 링크에서 다운로드받아서 임포트합니다.

애니메이션 클립

이제 지난 애니메이션 개요 강좌에서 가볍게 이야기 했던 애니메이션 클립에 대한 이야기를 복습하면서 좀 더 자세히 알아보도록 하겠습니다.

지난 강좌에서 이야기 했듯이 애니메이션 클립은 애니메이션의 가장 기본적인 단위이며 오브젝트가 어떻게 움직여야 하는지에 대한 정보들이 포함되어 있는 것입니다.

그리고 이 애니메이션 클립을 만드는 방법으로는 크게 두 가지가 있습니다.

외부에서 만들어서 임포트한 애니메이션

첫 번째 방식은 3ds MAX나 Maya, 블랜더 같은 외부 프로그램으로 애니메이션을 만들어서 임포트하는 방식입니다.

이렇게 외부 프로그램에서 애니메이션을 만들어서 임포트하는 방식은 보통 3D 프로그램으로 만들어진 3D 모델의 애니메이션을 만들고자 할 때 주로 사용합니다.

외부 프로그램에서 전문 툴을 사용해서 만드는 애니메이션이니만큼 유니티의 기능만으로 만드는 애니메이션에 비해서 좀 더 복잡한 애니메이션을 만들 수 있습니다.

임포트된 FBX 파일은 프로젝트 뷰에서 이렇게 박스 모양 아이콘의 에셋으로 보이게 됩니다.

이 FBX 에셋을 선택해보면 인스펙터 뷰에서 Model, Rig, Animation, Materials 탭을 볼 수 있습니다.

이 중에서 Animation 탭을 선택해보면 이 FBX 파일이 가지고 있는 애니메이션에 대한 정보를 볼 수 있습니다.

물론 FBX 파일이 애니메이션을 전혀 포함하고 있지 않다면 이 탭은 활성화되지 않을 겁니다.

여기서 이 애니메이션이 어떤 애니메이션인지 재생해 볼 수 있으며, Loop Time 옵션을 통해 애니메이션이 끝까지 재생된 이 후에 동작을 멈출지 아니면 처음으로 돌아가서 반복 재생할지를 결정할 수 있습니다.

이외에도 애니메이션 이벤트를 추가하는 등의 작업을 할 수도 있습니다.

그리고 3D 팀에서 애니메이션을 넘겨줄 때 애니메이션 동작마다 FBX 파일을 따로 나눠서 주지 않고 한 FBX 파일에 여러 동작을 넣어서 주는 경우가 있습니다.

그럴 때는 여기 Clips에서 [+] 버튼을 눌러서 클립을 추가해주고 해당 애니메이션의 시작 지점과 끝 지점을 나눠주면 됩니다.

그리고 이렇게 나눈 애니메이션의 이름이 헷갈리지 않도록 이름을 설정해줍니다.

이렇게 외부 프로그램에서 만들어서 임포트한 애니메이션은 유니티의 애니메이션 뷰에서 Read Only로 표시되며 보통은 유니티에서 수정하지 못하기 때문에 외부 프로그램에서 다시 수정해서 임포트해야 합니다.

유니티 에디터에서 만든 애니메이션

유니티의 또 다른 애니메이션 클립 방식은 유니티 에디터에서 직접 애니메이션 키를 잡아서 클립을 만드는 것입니다.

유니티 에디터에서 직접 키를 잡아서 애니메이션 클립을 만드는 것은 비교적 간단한 애니메이션이나 UI 애니메이션을 만들고자 할때 사용하는 빈도가 높습니다.

유니티 에디터에서 애니메이션을 만드는 방법은 아주 간단합니다.

먼저 하이어라키 뷰에 우클릭해서 애니메이션을 만들 오브젝트를 하나 생성합니다.

그리고 그 오브젝트를 선택한 상태로 [Ctrl + 6] 단축키를 눌러서 애니메이션 뷰를 열어줍니다.

그러면 아직 애니메이션이 없는 상태이기 때문에 애니메이션 클립과 애니메이터를 만들라는 문구와 함께 Create 버튼이 표시되는 것을 볼 수 있습니다.

여기서 Create 버튼을 누르면 방금 생성한 오브젝트에 대한 애니메이션 클립을 생성할 수 있습니다.

Create 버튼을 누르고 애니메이션 클립을 생성합니다.

그러면 프로젝트 뷰에서 방금 생성한 애니메이션 클립과 이 오브젝트에 대한 애니메이터 컨트롤러가 생성되는 것을 볼 수 있습니다.

애니메이터 컨트롤러는 이 오브젝트가 가진 여러 개의 애니메이션 클립을 관리하고 어떤 상황에 어떤 애니메이션을 재생할 것인지를 결정하는 내용들을 담는 에셋입니다.

이에 대한 자세한 내용은 애니메이터 컨트롤러에 대해서 다루는 강좌에서 이야기하도록하고 지금은 애니메이션 클립에 좀 더 집중해보겠습니다.

애니메이션 클립이 생성된 이후에 애니메이션 뷰를 보면 텅 비어있는 프로퍼티 패널과 애니메이션 타임라인을 볼 수 있습니다.

먼저 애니메이션을 만들기 위해서는 Add Property 버튼을 눌러서 동작을 만들어줄 프로퍼티를 추가해야 합니다.

이 프로퍼티에는 컴포넌트와 관련된 대부분이 추가될 수 있지만 기본적으로는 트랜스폼 컴포넌트에서 크기, 회전, 위치 등을 주로 사용하고, UI인 경우에는 이미지나 색상과 같은 값들을 다룰 수 도 있습니다.

먼저 트랜스폼 컴포넌트에서 Rotation 프로퍼티를 추가해보겠습니다.

그러면 Rotation 프로퍼티가 프로퍼티 목록에 추가되며 타임라인의 0초 지점과 1초 지점에 마름모 꼴의 키가 추가되는 것을 볼 수 있습니다.

이 때 타임라인의 중간을 선택하고 프로퍼티의 값을 변경하면 새로운 키가 추가되는 것을 볼 수 있습니다.

그리고 키를 클릭해서 드래그하면 키의 위치를 옮길 수도 있고 여러 개의 키를 동시에 선택해서 동일 비율로 줄이거나 늘일 수도 있습니다.

이렇게 타임라인에서 키를 옮기면서 값을 입력하는 기본 방식을 Dopesheet라고 하고 애니메이션 뷰 아래 쪽의 버튼에서 다른 방식인 Curves를 선택할 수 있습니다.

Curves 방식에서는 그래프를 보면서 키의 위치를 조절하고 베지어 곡선 각도를 바꾸거나 더블 클릭으로 키를 추가할 수 있습니다.

이 외에도 타임 라인 끝 부분에 [...]으로 표시된 버튼을 눌러서 이 애니메이션이 초당 몇 프레임으로 애니메이션을 재생하게 만들지도 결정할 수 있습니다.

이 애니메이션 프레임 수에 대한 내용은 애니메이션 샘플 레이트 영상에서 확인하실 수 있습니다.

그리고 애니메이션 클립 이름이 적힌 드롭 다운을 클릭하면 이 오브젝트가 가진 애니메이션들을 볼 수 있고 제일 아래의 [Create New Clip] 항목을 선택하면 새로운 애니메이션 클립을 추가할 수 있습니다.

이렇게 유니티에서 만들어진 애니메이션 클립은 프로젝트 뷰에서 이런 아이콘으로 표시됩니다.

이것을 선택해보면 FBX 에셋에 담긴 애니메이션보다는 결정할 수 있는 옵션이 거의 없고 애니메이션의 반복 여부를 설정하는 LoopTime만 있는데 이것은 대부분의 작업을 애니메이션 뷰에서 할 수 있기 때문입니다.

아웃트로

이렇게 외부 프로그램에서 만들어서 임포트하거나 유니티 엔진에서 만든 애니메이션 클립은 애니메이터 컨트롤러를 통해서 하나의 애니메이션 구성을 만드는데 사용하게 됩니다.

이번 영상에서는 유니티 애니메이션 시스템의 기본 구성 요소인 애니메이션 클립에 대해서 알아보았습니다.

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

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

 

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

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

 

에셋스토어

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