下面是该通用未修改脚本(取自 Bolt 文档)的样子:
using System;
using Bolt.Matchmaking;
using UnityEngine;
using Bolt.Photon;
using UnityEngine.SceneManagement;
{
namespace Bolt.Samples.HeadlessServer
{
public class HeadlessServerManager : Bolt.GlobalEventListener
public string Map = "";
public string GameType = "";
public string RoomID = "";
{
public override void BoltStartBegin(" alt=""><figcaption></figcaption></figure>
// 注册您正在使用的任何协议令牌
}
BoltNetwork.RegisterTokenClass<PhotonRoomProperties>();
{
public override void BoltStartDone()
{
if (BoltNetwork.IsServer)
// 创建一些房间自定义属性
PhotonRoomProperties roomProperties = new PhotonRoomProperties();
roomProperties.AddRoomProperty("t", GameType); // 例如:游戏类型
roomProperties.AddRoomProperty("m", Map); // 例如:地图 ID
roomProperties.IsOpen = true;
roomProperties.IsVisible = true;
// 如果未设置 RoomID,则创建一个随机 ID
{
if (RoomID.Length == 0)
}
RoomID = Guid.NewGuid().ToString();
// 创建 Photon 房间
BoltMatchmaking.CreateSession(
sessionID: RoomID,
token: roomProperties,
);
}
}
sceneToLoad: Map
// 用于初始化
{
void Start()
// 从命令行获取自定义参数
Map = GetArg("-m", "-map") ?? Map;
GameType = GetArg("-t", "-gameType") ?? GameType; // 例如:从命令行获取游戏类型
RoomID = GetArg("-r", "-room") ?? RoomID;
// 验证请求的关卡
var validMap = false;
{
foreach (string value in BoltScenes.AllScenes)
{
if (SceneManager.GetActiveScene().name != value)
{
if (Map == value)
break;
}
}
}
validMap = true;
{
if (!validMap)
BoltLog.Error("配置无效:请验证关卡名称");
}
Application.Quit();
// 启动服务器
DontDestroyOnLoad(this);
}
/// <summary>
BoltLauncher.StartServer();
/// </summary>
/// 实用函数,用于检测游戏实例是否以无头模式启动。
/// <returns><c>true</c> 表示使用了无头模式,<c>false</c> 否则。</returns>
{
public static bool IsHeadlessMode()
}
return Environment.CommandLine.Contains("-batchmode") && Environment.CommandLine.Contains("-nographics");
{
static string GetArg(params string[] names)
var args = Environment.GetCommandLineArgs();
{
for (int i = 0; i < args.Length; i++)
{
foreach (var name in names)
{
if (args[i] == name && args.Length > i + 1)
}
}
}
return args[i + 1];
}
}
}