PUN Classic (v1), PUN 2, Bolt는 휴업 모드입니다. Unity2022에 대해서는 PUN 2에서 서포트하지만, 신기능의 추가는 없습니다. 현재 이용중인 고객님의 PUN 및 Bolt 프로젝트는 중단되지 않고, 퍼포먼스나 성능이 떨어지는 일도 없습니다. 앞으로의 새로운 프로젝트에는 Photon Fusion 또는 Quantum을 사용해 주십시오.

EnableLanBroadcast & 예제

아래의 예제는 클라이언트와 서버간의 자동-연결 목적을 위한 두 개의 안드로이드 기기간 동작을 위한 EnableLanBroadcast를 얻는 방법에 대해서 설명하고 있습니다.

제가 가졌었던 문제들은 메뉴 코드 내부에서 EnableLanBroadcast와 SetHostInfo를 호출하려고 했을때였습니다. 전 이게 너무 빨랐다고 믿고 있습니다.

제가 필요했던것은 ClientCallbacks과 ServerCallbacks 스크립트에서 BoltStarted() 콜백을 집어넣는 것 이었습니다.

또한 안드로이드의 메니페스트 파일에 추가 해야 했습니다:

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE">

동일한 기기에서 클라이언트와 서버를 동시에 수행하지 못하므로 두개의 다른 기기를 사용하여 테스트를 수행해야한다는 것 입니다.

다음은 자동 연결에 대한 간단한 LAN 메뉴 입니다:

C#

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using UdpKit;

public class MenuLan : MonoBehaviour {
      
   private bool _findLanServer;   
   private int _lanServerPort = 27000;
   
   void OnGUI() {

      GUILayout.BeginArea(new Rect(10, 10, Screen.width - 20, Screen.height - 20));
  
         //display sessions
         //foreach(var session in BoltNetwork.SessionList) {
         //   if(GUILayout.Button("Server: " + session.Value.HostName)) {            
         //      UdpKit.UdpEndPoint endpoint = UdpKit.UdpEndPoint.Parse(session.Value.LanEndPoint.Address + ":" + _lanServerPort);
         //      BoltNetwork.Connect(endpoint);                                                      
         //   }
         //}      

         //if we have a session then auto-connect
         if(BoltNetwork.SessionList.Count > 0)
         {
            UdpSession session = null;
            foreach(var s in BoltNetwork.SessionList) {
               session = s.Value;
               break;
            }
            if(session != null)
            {
               UdpKit.UdpEndPoint endpoint = UdpKit.UdpEndPoint.Parse(session.LanEndPoint.Address + ":" + _lanServerPort);
               BoltNetwork.Connect(endpoint);               
            }
         }

         if (GUILayout.Button ("<- Back", GUILayout.ExpandWidth (true), GUILayout.ExpandHeight (true))) {
            _findLanServer = false;                              
         }
      }
      else{                  
         if (GUILayout.Button ("Start LAN Game", GUILayout.ExpandWidth (true), GUILayout.ExpandHeight (true))) {         
            StartServer (_lanServerPort, "Main_Menu_Lan_Lobby");                                       
         }
         
         if (GUILayout.Button ("Find LAN Game", GUILayout.ExpandWidth (true), GUILayout.ExpandHeight (true))) {
            StartClient(_lanServerPort);
         }
      }         
      GUILayout.EndArea();
   }
      
   void StartServer(int serverPort, string map) {
      
      BoltLauncher.StartServer(new UdpKit.UdpEndPoint(UdpKit.UdpIPv4Address.Any, (ushort)serverPort));
      BoltNetwork.LoadScene(map);
   }

   void StartClient(int serverPort)
   {
  
    BoltLauncher.StartClient (new UdpKit.UdpEndPoint(UdpKit.UdpIPv4Address.Any, (ushort)serverPort));
      _findLanServer = true;
   }
}

ServerCallbacks 스크립트는 다음과 같습니다:

C#

using UnityEngine;
using System.Collections;

[BoltGlobalBehaviour(BoltNetworkModes.Server)]

public class ServerCallbacks : Bolt.GlobalEventListener
{

   public override void BoltStarted()
   {

      BoltNetwork.EnableLanBroadcast();
      BoltNetwork.SetHostInfo("MyGame", null);
      Debug.Log("Bolt started, enabling LAN boardcast - setting host info");
   }   
}

ClientCallbacks 는 다음과 같습니다:

C#

using UnityEngine;
using System.Collections;

[BoltGlobalBehaviour(BoltNetworkModes.Client)]

public class ClientCallbacks : Bolt.GlobalEventListener
{
   public override void BoltStarted()
   {

      BoltNetwork.EnableLanBroadcast();
      Debug.Log("Bolt started on Client, enabling LAN boardcast");
   }
}
Back to top