游戏开发-如何传递'命令行参数'到Unity独立构建

本文关键字:Unity 独立 构建 参数 命令行 何传递 游戏 开发 | 更新日期: 2023-09-27 18:11:26

Standalone/Client/Exe/Player/Build都是指最终用户将用来运行我的游戏的可执行文件。

我使用Unity作为我的环境选择。我正在创建一个启动器来启动游戏。这听起来很多余,因为unity有一个"启动器"窗口,用于他们的独立构建,但这个目的是通过检查服务器上的最新版本来确保游戏是最新的。我使用一个简单的WPF应用程序构建了客户机。在这一点上,我试图考虑我的各种选择,以确保游戏的可执行文件从启动器启动。然而,Unity的独立构建只接受一些参数。以下是我正在考虑的:

  • 将可执行文件隐藏为两个单独的不可执行文件,它们在命令行中使用copy /b临时组合,并作为exe输出(然后在启动后删除)。exe的大小不超过17mb,所以不会花太长时间。
  • 找到一些方法来修改.exe来检查要传递的特定命令行参数(Unity的运行时不允许开发人员在构建后访问参数)。"安全问题"? ?)
  • 创建一个临时文件,存储时间戳或一些独立游戏将检查的唯一标识符,以确保它是从启动器启动的(唯一的问题是抛出一个错误,Windows会捕捉到,说'你必须从启动器启动游戏。’或类似的东西)

我真的想使用这个启动器,因为:

    这将确保玩家的游戏是更新的,所以他们不能欺骗/利用
  • 它将允许使用一个小的5-10mb启动器来安装游戏,而不是下载整个游戏
  • 很酷

如果你有任何其他建议,或者可以指导我正确的方法,请告诉我。谢谢你。

游戏开发-如何传递'命令行参数'到Unity独立构建

回答:http://answers.unity3d.com/questions/366195/parameters-at-startup.html

// Helper function for getting the command line arguments
private static string GetArg(string name)
{
    var args = System.Environment.GetCommandLineArgs();
    for (int i = 0; i < args.Length; i++)
    {
        if (args[i] == name && args.Length > i + 1)
        {
            return args[i + 1];
        }
    }
    return null;
}

你可以使用System.Environment.GetCommandLineArgs()来访问Unity构建中的命令行参数

不是确切的答案,但是我最近的项目也需要一个启动器。所以我设计了我自己的启动应用程序和游戏之间的通信系统。当我们打开启动器(一个c# Windows窗体应用程序,看起来像一个Bethesda游戏启动器)时,它开始监听一个特定的端口(例如23076 TCP)。然后当我们打开游戏时,它连接到启动器服务器,启动器将向游戏发送一些数据,例如:启动器正在运行吗?选择的分辨率,选择的质量,选择的语言,控制设置等
所以我们可以简单地在启动器中设置我们的选项,并通过TCP连接将它们发送到游戏中。


编辑:


如果您正在寻找有关此方法的更多信息,请查看LitenetLIB库。它支持Unity和Windows Forms,我用它来连接我的启动器和游戏。在进入游戏之前,我也会使用我的启动器检查许可证的有效性。