인프런에 Rookiss님의 강의(링크)를 들으면서 나왔던 내용을 정리하게 되었습니다.
멀티플레이 서버를 구축하고 클라이언트에서 빌드를 진행 후 다중 클라이언트를 구동하는 자동화 코드에 관한 내용이였습니다.
멀티플레이 게임을 구축할 때 거의 모든 프로젝트에서 세팅해야 하는 것입니다.
이런 세팅 관련된 것을 단순히 가져다가 사용하는게 아니라,
각 환경에 맞게 세팅해야 하기 때문에 코드에 대한 내용을 좀 더 찾아보고 정리하기로 했습니다.
using UnityEditor;
using UnityEngine;
public class MultiplayerBuildAndRun
{
[MenuItem("Tools/Run Multiplayer/Win64/1 Players")]
static void PerformWin64Build1()
{
PerformWin64Build(1);
}
#region Window
[MenuItem("Tools/Run Multiplayer/Win64/2 Players")]
static void PerformWin64Build2()
{
PerformWin64Build(2);
}
[MenuItem("Tools/Run Multiplayer/Win64/3 Players")]
static void PerformWin64Build3()
{
PerformWin64Build(3);
}
[MenuItem("Tools/Run Multiplayer/Win64/4 Players")]
static void PerformWin64Build4()
{
PerformWin64Build(4);
}
static void PerformWin64Build(int playerCount)
{
EditorUserBuildSettings.SwitchActiveBuildTarget(
BuildTargetGroup.Standalone, BuildTarget.StandaloneWindows);
for (int i = 1; i <= playerCount; i++)
{
BuildPipeline.BuildPlayer(GetScenePaths(),
"Builds/Win64/" + GetProjectName() + i.ToString() + "/" + GetProjectName() + i.ToString() + ".exe",
BuildTarget.StandaloneWindows64, BuildOptions.AutoRunPlayer);
}
}
#endregion
#region Mac
[MenuItem("Tools/Run Multiplayer/Mac/1 Players")]
static void PerformMacBuild1()
{
PerformMacBuild(1);
}
[MenuItem("Tools/Run Multiplayer/Mac/2 Players")]
static void PerformMacBuild2()
{
PerformMacBuild(2);
}
[MenuItem("Tools/Run Multiplayer/Mac/3 Players")]
static void PerformMacBuild3()
{
PerformMacBuild(3);
}
[MenuItem("Tools/Run Multiplayer/Mac/4 Players")]
static void PerformMacBuild4()
{
PerformMacBuild(4);
}
static void PerformMacBuild(int playerCount)
{
// 유니티 빌드세팅 API를 사용
// 빌드 타겟 설정 => 윈도우, 맥, 안드로이드, IOS 중 어떤걸로 설정할 지
EditorUserBuildSettings.SwitchActiveBuildTarget(
BuildTargetGroup.Standalone,
BuildTarget.StandaloneWindows
);
// 실행할 클라이언트(플레이어) 갯수 만큼 반복문 실행
for (int i = 1; i <= playerCount; i++)
{
// 씬의 경로를 추가
// 프로젝트 이름과 플레이어 번호를 사용해서 빌드 경로와 파일 설정
BuildPipeline.BuildPlayer(GetScenePaths(),
"Builds/Win64/" + GetProjectName() + i.ToString() + "/" + GetProjectName() + i.ToString() + ".app",
BuildTarget.StandaloneOSX, BuildOptions.AutoRunPlayer
);
}
}
#endregion
static string GetProjectName()
{
string[] s = Application.dataPath.Split('/');
return s[s.Length - 2];
}
static string[] GetScenePaths()
{
string[] scenes = new string[EditorBuildSettings.scenes.Length];
for (int i = 0; i < scenes.Length; i++)
{
scenes[i] = EditorBuildSettings.scenes[i].path;
}
return scenes;
}
}
*MAC 빌드와 Win64 빌드 두 가지를 위해 구현되어 있는 코드입니다.
2 ~ 4 개의 유니티 클라이언트를 실행 할 수 있게하는 코드입니다.
해당 코드를 프로젝트에 추가하면 Tools 메뉴가 생깁니다.
최종적으로 위 이미지와 같이 빌드 후 다수의 플레이어를 실행하는 메뉴가 추가됩니다.
2 Players 메뉴를 선택해서 실행하면 위와 같이 실행됩니다.
(빨간색 케릭터는 몬스터입니다.)
위와 같은 자동화 방법을 코드로 작성하지 않으면 직접 빌드를 하고 실행해야 하는 번거로움이 있습니다.
멀티플레이 게임에서 동기화를 맞추기 위해 개발 시 반복적으로 발생하는 것을 단순화 시키는 방법입니다.
짧은 코드 몇줄이 생산성을 확 올려주는 유용한 코드였습니다.
감사합니다