UNet Tutorial (4) - Network Identity와 권한

 

지난 섹션에서 위치 동기화를 하면서, 게임 오브젝트에 Network Transform을 추가했을 때, Network Transform을 따라서 자동으로 추가된 컴포넌트를 기억하는가? 바로 Network Identity라는 컴포넌트다.

 

 

이름에서도 알 수 있듯이 이 컴포넌트는 오브젝트의 네트워크 ID를 관리하고 네트워킹 시스템에 알리는 역할을 한다. 즉, 이 오브젝트가 다른 서버나 클라이언트의 어느 오브젝트와 동기화되어야 하는지 알리는 역할을 한다

출처: http://wergia.tistory.com/99 [베르의 프로그래밍 노트]
이름에서도 알 수 있듯이 이 컴포넌트는 오브젝트의 네트워크 ID를 관리하고 네트워킹 시스템에 알리는 역할을 한다. 즉, 이 오브젝트가 다른 서버나 클라이언트의 어느 오브젝트와 동기화되어야 하는지 알리는 역할을 한다

출처: http://wergia.tistory.com/99 [베르의 프로그래밍 노트]
그것은 바로 Network Identity라는 컴포넌트인데, 이름에서도 알 수 있듯이 이 컴포넌트는 오브젝트의 네트워크 ID를 관리하고 네트워킹 시스템에 알리는 역할을 한다. 즉, 이 오브젝트가 다른 서버나 클라이언트의 어느 오브젝트와 동기화되어야 하는지 알리는 역할을 한다.

출처: http://wergia.tistory.com/99 [베르의 프로그래밍 노트]

지난 섹션에서도 언급했듯이 이 컴포넌트는 오브젝트의 네트워크 ID를 관리하고 네트워킹 시스템에 알리는 역할을 한다. 이 컴포넌트가 있어야 이 오브젝트가 다른 클라이언트의 어떤 오브젝트와 동기화 되어야 하는지 알 수 있는 것이다.

 

이번 섹션에서는 Inspector 뷰에서 표시되는 Server Only와 Local Player Authority라는 두 가지 옵션과 isServer, isClient, isLocalPlayer, hasAuthority라는 네 가지 프로퍼티에 대해서 알아볼 것이다.

 

우선은, Inspector 뷰에서 표시되는 두 가지 옵션에 대한 것이다.

 

Server Only - 여기에 체크된 오브젝트는 스폰될 때, 클라이언트에서는 스폰되지 않고 서버에서만 스폰된다.(네트워크 상에서의 스폰은 일반적인 Instantiate가 아닌 다른 방법을 통해서 스폰된다.)

Local Player Authority - 여기에 체크된 오브젝트는 이 오브젝트를 소유한 클라이언트가 오브젝트를 제어할 수 있다. 즉, 해당 클라이언트의 로컬 플레이어 오브젝트가 오브젝트에 대한 권한을 갖는다.

 

그 다음으로는, 네 가지 프로퍼티에 대한 것이다. 스크립트 상에서는 NetworkBehaviour를 상속받는 클래스의 멤버로 볼 수 있는데, 씬에서 스폰된 상태일 때는 Inspector 뷰 아래쪽에 Network Information으로 표시된다.

 

 

우선 설명할 것은 isClient와 isServer라는 프로퍼티이다. 이것은 간단히 말해서 지금의 네트워크가 서버이냐 아니면 클라이언트이냐를 알려주는 프로퍼티이다. 지난 섹션에서 본 Network Manager HUD를 이용하여 LAN Server Only(S)를 선택해서 서버를 열었다면 이 Network Identity의 isServer라는 프로퍼티는 true가 되는 것이고, LAN Client(C)를 선택해서 열린 서버에 접속했다면 isClient라는 프로퍼티가 true가 되는 것이다. 즉, 현재의 네트워크가 서버로서 다른 클라이언트의 접속을 받고 있는 것인지, 클라이언트로서 다른 서버에 접속하고 있는 것인지를 알 수 있다. 이것을 이용하면 서버에서만 동작하고 클라이언트에서는 동작하지 않는 방식의 코드를 작성할 수 있다.

 

일반적으로 이 isServer와 isClient는 둘 중에 하나만 true을 가지지만, LAN Host(H)를 선택하여 네트워크가 게임의 호스트가 되어서 다른 클라이언트들의 연결을 받게 되면 호스트 측에서는 이 두 프로퍼티 모두 true값을 가지게 되고, 호스트에 접속한 클라이언트들은 isClient 프로퍼티만 true값이 된다.

즉, isServer만 true라면 네트워크는 서버 역할만 맡고 있는 것이고, isClient만 true라면 클라이언트 역할만 맡고 있는 것이다. 그리고 isServer와 isClient가 모두 true라면 호스트로서 서버와 클라이언트의 역할을 동시에 하고 있는 것이다.

 

서버와 클라이언트가 분리된 방식은 일반적인 게임 서버나 데디케이트 서버에서 주로 사용되는 것이고, 하나의 클라이언트가 서버의 역할을 함께하는 호스트 방식은 주로 P2P 서버로 사용된다. 다만 P2P 서버 방식은 보안이나 해킹, 핵 등에 취약하다는 단점이 있다.

 

 

 

 

그 다음은 원래라면 HasAuthority 프로퍼티에 대한 설명을 할 차례지만 그전에 필요한 개념이 있기 때문에 isLocalPlayer에 대한 설명을 먼저 하겠다. 지난 섹션에서 클라이언트가 서버에 접속했을때, 이 클라이언트의 플레이어를 위한 하나의 프리팹을 Network Manager의 Player Prefab에 등록해준 것을 기억할 것이다. 이 플레이어 프리팹을 위해 사용되는 프로퍼티가 바로 isLocalPlayer이다.

 

 

 

플레이어 프리팹은 Auto Create Player의 설정을 통해서 하나의 클라이언트가 접속할 때마다, 자동으로 생성되거나, 클라이언트 측의 수동 플레이어 생성 요청을 받아 생성되는데, 이렇게 생성된 플레이어 오브젝트가 내 것인지를 알려주는 것이 바로 isLocalPlayer 프로퍼티이다. 클라이언트 측에서 작동할 코드를 만들때 그 클라이언트의 플레이어 오브젝트만 작동해야 하는 코드라면 isLocalPlayer 프로퍼티를 이용해 제한을 하는 것이 좋다.

 

 

 

 

그 다음은 HasAuthority 프로퍼티에 대한 내용을 알아보자. 이 프로퍼티는 이 네트워크 오브젝트의 권한을 가지고 있는가에 대한 프로퍼티이다.

 

 

 

위의 이미지에서는 Network Identity 컴포넌트의 Local Player Authority에 체크가 되어있는데, 이것이 체크되어 있지 않은 경우에는 그 오브젝트의 권한은 서버가 가지게 되고, 체크가 되어 있는 경우에는 위에서 설명한 isLocalPlayer가 true인 측에서 권한을 가지게 된다. isLocalPlayer가 아닌 쪽에도 이 권한을 줄 수 있지만, 그 방법에 대해서는 다른 섹션에서 설명하겠다.

 

이 hasAuthority 프로퍼티를 테스트하는 방법은 간단하다. 플레이어 프리팹에 Network Transform 컴포넌트를 추가하고 한 번은 Local Player Authority를 켜고, 또 한 번은 Local Player Authority를 끄고 움직여보자.

 

Local Player Authority를 켠 상태에서는 서버에서 아무리 플레이어 오브젝트를 움직여도 클라이언트 측으로 동기화 되지 않을 것이다. 하지만 그 플레이어 오브젝트를 isLocalPlayer로 가지는 클라이언트 측에서 플레이어 오브젝트를 움직이면 그 움직임이 서버와 다른 클라이언트에게 동기화 되는 것을 확인할 수 있다.

 

반대로 Local Player Authority를 끈 상태에서는 그 플레이어 오브젝트를 isLocalPlayer로 가지는 클라이언트는 물론 모든 클라이언트에서 움직여도 서버는 물론이고 다른 클라이언트로 동기화되지 않는다. 하지만 서버에서 플레이어 오브젝트를 움직이면 모든 클라이언트에 동기화된다.

 

네트워크 기능을 사용하는 커스텀 클래스를 만드는 경우, 위의 네 가지 프로퍼티들을 응용해서 각 상황에 따라 어떻게 동작하도록 할 것인지 정해줄 수 있다.

 

 

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

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

 

에셋스토어

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

 

반응형

UNet Tutorial (3) - 기초적인 위치 동기화 구현

 

Network Manager와 Network Manager HUD를 이용한 간단한 서버와 클라이언트 만들기

 

이번 섹션에서 우리는 유니티에서 제공하는 NetworkManager와 NetworkManager HUD, NetworkTransform 등을 이용해서 간단한 위치 동기화 구현을 만들어볼 것이다.

 

 

우선의 위의 화면과 같이 오브젝트의 위치를 파악할 수 있게 카메라가 바닥인 평면을 바라보게 만들자.

 

 

그 다음에는 게임 오브젝트를 하나 만들어서 Network Manager와 Network Manager HUD를 컴포넌트를 넣어주자. 여기서 Network Manager는 게임 내에서 네트워크 통신을 처리해줄 것이고, Network Manager HUD는 유니티 네트워킹 테스트용 UI를 제공한다.

 

 

게임 오브젝트에 Network Manager HUD를 추가하고 게임을 실행하면 위의 이미지처럼 몇 개의 버튼이 화면에 보이게 되고 보이는 버튼을 누르는 것 만으로 간단하게 서버를 열거나 열어놓은 서버에 접속할 수 있게 된다. 이전 섹션에서 설명한 것처럼 LAN Host 버튼을 누르면 클라이언트가 서버의 역할을 겸하게 되는 서버가 열리고, LAN Server Only 버튼을 누르면, 클라이언트의 기능은 배제된 서버만 열리게 된다. 그리고 LAN Client 버튼을 누르면 열린 서버에 접속하게 된다.

 

 

 

 

Network Transform을 이용한 위치 동기화 구현

 

위에서 Network Manager를 이용해서 서버를 열고 접속하는 방법을 확인했으니 이번에는 Network Transform를 이용해서 위치를 동기화하는 방법에 대해서 알아보자. 우선은 게임 씬에 큐브 오브젝트를 하나 만든 후에 아래의 이미지처럼 Network Transform을 컴포넌트에 추가해주자.

 

 

오브젝트에 Network Transform 컴포넌트를 추가하면 하나의 컴포넌트가 자동으로 생성된 것을 볼 수 있다.

 

 

그것은 바로 Network Identity라는 컴포넌트인데, 이름에서도 알 수 있듯이 이 컴포넌트는 오브젝트의 네트워크 ID를 관리하고 네트워킹 시스템에 알리는 역할을 한다. 즉, 이 오브젝트가 다른 서버나 클라이언트의 어느 오브젝트와 동기화되어야 하는지 알리는 역할을 한다. 자세한 옵션에 대해서는 이후에 설명할 것이다.

 

 

 

Network Transform 컴포넌트를 추가했다면, Hierachy 뷰에 있는 오브젝트를 Project 뷰로 드래그 앤 드롭해서 프리팹으로 만들자. 프리팹으로 만든 이후에는 Hierachy 뷰에 있는 오브젝트는 삭제해도 된다.

 

 

그 다음에는 아까 전에 만든 Network Manager의 항목 중에 Player Prefab이라는 곳에 방금 만든 TransformSyncObject를 넣어준다. 이 Player Prefab은 한 명의 플레이어가 접속했을 때마다 생성되는 프리팹을 의미한다.

 

여기까지 작업했다면 프로젝트를 빌드하고 서버를 에디터에서 켜고 빌드된 프로젝트를 통해 클라이언트로 접속해보자.

 

 

 

접속하면 우리가 만들어서 플레이어 프리팹으로 등록한 오브젝트가 생겨나고 서버 측 에디터의 뷰에서 피벗을 잡고 움직이면 클라이언트 측 화면에서도 함께 움직이는 것을 볼 수 있다. 다만, 서버에서 움직임과는 다르게 클라이언트의 움직임은 약간 끊어져서 보이게 되는데 이것은 여러가지 방법으로 해결할 수 있다.

 

 

 

 

 

첫 번째 방법으로는, Network Transform 옵션에서 Network Send Rate를 높여주는 방법이 있다. 이것을 올려주면 초당 위치 동기화 횟수를 늘려서 통신량이 많아지는 대신에 좀 더 부드러운 움직임이 가능하게 만들어 준다. 다만 Inspector 뷰에서 바꾸는 방법은 초당 29회가 한계로 더 짧은 주기로 동기화하기를 바란다면, 두 번째 방법으로, 별도의 커스텀 네트워크 트랜스폼을 만드는 것이 좋다. 또한 부드러운 움직임을 원하지만 통신량이 많지 않기를 원한다면 커스텀 네트워크 트랜스폼을 구현하고 보간이나 Lerp, 추측항법 등을 가미해야 한다.

 

 

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

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

 

에셋스토어

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

 

반응형

UNet Tutorial (2) - 간단한 개념

 

유니티에서 사용되는 개념들

 

1. 서버와 호스트

 

Unity 네트워크 시스템에서 게임은 한 개의 서버와 여러 개의 클라이언트를 가지게 된다. 이러한 방식은 클라이언트는 입력만 받고 서버에 전송해주고, 입력을 전송받은 서버가 모든 게임의 계산 처리를 한 이후 클라이언트에 전송해주는 데디케이트(Dedicate) 서버 방식에 사용된다. 전용 서버가 없는 P2P 방식의 경우에는 클라이언트 중 하나가 서버의 역할을 맡게 되며, 이 클라이언트는 “호스트”라고 부른다.

 

 

호스트는 동일 프로세스에서 서버이자 클라이언트이다. 호스트는 LocalClient라는 특수 클라이언트 유형을 사용하며, 다른 클라이언트는 RemoteClient를 사용한다. LocalClient는 동일 프로세스에 위치하고 있으므로 직접 함수 호출과 메시지 대기열을 통해 로컬 서버와 통신을 한다. RemoteClient는 서버와 일반적인 네트워크 연결을 통해 데이터를 주고 받는다.

네트워크 시스템의 목표 중 하나는 LocalClients와 RemoteClients 코드를 동일하게 하여 개발자가 되도록이면 한 종류의 클라이언트만 고려해도 되도록 하는 것이다.

 

 

 

 

2. 인스턴스화와 스폰

 

Unity에서는 GameObject.Instantiate() 함수를 통해서 새로운 Unity 게임 오브젝트를 생성한다. 하지만 네트워크 시스템의 경우 오브젝트는 NetworkServer를 통해서 “스폰”되어야만 네트워크에서 활성화가 된다. 이 과정은 서버에서만 할 수 있으며, 이를 통해 오브젝트가 연결된 클라이언트에서도 생성되도록 할 수 있다. 오브젝트가 스폰된 이후에는 스폰 시스템이 배포된 오브젝트의 생명주기 관리와 상태 동기화 원칙을 사용한다.

 

 

3. 플레이어, 로컬 플레이어, 권한

 

네트워크 시스템에서 플레이어 오브젝트는 특수하게 취급된다. 게임 플레이어 각각에 연관된 플레이어 오브젝트에 커맨드가 보내지게 된다. 자신이 아닌 다른 사람의 플레이어 오브젝트에는 커맨드를 호출할 수 없다. 플레이어가 추가되고 관계가 연결된 경우, 해당 플레이어 오브젝트는 플레이어 클라이언트의 “로컬 플레이어” 오브젝트가 된다. isLocalPlayer 프로퍼티는 true로 설정되며, 클라이언트 오브젝트에 호출된 OnStartLocalPlayer() 콜백이 발생한다. 아래 다이어그램은 두 클라이언트와 해당 로컬 플레이어의 예제를 보여준다.

 

 

오직 “본인” 플레이어 오브젝트에만 isLocalPlayer 플래그가 설정된다. 이 플래그를 통해 입력 프로세싱 필터링, 카메라 위치 조작, 또는 특정 플레이어에 대해서만 변경되어야 하는 클라이언트측 동작을 처리할 수 있다.

플레이어 오브젝트는 isLocalPlayer와 더불어 “로컬 권한”을 가질 수도 있다. 이는 소유자 클라이언트의 플레이어 오브젝트가 해당 오브젝트에 대한 권한이 있다는 의미입니다. 권한은 대부분 움직임을 제어하는 데 주로 활용되지만, 다른 용도로도 사용할 수 있습니다. NetworkTransform 컴포넌트는 이 권한을 이해하며 설정된 경우 클라이언트에서의 움직임을 보냅니다. NetworkIdentity는 LocalPlayerAuthority를 설정할 수 있는 체크박스가 있다.

적 오브젝트와 같이 비플레이어 오브젝트는 연관 클라이언트가 없으므로, 서버가 권한을 가지게 된다.

 

 

NetworkBehaviour에 있는 “hasAuthority” 프로퍼티를 사용하여 오브젝트에 권한이 있는지 파악할 수 있다. 따라서 비플레이어 오브젝트는 서버에 권한이 있고, 플레이어 오브젝트 중 localPlayerAuthority가 설정된 것은 각 소유자 클라이언트에 권한이 있다.

 

 

 

 

4. 비플레이어 오브젝트의 클라이언트 권한

 

Unity 5.2 릴리스 버전부터 클라이언트는 비플레이어 오브젝트에 권한을 가질 수 있으며, 두 가지 방법이 있다. 하나는 NetworkServer.SpawnWithClientAuthority로 오브젝트를 스폰한 후 클라이언트 네트워크 연결에 전달하여 소유권을 이전하는 방법이고 다른 하나는 NetworkIdentity.AssignClientAuthority를 클라이언트 네트워크 연결과 사용하여 소유권을 이전하는 방법이다.

클라이언트에 권한을 할당하면 오브젝트 NetworkBehaviours에 OnStartAuthority()가 호출되며, hasAuthority 프로퍼티는 true가 된다. 다른 클라이언트의 hasAuthority 프로퍼티는 계속 false가 된다. 클라이언트 권한이 있는 비플레이어 오브젝트는 플레이어와 같이 커맨드를 보낼 수 있다. 이 커맨드는 오브젝트 서버 인스턴스에서 실행되지, 연결에 관련된 플레이어 서버에서 실행되지 않는다.

클라이언트 권한이 있는 비플레이어 오브젝트는 NetworkIdentity에서 LocalPlayerAuthority가 체크되어 있어야 한다.

아래는 오브젝트를 스폰하고 스폰한 플레이어 클라이언트의 권한을 할당하는 예시이다.

 

[Command]
void CmdSpawn()
{
    var go = (GameObject)Instantiate(otherPrefab, transform.position + new Vector3(0,1,0), Quaternion.identity);
    NetworkServer.SpawnWithClientAuthority(go, connectionToClient);
}

 

 

 

 

5. 네트워크 컨텍스트 프로퍼티

 

NetworkBehaviour 클래스에는 언제든 네트워크된 오브젝트의 네트워크 컨텍스트가 무엇인지 알 수 있게 하는 프로퍼티가 있다.

  • isServer - 오브젝트가 스폰되었고 서버나 호스트에 있는 경우 true다.
  • isClient - 오브젝트가 서버에 의해 생성되었고 클라이언트에 있는 경우 true다.
  • isLocalPlayer - 오브젝트가 해당 클라이언트 플레이어 오브젝트인 경우 true다.
  • hasAuthority - 로컬 프로세스가 이 오브젝트를 소유하는 경우 true다.

이들 프로퍼티는 에디터 인스펙터 창의 오브젝트 미리보기 창을 통해 확인할 수 있다.

 

 

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

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

 

에셋스토어

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

 

반응형

 

UNet Tutorial (1) - Overview

 

네트워크 게임을 제작할 때, 클라이언트의 네트워크를 구현하는 방법은 여러가지가 있다. 대표적인 방법으로는 포톤 클라우드가 제공하는 Photon Unity Networking과 넷텐션의 ProudNet으로 구현하는 방법등이 있다. 이번 포스팅에서는 이런 외부에서 제공하는 방식이 아니라 유니티가 제공하는 Unity Networking을 이용하는 방법에 대해서 알아보게될 것이다.

 

사실 이전까지는 유니티에서 제공하는 Networking은 잦은 버그와 잘알려지지 않은 점, 사용 예가 많지 않은 점등을 이유로 잘 사용되지 않은 편인데, 계속된 버전업과 지난 2017년 12월 04일에 유니티 테크놀러지 측에서 게임 서버 호스팅 업체를 인수한 것으로 충분히 적용해 볼만 하다고 여겨져서 튜토리얼을 작성하게 되었다.

 

 

 

 

UNet의 구조

 

 

유니티의 네트워킹 API는 위의 이미지와 같은 레이어로 이루어져 있는데 두 가지 방식으로 사용할 수 있다.

 

1. 유니티에서 제공하는 "High-Level" 스크립팅 API - HLAPI라고 부르며, 이것을 이용하여 네트워킹 기능을 구현할 경우 Low-Level의 세부 사항에 대해 신경쓰지 않고도 멀티 유저 게임에 일반적으로 필요한 대부분의 요구 사항을 만족시킬 수 있는 커맨드에 접근할 수 있다.

2. Low-Level의 전송 레이어(Transport Layer) API - 네트워크 인프라 또는 커스텀화된 고급 멀티 플레이어 기능을 구현하고자 할 경우, 이 API를 통해 저수준에서 스스로의 네트워킹 시스템을 빌드할 수 있으며, 이는 게임 네트워킹에 있어서 구체적이거나 고급 요구 사항이 있는 경우 유용하다.

 

위의 두 가지 API를 통해서 개발자는 저수준에서 고수준까지 원하는 방법으로 게임의 네트워크를 구현할 수 있게 된다.

 

 

 

Unity가 제공하는 서비스

 

이러한 API 이 외에 유니티는 Unity Multiplayer라는 서비스를 통해서 다음과 같은 기능들을

  • 매치메이킹 서비스
  • 매치를 생성하고 홍보.
  • 참여 가능한 매치 리스트를 제공하고 매치에 참여.
  • 릴레이 서버
  • 전용 서버 없이 인터넷을 통한 게임플레이.
  • 매치 참여자에게 메시지 전송.

단, 이 Multiplayer 서비스는 유료 서비스로 이용하게 될 경우 별도의 비용을 지불해야 한다.

 

 

다음 섹션에서는 UNet의 몇몇 개념과 간단한 구현 튜토리얼을 알아보게 될 것이다.

 

 

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

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

 

에셋스토어

여러분의 작업에 필요한 베스트 에셋을 찾아보세요. 유니티 에셋스토어가 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 프로젝트와 Firebase 연결하기

 

개요

구글에서 Firebase라는 새로운 서비스가 나왔다. 이 서비스는 구글이 가지고 있는 인프라를 이용해서 별도의 서버실이나 장비 없이도 네트워크를 구축할 수 있도록 도와줄 뿐만 아니라 구글이 제공하는 기능들과 서비스를 이용해서 빠르고 쉽게 개발할 수 있도록 도와준다.

 

 

대표적으로 지원하는 기능은 회원가입, 로그인등을 처리할 수 있는 인증 기능과 NoSQL 기반의 실시간 데이터베이스 등이 있다. 이 구글의 Firebase를 이용해서 간단한 게임 네트워크를 구현할 수 있다.

 

 

연결하기

 

 

https://console.firebase.google.com/?hl=ko

위 주소로 들어가면 Firebase에 프로젝트를 추가할 수 있게 된다.

 

1. 프로젝트 추가를 선택한다.

 

2. 프로젝트 이름을 입력하고 국가를 선택하고 프로젝트 만들기를 누른다.

 

3. 타겟으로 하는 플랫폼을 기반으로 Firebase를 추가해야 한다. 여기서는 Android를 대상으로 Firebase를 추가할 것이다. 위 화면에서 Android 앱에 Firebase 추가를 선택한다.

 

3. Android 패키지 이름을 입력하고 앱 등록을 누른다. 이 이름은 나중에 유니티에도 입력해주어야 한다.

 

4. google-services.json 파일을 다운로드받는다.

 

여기까지 하면 우선 Firebase에서 설정할 작업은 끝났다. 이후의 작업은 유니티에서 해야하는 작업이다. 구글은 유니티에서 사용할 수 있는 파이어베이스 유니티 SDK를 제공하고 있다. 그것은 다음 링크에서 다운로드 받을 수 있다.

 

https://firebase.google.com/docs/unity/setup

 

파이어베이스 유니티 SDK를 다운로드 받았다면 새 유니티 프로젝트를 생성해야한다. 프로젝트가 생성된 이후에는 아까전에 다운로드 받은 google-services.json 파일을 프로젝트에 포함시켜 준다.

 

 

그리고 Edit > Project Settings > Player 에 들어가서 Package Name에 아까 전에 파이어베이스 프로젝트를 생성하면서 입력했던 Android 패키지 이름을 넣어준다.(이 예제에서는 com.firebase.test 이다.)

 

 

그리고 난 이후에 아까전에 받은 파이어베이스 유니티 apk의 압축을 풀어서 그 중에 필요로 하는 기능을 유니티에서 임포트해야 한다.

 

 

이상의 과정이 모두 끝난다면 파이어베이스와 유니티를 연결하는 과정은 모두 끝이 난다. 이후의 섹션에서는 파이어베이스의 각 기능을 활용하는 법에 대해서 알아볼 것이다.

 

추가적으로 이야기해야할 점은, 이번 예시에서 파이어베이스 프로젝트에 등록된 앱은 안드로이드 앱이기 때문에, 유니티로 만든 게임이 파이어베이스 서버에 접속하기 위해서는, 게임을 안드로이드로 빌드해서 모바일에 넣어주어야 한다는 것이다.

 

 

 

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

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

 

에셋스토어

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

 

반응형

P2P 게임 네트워크 구현시 슈퍼 피어 선정하기

 

 

 

게임 네트워크를 제작할 때, 대다수의 게임이 서버와 통신을 하지만 몇몇 게임의 경우 로그인이나 게임의 데이터 송수신은 서버와 하지만 네트워크 게임 플레이 자체는 클라이언트 간의 통신, 즉 peer-to-peer(이하 P2P) 방식으로 처리하는 경우가 있다. 일반적으로 소규모 멀티 플레이 게임이나 데이터 전송량이 많은 FPS 같은 게임의 멀티 플레이에서 P2P 방식을 사용할 것을 권장한다.

 

이러한 소규모 온라인 게임(Multi Online, MO)에서 사용하는 P2P 통신 방법의 하나로, P2P 그룹 내에 있는 멤버 중 하나가 게임 플레이를 위한 메시지의 송수신을 담당하는 Super peer(슈퍼 피어 혹은 호스트) 중심의 P2P 네트워킹이 있다.

 

간단한 예를 들자면 FPS 게임에서 P2P 네트워킹을 사용하는데 게임의 종료 조건 중의 하나가 타임 오버일 때, 그 P2P 그룹에 속하는 모든 클라이언트가 각자의 시간을 가지고 계산한다면 상황에 따라서 게임이 종료되는 시간이 각 클라이언트마다 제각각인 상황이 발생할 수도 있다. 이러한 상황을 방지하기 위해 P2P 그룹의 멤버들 중에서 하나의 슈퍼 피어를 선정하고 그 슈퍼 피어인 멤버의 클라이언트가 게임의 시간을 관리하게 하는 것이다. 그렇게 함으로써 모든 클라이언트의 종료 시점은 동일해질 수 있다.

 

이런 슈퍼 피어를 선정할 때에도 고려해야할 조건들이 있는데, 그것은 바로 P2P 그룹의 멤버 중에서 가장 네트워크 접속 상태가 좋고 전송 속도가 빠른 멤버를 슈퍼 피어로 삼아야 한다는 것이다. 만약에 통신 품질이 좋지 않은 클라이언트를 슈퍼 피어로 선정하게 되면 게이밍 품질이 하락할 수 있다. 예를 들자면 FPS 게임에서 캐릭터의 이동을 슈퍼 피어의 기준으로 동기화하였는데, 슈퍼 피어의 상태가 좋지 않다면 캐릭터의 이동이 뚝뚝 끊어져 보일 것이다.

 

슈퍼 피어를 선택하는 방법은 다음과 같다 :

 

1. 인터넷 공유기 뒤에 있지 않고 직접 회선에 물려있는 경우 슈퍼 피어로서의 자격이 상승한다.

2. 클라이언트의 송신 속도가 높을 수록 슈퍼 피어로서의 자격이 상승한다.

3. 클라이언트의 성능이 좋아서 초당 실행 프레임레이트(framerate)가 높은 경우 슈퍼 피어로서의 자격이 상승한다. 가령, 물리 시뮬레이션을 수퍼피어가 전담하는 게임 개발의 경우 이것이 중요해진다. 자세한 것은 Proud.CNetClient.SetApplicationHint 도움말을 참고하라.

 

직접 개발하게 된 네트워크 API의 경우엔 위의 조건을 계산해내는 기능을 직접 구현해야 하겠지만, 프라우드넷에서는 그와 관련된 함수가 이미 존재한다. Proud.CNetServer.GetMostSuitableSuperPeerInGroup() 함수와 Proud.CNetServer.GetSuitalbeSuperPeerRankListInGroup() 함수가 바로 그것이다.

 

이 함수들의 설명은 다음과 같다 :

 

virtual HostID Proud::CNetServer::GetMostSuitableSuperPeerInGroup(

HostID groupID,

const CSuperPeerSelectionPolicy & policy = CSuperPeerSelectionPolicy::GetOrdinary(),

const HostID * excludees = NULL,

intptr_t excludeesLength = 0

)

 

이 메서드는 groupID가 가리키는 P2P 그룹에 있는 멤버들 중 가장 최적의 슈퍼 피어를 찾아서 알려주는데, P2P 그룹을 생성하거나 변경한 직후에는 슈퍼 피어 후보자를 제대로 얻지 못할 수도 있다. 처음 이 메서드를 호출한 이후 2-5초 후에 다시 호출해주면 더 정확한 슈퍼 피어를 찾을 수 있다.

 

매개변수

groupID :: 슈퍼 피어를 찾고자하는 P2P 그룹의 ID

policy :: 슈퍼 피어를 선정하는 정책. 자세한 설명은 CSuperPeerSelectionPolicy 를 참고.

excludees :: groupID가 가리키는 P2P 그룹의 멤버 중 excludees에 들어있는 멤버들은 제외하고 선별한다. 예를 들어 이미 사용하던 슈퍼 피어가 자격을 박탈당한 경우 다시 재선발되는 것을 막고자할 때 유용하다.

 

반환값

슈퍼 피어로서 가장 적격인 클라이언트의 HostID. P2P 그룹이 찾지 못했거나 excludees에 의해 모든 멤버가 필터링되면 HostID_None을 리턴한다.

 

virtual int Proud::CNetServer::GetSuitableSuperPeerRankListInGroup(

HostID groupID,

SuperPeerRating * ratings,

int ratingsBufferCount,
const CSuperPeerSelectionPolicy & policy = CSuperPeerSelectionPolicy::GetOrdinary(),

CFastArray<HostID> & excludees = CFastArray<HostID>

)

 

이 메서드 역시 Proud.CNetServer.GetMostSuitableSuperPeerInGroup() 와 마찬가지로 최적의 슈퍼 피어 후보자를 찾아주지만 이전 메서드와 다른 점은 최고 순위의 후보자 뿐만 아니라 차순위의 후보자 역시 찾아서 준다.

 

매개변수

groupID :: 슈퍼 피어를 찾고자하는 P2P 그룹의 ID

ratings :: 여기에 적합한 슈퍼 피어 후보자 목록이 채워져서 반환된다. 가장 적합한 후보자 순으로 정렬되어 채워진다.

ratingsBufferCount :: rating의 배열 항목 갯수이다. 이 함수가 리턴하는 배열의 크기는 이 크기 이상은 채우지 않는다.

policy :: 이전 메서드의 설명과 같다.

excludees :: 이전 메서드의 설명과 같다.

 

반환값

ratings에 채워진 항목의 갯수를 반환한다. P2P 그룹을 찾지 못했거나 excludees에 의해 모든 멤버가 필터링되면 0을 반환한다.

 

 

위의 함수들을 적절하게 이용하면 적합한 클라이언트를 슈퍼 피어로 선정할 수 있을 것이고, 게이밍의 질을 향상시킬 수 있을 것이다.


참고

 

 

ProudNet Documentation

이 내용이 얼마나 도움이 되셨나요? 피드백이 기록되었습니다. 감사합니다. 전혀 도움이 되지 않음도움이 되지 않음조금 도움이 됨도움이 됨매우 도움이 됨

guide.nettention.com

 

https://help.nettention.com/cpp/1.7.31494-master/class_proud_1_1_c_net_client.ndn/

ProudNet Documentation Version ===== Selection ===== 1.7.56164-master 1.7.54692-master 1.7.54066-master 1.7.53519-master 1.7.53113-master 1.7.52303-master 1.7.50227-master 1.7.48971-master 1.7.47942-master 1.7.47302-master 1.7.46201-master 1.7.44387-master

help.nettention.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

 

반응형

ProudNet 소개

 

일반적인 싱글 플레이 게임을 개발할 때는 상관없는 이야기이지만, 멀티 플레이 요소가 조금이라도 들어가거나 멀티 플레이 위주의 게임에서는 항상 고민해야할 것이 있다. 그것을 바로 네트워크를 어떻게 개발할 것인가? 라는 부분이다. 이에 대한 해답은 여러가지가 있을 수 있는데, 대표적인 두 가지 방법으로는 직접 구현하기와 다른 회사의 API를 사용하는 것이 있다.

 

하지만 직접 구현하는 방법의 경우에는 굉장한 시간과 노력이 들기 마련이다. 그리고 팀 내에 아직 네트워크 개발의 인력이나 노하우가 없다면 연구 개발하는데 걸리는 시간과 비용은 기하급수적으로 늘어나게 될 것이다. 이렇듯이 직접 개발하는 것이 어려운 상태라면 개발자의 눈은 자연스레 다른 회사의 API로 돌아갈 수 밖에 없다. 이미 시중에는 여러 종류의 네트워크 API들이 나와있다. 서버 구축 비용을 절감할 수 있는 클라우드 방식의 Photon Cloud라던가 구글에서 얼마전 서비스를 시작한 Firebase라던가 하는 것들이 있다. 하지만 이번에 소개할 것은 Nettention사의 ProudNet이라는 게임 네트워크 엔진이다.

 

공식 홈페이지 :: http://proudnet.com/

 

 

이 프라우드넷은 위의 이미지에서 보이듯이 이미 여러 게임에서 많이 사용된 게임 네트워크 API로서 캡콤의 스트리트 파이터 5나 넥슨의 마비노기 마영전 같은 대형 프로젝트에서도 사용되었고 그로 인해 게임 네트워크 엔진으로서 필요한 기능 역시 확실하게 갖추고 있다.

 

일반적인 게임 회사가 아닌 공부하려는 학생과 개인 개발자나 인디 게임팀 혹은 인디 게임 회사의 경우, 이런 API를 사용하는데 드는 비용이 무엇보다 중요할 것이다.

 

 

이에 대한 정책도 확실한데 공부를 위한 퍼스널 라이센스 같은 경우 영리목적 프로젝트에는 사용이 불가능하고 동시 접속자 수 역시 20명으로 제한되지만 API의 기능 자체는 제한없이 확실하게 사용해서 공부를 할 수 있고, 소규모 개발팀을 위한 인디 라이센스 역시 무료로 제공되고 있다.

 

그리고 또 하나의 장점은, 넷텐션은 국내 개발사로서 프라우드넷 공식 문서가 완벽한 한글로 지원된다는 점이다. 외국의 API나 게임 엔진을 사용할 때는 최신 기능에 대한 공식 문서 번역은 항상 한 발 느리기 때문에 구글링을 해서 찾아야하는 번거로움이 없기 때문에 개발 속도가 한층 더 빨라질 수 있다.

 

프라우드넷 공식 문서 ::

 

ProudNet Documentation

이 내용이 얼마나 도움이 되셨나요? 피드백이 기록되었습니다. 감사합니다. 전혀 도움이 되지 않음도움이 되지 않음조금 도움이 됨도움이 됨매우 도움이 됨

guide.nettention.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

 

반응형

Unity3D로 게임 클라이언트를 제작하고 Nettention사의 ProudNet을 이용하여 게임 네트워크를 담당하여 게임을 제작하는 과정에서 안드로이드 빌드로 포팅해서 모바일에서 실행시켰을 때 클라이언트가 서버에 제대로 접속하지 못하는 문제점을 발견했다. 똑같은 클라이언트에 대해서 PC로 포팅 했을때에는 서버에 제대로 접속이 되는데에 반해서 모바일 버전은 접속이 안되는 바람에 하루 가까이 시간을 쏟아서 해결책을 찾았는데 문제의 해결법은 매우 간단했다.

 

해결책

  1. File 메뉴에서 Build Setting을 연다.(혹은 Ctrl + Shift + B 단축키로 열 수 있다.)
  2. Platform 리스트 중에서 Android를 선택하고 그 아래에 있는 Player Setting ... 버튼을 누른다.
  3. 그러면 Inspector 창에 Player Setting이 열리는데 아래쪽에 안드로이드 모양 탭중에서 Other Setting이라는 메뉴를 찾는다.
  4. 그 중에 굵은 글씨로 Configuration 메뉴 중에 Internet Access 라는 항목이 있다.
  5. 이 항목의 기본 값은 Auto로 되어 있는데 이것을 Require로 변경한다.

 

 

위의 그림처럼 Internet Access 항목을 Require로 변경해주면된다.

 

이상의 과정을 모두 끝내고 난 이후에 다시 안드로이드 버전으로 빌드하여 모바일에 설치하고 실행하면 서버 접속이 원활하게 이루어지는 것을 알 수 있다.

 

이러한 문제가 ProudNet API를 사용할 때만 나타나는 것인지 아니면 다른 네트워크 API를 사용했을때도 나타나는 문제인지는 모르겠지만 인터넷 상에서 이와 관련된 정보를 찾아보기가 쉽지 않아서 개인적으로 참고도 할 겸, 다른 사람이 찾아봐서 도움도 될 겸해서 포스팅을 남겨둔다.

 

 

 

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

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

 

에셋스토어

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