Prefab 

게임 오브젝트를 에셋화 하기

 

작성 기준 버전 :: 2019.1.4f1

 

[본 포스트의 내용은 유튜브 영상을 통해서 시청하실 수도 있습니다]

 

유니티에서 게임 오브젝트는 씬에 배치될 수 있는 오브젝트를 의미한다. 이 게임 오브젝트에 어떤 컴포넌트가 붙는가에 따라서 그 게임 오브젝트의 역할이 결정되는데, 씬에 하나만 배치되는 오브젝트는 컴포넌트를 직접 부착해서 배치할 수는 있지만 똑같은 오브젝트를 많이 배치해야 되는 경우에 매번 배치할 때마다 필요한 컴포넌트를 부착하는 작업을 해야한다면 이것은 매우 비효율적인 작업이 된다. 

 

일일이 게임 오브젝트를 생성한 다음 컴포넌트를 붙이는 비효율에서 벗어나기 위해서 제일 처음 만들어진 게임 오브젝트를 복사해서 배치할 수도 있는데, 이것은 또 다른 비효율적인 작업에 봉착하게 된다. 만약 이렇게 붙여넣은 오브젝트들의 크기를 전부 2배로 키워야 한다면? 그럼 붙여넣은 게임 오브젝트들을 일일이 찾아서 스케일 값을 바꿔주어야 한다. 이것 역시 심각하게 비효율적인 작업이다.

 

이러한 예시 이외에 어떤 게임 오브젝트를 게임이 진행하는 도중에 생성해서 배치해야 된다면, 코드 상에서 빈 게임 오브젝트를 생성하고, 거기에 필요한 컴포넌트를 붙여서 일일이 초기화해서 배치를 하는 것 역시 비효율적이다.

 

 

비효율적인 작업들 1 : 새 오브젝트마다 손수 컴포넌트 붙이고 설정하기

 

앞서 제시한 예시들을 하나씩 따라가보자.

 

 

우리는 이제 씬에 이른바 "Elegance Black Box"라고 명명된 검은색의 Black Box 컴포넌트가 부착된 상자를 여러 개 배치하려고 한다. 이 멋진 검은 상자를 만들기 위해서 우리는 다음과 같은 작업을 해야한다.

 

 

먼저 새 상자를 만든다.

 

 

새 상자의 이름을 "Elegance Black Box"로 변경한다.

 

 

그 다음 머티리얼에 검은 색 머티리얼을 넣고 Black Box 컴포넌트를 붙여준다(사실 따로 순서를 진행할 수도 있지만 그만큼 번거롭고 지루해지기 때문에 그냥 합쳤다).

 

자 총 4단계의 과정을 거쳤다. 이 작업을 만들고자 하는 "Elegance Black Box"의 갯수만큼 반복하면 된다. 고작 4단계인데 이렇게 번거롭다. 만약 더 복잡한 구조의 게임 오브젝트라면 어떻겠는가?

 

 

비효율적인 작업들 2 : 배치된 게임 오브젝트 복제하기

 

 

유니티 엔진에서는 복제하고자 하는 게임 오브젝트를 선택하고 우클릭하여 [Duplicate] 항목을 선택하거나 [Ctrl + D] 단축키를 눌러서 복제할 수 있다.

 

 

와! 일일이 새 게임 오브젝트를 만들고 컴포넌트를 붙이는 작업을 하지 않아도 된다! 혁명적인가? 분명 여기까지는 혁명적이다. 하지만 원수같은 기획자들이 "Elegance Black Box"를 좀 더 우아하게 강조하기 위해서 크기를 25% 키우자고 주장했다.

 

 

그나마 예시에서는 갯수가 적고 하이어라키 뷰에서 오브젝트가 흩어져 있지 않아서 모두 선택해서 빠르게 해결했다. 하지만 하이어라키 뷰에서 다른 게임 오브젝트 밑에 숨어있다거나 흩어져있다면 일일이 찾아서 수정해야 한다. 물론 하이어라키 뷰의 검색 기능을 이용하면 훌륭하게 해결할 수 있을 지도 모른다. 그러나 이런 검색 작업 역시 비효율적인것은 사실이다.

 

 

비효율적인 작업들 3 : 코드에서 동적으로 생성하기

 

이번에는 동료 디자이너가 "멋진 검은 상자가 게임 중에 동적으로 생성되면 좋겠는데!"라고 말했다. 

 

public static BlackBox CreateNewBlackBox()

{

    var newBox = GameObject.CreatePrimitive(PrimitiveType.Cube).AddComponent<BlackBox>();

    newBox.name = "Elegance Black Box";

    newBox.GetComponent<Renderer>().material = Resources.Load<Material>("M_Black");

    return newBox;

}

 

거기에 당신은 위와 같이 블랙 박스를 생성하는 코드를 만들어 냈다. 이러면 끝난 것일까? 아니다. 디자이너가 블랙 박스에 대해서 수정사항을 가지고 올 때마다 당신은 코드를 수정해야 한다. 거기에 컴파일 시간은 덤이다! 그리고 지금은 간단한 오브젝트라 코드가 몇 줄 되지 않지만 복잡한 오브젝트면 코드의 양이 늘어나고 거기에 더불어 버그의 확률도 함께 상승한다.

 

 

 

우리의 구세주 프리팹

 

이러한 모든 문제를 해결하기 위해서 있는 것이 바로 프리팹이다. 프리팹은 게임 오브젝트와 거기에 붙여진 컴포넌트와 그 프로퍼티들을 에셋의 형태로 저장하는 것이다.

 

프리팹 만들기

 

 

 

프리팹을 만드는 방법은 아주 간단하다. 하이어라키 뷰에서 프리팹으로 만들고자 하는 게임 오브젝트를 선택해서 프로젝트 뷰로 끌어다 놓기만 하면 된다. 프리팹이 된 게임 오브젝트는 앞의 아이콘이 무채색 육면체에서 파란 육면체로 바뀐다.

 

배치된 게임 오브젝트 한꺼번에 변경하기

 

이번에도 아까 전처럼 씬에 배치된 모든 블랙 박스의 크기를 변경하고 싶을 수 있다. 프리팹으로는 이런 작업이 아주 간단하다.

 

 

프로젝트 뷰에서 원본 프리팹을 선택하고 프리팹의 크기를 변경해주면 씬에 배치된 모든 프리팹 인스턴스의 크기가 함께 변경된다. 하지만 이 방법은 씬에 배치된 각각의 인스턴스의 프로퍼티가 수정된 상태라면 적용되지 않으니 주의해야 한다.

 

프리팹 인스턴스에서 편집

 

 

위 예시에서는 프리팹 원본에서 수정된 것을 프리팹 인스턴스로 적용되는 내용이었다. 반대로 씬에 배치된 프리팹 인스턴스를 수정하고 이것을 원본 프리팹에 적용할 수도 있다. 씬에 배치된 프리팹 인스턴스 게임 오브젝트를 선택하면 일반 게임 오브젝트와는 다르게 인스펙터 뷰의 게임 오브젝트의 이름 아래에 Prefab : Open, Select, Override 버튼을 볼 수 있다.

 

 

여기서 Open 버튼을 선택하면 선택된 프리팹의 원본만을 수정할 수 있는 전용 씬으로 이동된다. 여기서는 프로젝트 뷰에서는 보이지 않는 프리팹 원본의 깊은 자식 오브젝트까지 열어서 수정할 수 있게 된다. 또한 수정된 프리팹의 내용은 자동으로 저장되며 하이어라키 뷰의 프리팹 아이콘 옆의 < 버튼을 클릭하면 다시 원래 씬으로 돌아올 수 있다.

 

원본 프리팹을 더블 클릭하거나 씬에 배치된 프리팹 인스턴스 옆의 > 버튼을 클릭해도 프리팹 수정 씬으로 들어올 수 있다.

 

 

Select 버튼을 클릭하면 프로젝트 뷰의 원본 프리팹이 바로 선택된다.

 

 

Override 버튼은 만약 프리팹 인스턴스에 원본 인스턴스와 달라진 점이 있다면 내용이 나타난다. 여기서 Revert All을 선택하면 프리팹 인스턴스의 변경 사항이 초기화되고 프리팹 원본 값으로 돌아간다. Apply All을 선택하면 프리팹 인스턴스의 수정 사항이 반대로 프리팹 원본에 덮어 씌워진다.

 

프리팹 인스턴스화

 

프로젝트 뷰에 존재하는 프리팹 원본은 에셋 상태로 이 상태 그대로는 게임 씬에서 보거나 사용할 수 없다. 이것을 게임 씬에 배치하고 사용할 수 있게 생성하는 과정을 인스턴스화라고 한다. 프리팹 인스턴스화는 게임 오브젝트의 Instantiate() 함수를 이용해서 할 수 있다.

 

프로젝트 뷰에 있는 게임 오브젝트는 크게 두 가지 방법으로 가져올 수 있다.

 

Resources 폴더에서 가져오기

 

 

첫 번째 방법은 Resources 폴더에서 가져오는 것이다. 이 방법은 어느 경로이든 무관하게 가져오고자 하는 프리팹이 프로젝트 뷰에서 Resources 폴더 안에 들어있기만 하면 된다. 단, Resources 폴더에 들어있는 파일들은 게임이 실행되면 무조건 메모리에 적재되기 때문에 메모리 이슈를 일으키고 싶지 않다면, 필요한 에셋만을 Resources 폴더에 넣어둘 것을 권장한다.

 

public static BlackBox CreateNewBlackBox()

{

    var boxPrefab = Resources.Load<BlackBox>("Elegance Black Box");

    return Instantiate(boxPrefab);

}

 

그 다음 Resources.Load() 함수로 Resources 폴더 안의 프리팹을 가져와서 Instantiate() 함수로 씬에 생성할 수 있다.

 

씬에 배치된 게임 오브젝트의 컴포넌트의 프로퍼티로 참조하기

 

public class BoxSpawn : MonoBehaviour

{

    [SerializeField]

    private GameObject boxPrefab;

 

    private void Start()

    {

        Instantiate(boxPrefab);

    }

}

 

두 번째 방법은 씬에 배치된 게임 오브젝트에 부착된 컴포넌트의 프로퍼티로 프리팹 원본을 참조하고 있다가 생성하는 방법이다.

 

 

씬에 Box Spawner 게임 오브젝트를 만들고 위에서 작성한 Box Spawn 컴포넌트를 부착하고 Box Prefab 프로퍼티에 프리팹을 할당해주면 된다. 그러면 게임이 시작되면 박스 스포너가 블랙 박스를 생성하는 것을 확인할 수 있다.

 

기타

 

위에서 제시한 방법 이외에도 에셋 번들에서 가져와서 생성하는 방법 등 다른 기능과 연계된 심화 방법들이 존재한다.

 

 

프리팹의 장점

 

게임 오브젝트가 프리팹화됨으로써 얻을 수 있는 장점은 굉장히 많다. 첫 번째는 재사용이 굉장히 편하다는 점이고, 씬에 흩어져서 배치된 프리팹의 인스턴스들을 한꺼번에 수정하기도 쉽다. 그리고 프로그래머가 컴포넌트만 제대로 만들어준다면, 게임 디자이너들이 프로그래머에게 요청하지 않고도 손쉽게 게임 요소들을 수정할 수 있다는 점이 제일 큰 장점이다.

 

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

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

 

에셋스토어

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

 

반응형

머티리얼 인스턴싱 :: 머티리얼 파라미터와 머티리얼 인스턴스

 

작성 기준 버전 :: 4.21.1

 

언리얼 엔진에서 표준 머티리얼을 생성하고 수정하는 작업은 꽤나 시간을 많이 소모하는 작업에 속한다. 특히 머티리얼을 수정하고 실제 엔진에 적용되는 시간이 꽤나 걸린다.

 

수정 작업이 머티리얼의 그래프를 수정해야하는 작업이라면 감수할 수 밖에 없는 시간 소모이지만, 머티리얼 그래프에 대한 수정이 아니라 단순 수치 조정에 불과한 작업이라면 적당한 수치를 찾을 때까지 소모하는 시간이 만만치 않게될 것이다.

 

혹은 머티리얼 A와 머티리얼 B의 동작은 똑같지만 텍스쳐가 다르거나 러프니스 값이 달라서 반짝임 정도만 다르다고 할 때, 완전히 새로운 표준 머티리얼을 만드는 것은 분명히 시간과 노력의 낭비가 될 것임에 틀림이 없다.

 

이러한 시간 소모를 줄이기 위해서 언리얼 엔진에서는 표준 머티리얼에 값이나 텍스쳐 등을 바꿀 수 있는 머티리얼 파라미터(Material Parameter)와 표준 머티리얼을 상속받아 머티리얼 파라미터를 수정해서 다른 머티리얼처럼 사용할 수 있는 특수한 유형의 머티리얼인 머티리얼 인스턴스(Material Instance)를 제공한다.

이렇게 표준 머티리얼에서 바리에이션이라고 할 수 있는 머티리얼 인스턴스를 만드는 작업을 머티리얼 인스턴싱(Material Instancing)이라고 한다.

 

우선 파라미터와 인스턴스를 배우기 이전에 프로젝트에서 새 머티리얼을 추가하자. 머티리얼을 추가하는 방법은 콘텐츠 브라우저 패널에서 신규 추가 버튼을 누른 다음 머티리얼 항목을 선택하면 된다.

 

 

새로 추가한 머티리얼의 이름은 TestMaterial로 하자. 생성된 머티리얼을 더블클릭하면 머티리얼 에디터가 열린다.

 

 

머티리얼 파라미터(Material Parameter)

 

머티리얼 파라미터란 표준 머티리얼을 다시 컴파일하지 않고도 머티리얼 인스턴스에서 머티리얼을 수정할 수 있도록 해주는 특수한 머티리얼 표현식이다. 이 머티리얼 파라미터 노드는 표준 머티리얼의 머티리얼 그래프 안에서 다른 노드과 비슷하게 동작하지만, 머티리얼을 컴파일하고 머티리얼 인스턴스에서 사용할 때는 머티리얼 파라미터의 값을 실시간으로 수정하거나, 머티리얼을 새로 컴파일하지 않고도 머티리얼의 모양과 느낌을 다르게 바꿀 수 있다.

 

머티리얼 파라미터 생성하기

 

기존 머티리얼 노드를 파라미터로 변환

 

기존의 머티리얼 노드에 우클릭하여 파라미터로 변환을 선택하면 머티리얼 파라미터로 변환된다.

 

 

이 방법이 머티리얼 파라미터를 만드는 가장 간단한 방법이지만, 머티리얼 그래프에서 모든 노드가 머티리얼 파라미터로 변환되지는 않는다. 파라미터로 변환 메뉴는 머티리얼 파라미터로 변환이 가능한 노드에서만 표시된다.

 

팔레트에서 파라미터 추가하기

 

머티리얼 에디터의 팔레트 패널에서 Parameter를 검색하면 머티리얼 그래프에 추가할 수 있는 파라미터가 모두 나온다. 이중에 필요한 파라미터를 머티리얼 그래프에 드래그함으로써 머티리얼 파라미터를 추가할 수 있다.

 

 

우클릭 메뉴에서 파라미터 추가하기

 

머티리얼 그래프 빈 자리에 우클릭해서 뜨는 컨텍스트 메뉴에 Parameter를 검색해서 머티리얼 파라미터를 추가할 수 있다.

 

 

머티리얼 파라미터 이름 변경하기

 

머티리얼 파라미터의 이름은 매우 중요하다. 만약 C++ 코드나 블루프린트에서 머티리얼 파라미터의 값을 변경하고자 한다면 이 머티리얼 파라미터의 이름을 알고 있어야 하기 때문이다. 물론 여러개의 파라미터를 만들면 자동으로 Param, Param_1 같이 이름이 자동으로 지어지지만, 원활한 작업을 위해서는 파라미터의 이름을 명확하게 짓는것이 중요하다.

 

파라미터의 이름을 바꾸는 법을 배우기 전에 우선 머티리얼 그래프에 VectorParameter를 하나 추가하고 제일 위의 하얀색 소켓과 머티리얼의 베이스 컬러 소켓을 연결하자.

 

 

이 VectorParameter[각주:1]는 머티리얼의 색상을 결정하는 파라미터로 사용할 것이다. 이 파라미터의 이름은 Color가 적당할 것이다. 그럼 이 파라미터의 이름을 Color로 바꾸는 방법을 배워보자.

 

방법 1. 머티리얼 파라미터의 이름 클릭

 

첫 번째 방법은 머티리얼 파라미터를 선택한 상태에서 파라미터의 이름을 클릭하는 것이다. 그러면 아래의 이미지와 같이 파라미터의 이름을 변경할 수 있게 된다.

 

 

방법 2. 디테일 패널에서 변경

 

두 번째 방법은 머티리얼 파라미터를 선택한 다음, 디테일 패널에서 Parameter Name을 변경하는 것이다.

 

 

파라미터의 이름을 변경하는 방법을 배웠으니 편한 방법을 선택해서 VectorParameter의 이름을 Color로 변경한다.

 

그 다음엔 ScalarParameter[각주:2]를 두 개 만들고 이름을 각각 'Metallic', 'Roughness'로 정하고 메탈릭 소켓과 러프니스 소켓에 연결해주자.

 

 

머티리얼 파라미터 기본값 변경하기

 

표준 머티리얼에서는 머티리얼 파라미터의 기본값을 설정할 수 있다. 나중에 머티리얼 인스턴스를 처음 생성할 때, 머티리얼 파라미터의 기본값은 이것을 따르게 된다.

 

파라미터의 기본값은 머티리얼 파라미터 노드를 선택한 다음 디폴트 패널에서 수정할 수 있다.

 

 

표준 머티리얼에서의 Color 기본값은 {1.0, 0.5, 0.0, 0.0}으로 설정해주자.

 

기본값을 변경했다면, 상단의 메뉴바에서 적용 버튼을 누르고 저장 버튼을 누른 뒤, 머티리얼 에디터를 닫는다.

 

 

덤으로, 파라미터의 기본값을 변경했을 때 프리뷰에 적용되는 시간이 걸리고, 적용 버튼을 눌렀을 때 변경내용을 원본 머티리얼과 월드의 사용된 곳에 적용한다는 프로그레스바가 뜨는 것을 봤을 것이다. 지금은 머티리얼이 매우 간단하고 월드에 적용한 곳이 없어서 적용이 매우 빨랐지만, 복잡한 머티리얼이고 월드에 사용된 곳이 많았다면 이 적용되는 시간이 훨씬 길었을 것이다. 앞에서도 말했지만, 이러한 요소는 개발 시간을 소모하는 중요한 요소로 가능하다면 머티리얼 인스턴싱을 사용해서 개발 시간에 있어서 불필요하게 소모되는 시간을 줄여야 한다. 이것은 두 번 강조해도 모자람이 없는 일이다.

 

 

 

 

머티리얼 인스턴스(Material Instance)

 

머티리얼 인스턴스는 하나의 머티리얼을 부모로 상속받아서 그 부모 머티리얼의 구조대로 동작하되, 부모 머티리얼이 파라미터로 내어주는 부분을 수정해서 부모 머티리얼의 다양한 바리에이션을 만들어낼 수 있도록 하는 기능이다.

 

머티리얼 인스턴스 생성하기

 

머티리얼 인스턴스를 생성하기 위해서는 부모로 삼고자하는 머티리얼에 우클릭한 뒤 머티리얼 인스턴스 생성를 선택하면 된다.

 

 

머티리얼 파라미터 변경하기

 

머티리얼 인스턴스가 생성되고 나서 더블클릭해서 머티리얼 에디터를 열어보면 표준 머티리얼의 머티리얼 에디터와는 구성이 다른 것을 확인할 수 있다.

 

디테일 패널에서 부모인 TestMaterial 표준 머티리얼에서 파라미터로 공개한 파라미터들을 볼 수 있다. 각 파라미터의 앞에 있는 체크박스에 체크함으로써 해당 파라미터를 사용하고 수정할 수 있다.

 

 

Color 파라미터의 체크박스를 체크하고 값을 변경해보면 표준 머티리얼에서 값을 변경할 때와는 달리 리컴파일 없이 값을 빠르게 바꿀 수 있음을 확인할 수 있다.

 

 

 

콘스턴트 / 다이내믹 인스턴스

 

머티리얼 인스턴스 유형은 머티리얼 인스턴스 콘스턴트(Material Instance Constant), 머티리얼 인스턴스 다이내믹(Material Instance Dynamic) 두 가지가 있다.

 

머티리얼 인스턴스 콘스턴트(Material Instance Constant)

 

머티리얼 인스턴스 콘스턴트(MIC)는 실행시간 전에 한 번만 계산되는 머티리얼 인스턴스이다. 그렇기 때문에 게임플레이 도중에는 변경이 불가능하지만, 그 이상의 컴파일이 필요하지 않기 때문에 퍼포먼스 상에서의 이점이 있다.

 

머티리얼 인스턴스 다이내믹(Material Instance Dynamic)

 

머티리얼 인스턴스 다이내믹(MID)은 게임플레이 도중에 머티리얼 파라미터의 값을 계산하고 변경할 수 있는 머티리얼 인스턴스이다. 게임플레이 도중에 C++코드나 블루프린트 코드를 이용해서 머티리얼 파라미터의 값을 바꿀 수 있기 때문에, 캐릭터가 피격당했을 때 색깔이 바뀐다든지, 연속으로 발사해서 과열된 총열이 빨갛게 달아오르는 등의 연출을 사용한다든지 하는 다양한 연출을 할 수 있게 된다.

 

MID의 생성은 에디터가 아닌 C++ 코드나 블루프린트 그래프 내에서 이루어진다. Create Dynamic Material Instance 노드를 통해서 MID를 생성하고 Set Parameter Value 노드를 통해 파라미터들의 값을 변경할 수 있다.

 

 

 

  1. 머티리얼 에디터에서 Vector Parameter는 RGBA 채널을 가지는 색상 파라미터 역할을 한다. 흰색 소켓은 RGBA 모든 채널의 색상이 혼합된 색을 의미하고, 빨간 소켓은 R 채널, 초록 소켓은 G 채널, 파란 소켓은 B 채널, 회색 소켓은 A 채널을 의미한다. [본문으로]
  2. ScalarParameter는 프로그래밍에서 1개의 float값, 즉 하나의 실수를 담을 수 있는 파라미터이다. [본문으로]

 

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

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

 

에셋스토어

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