레이블이 NGUI인 게시물을 표시합니다. 모든 게시물 표시
레이블이 NGUI인 게시물을 표시합니다. 모든 게시물 표시

1월 19, 2016

유니티 5 네트워킹 시스템 HLAPI를 사용하여 LAN 멀티플레이 기본 틀 만들기 - 3(완결)


마지막 장입니다!
1 편에서 예고했던 대로, 동일한 네트워크 내에 존재하는 서버나, 클라이언트를 인식하고, 연결하는 것을 해보겠습니다.
예를 들어, 게임에 접속해서 방을 만들고, 접속한 유저들이 자동으로 뜨는 목록을 보고 싶다거나 할 때 유용하게 쓰일 것 같습니다.
다행히도, HLAPI 의 NetworkDiscovery 컴퍼넌트를 사용해서 이를 쉽게 구현해볼 수 있습니다.

이 컴퍼넌트는 전송 계층의 UDP Broadcasting 기능을 사용하며, 따라서 인터넷에서 작동하는 것이라 오로지 LAN 상에서만 사용할 수 있습니다.
컨셉은 단순히 특정 포트번호로 '방송'을 송신하는 개체와 수신하는 개체 두 가지가 있고, 방송을 수신하였을 때 이벤트를 받아서 송신한 개체의 IP에 접속하는 것입니다.(송신할 때 IP 주소나 기타 데이터를 를 같이 내보냅니다.)

역시나, NetworkManager 와 같이 빈 오브젝트에 NetworkDIscovery 컴퍼넌트를 추가하면 됩니다만,
우리는 기본 제공 GUI 를 사용하지 않고 커스텀하기 위해 코드를 조금 더 쳐 보겠습니다.
앞서 작성한 MyNetManager 를 불러와, 다음 노랗게 색칠한 코드 한 줄을 추가합니다.



 











다음은 서버와 클라이언트로 구동을 시작하는 SetupServer, SetupClient 메서드에 각각 
UDP 브로드캐스팅을 시작하는 명령을 넣습니다.
공통으로 Initialize() 를 실행하여 컴퍼넌트를 초기화 한 뒤,
서버에서는 StartAsServer( ), 클라이언트에서는 StartAsClient( ) 를 각각 실행하면
이제 동일한 네트워크 내의 유니티 게임들이 서로를 인식하게 됩니다.






























하지만 이대로 실행하면 인식을 했는지 전혀 알 수가 없겠죠??

클라이언트에서 방송을 수신했을 때 발생하는 이벤트를 가로채서 처리를 해야 합니다.

빈 게임오브젝트를 생성하고 이름을 'Broadcaster'로 변경하고, 다음 C# Script 를 새로 생성하여 붙입니다.

// MyNetworkDiscovery.cs


using UnityEngine;
using System.Collections;
using UnityEngine.Networking;

public class MyNetworkDiscovery : NetworkDiscovery
{

    public override void OnReceivedBroadcast(string fromAddress, string data)
    {
        //서버로부터 브로드캐스트 메시지를 받았을 때 실행됩니다.
        base.OnReceivedBroadcast(fromAddress, data);
        Debug.Log("recived broadcast from : " + fromAddress);

        StartCoroutine("TweenAnim");
    }
}

그리고 NetworkManager 컴퍼넌트의 인스펙터창에서 빈 칸으로 되어있는
NetworkDiscovery 에 Broadcaster 를 다음과 같이 끌어다 놓습니다.











































NetworkDiscovery 로 부터 상속받은 OnReceivedBroadcast 메서드는 fromAddress 에 
브로드캐스트 메시지를 송신한 개체의 IP 주소, 함께 보낸 data 를 인자로 받습니다.
IP 주소 같은 경우, 게임 내에서 빈번하게 쓰일 것이므로 위 콜백에

   NetworkManager.singleton.networkAddress = fromAddress;

코드를 추가하여 네트워크 매니저 싱글턴이 IP 주소를 저장하도록 할 수도 있습니다.

이제 두 모바일 기기를 같은 와이파이로 접속시킨 후, 각각을 서버와 클라이언트로 구동하여,
클라이언트에서는 OnReceivedBroadcast 콜백에서 라벨을 띄워준다거나, 어떤 표시를 하여 송수신이 이루어졌는지 확인해봅시다.

다음 동영상은 서버로부터 메시지를 수신하면 라벨에 트윈 애니메이션을 적용시켜 수신하였음을 알려주는 시연 동영상입니다.



완성된 코드는 다음 저장소에서 다운 받으실 수 있습니다.


지금까지 유니티5의 HLAPI 를 사용해 네트워크 객체를 서로 연결하고, 네트워크 메시지를 수신할 수 있는 기본적인 기능을 구현하는 법을 알아보았습니다.
읽어주셔서 감사드리고, 많은 도움이 됬으면 좋겠습니다^^

12월 12, 2015

NGUI vs UGUI ?

NGUI vs UGUI ?


유니티로 작업하면서 UI 관련해서 어떤 툴을 써야할지 검색하다보니 두 가지 선택사항이 있었다.
NGUI(Next-Gen UI) 라는 기존의 범용적으로 쓰이는 플러그인과 유니티 4.6버전부터 새로이 공개된 UGUI가 있다.

NGUI는 일단 95$ 이며, 많은 개발자들이 오랫동안 써와서 레퍼런스가 충분하다는 장점을 가지고 있다. 반면 UGUI는 유니티 자체에서 공식적으로 지원하는 유일한 UI 도구이며, 무료라는 큰 메리트가있지만 역사가 오래되진 않았다.

아래 유니티 포럼 링크를 따라가면 둘의 장단점에 대해 유저들이 다양하고 디테일한 관점에서 분석하여 댓글을 달아놓은 것을 볼 수 있다.

링크

UGUI 제작에 NGUI 개발자가 참여했다는 점에서 둘 중에 무엇을 써도 크게 상관은 없을 듯 하나,
급하지 않다면 UGUI 를 쓰면서 사용이 활발해지기를 기다려도 나쁘지 않을 것 같다는 생각이다.