在我的游戏中添加“打开方式...”功能

Posted

技术标签:

【中文标题】在我的游戏中添加“打开方式...”功能【英文标题】:Adding "open with..." functionality to my game 【发布时间】:2015-06-24 12:53:44 【问题描述】:

当您右键单击文件时,您可以选择“使用...打开”任何程序/可执行文件的选项,这会启动该程序并自动在该程序中打开文件。我想每个人都知道这一点。

现在我正在统一构建一个游戏(脚本在 c# 中),我希望我完成的构建支持此功能,以便我的用户/玩家可以右键单击,比如说,保存游戏文件,选择打开方式,然后然后选择我的游戏可执行文件。然后游戏应该会启动并加载保存的游戏。

如何实现此功能?当从文件系统使用此选项时,后台会发生什么,我如何在游戏中处理它?

我不是在问如何实际加载游戏(无论如何每个游戏都不同),我只需要知道我如何“捕捉”用户使用我的 game.exe 打开文件的情况。

【问题讨论】:

操作系统所做的只是运行您的可执行文件,第一个参数是您单击的文件的路径/名称。在游戏的启动例程中,您需要查看是否有任何参数传入 (Environment.GetCommandLineArgs()) 并获取文件名并进行处理。 所以基本上我应该有一个空场景来进行准备工作,包括检查命令行参数?它只是将整个路径作为纯文本传递吗? 我不确定从 Unity 的角度来看,但这就是基础。是的,整个路径作为纯文本传递。您可以通过创建一个新的控制台应用程序(在 MonoDevelop 中,而不是 Unity 中)并执行上述函数的 Console.WriteLine 来轻松测试这一点。 我会这样做并尝试一下,谢谢 :) 继续发布这个作为答案,以便我接受! 如果没有人给你一个具体的答案,我会在今天下午发布关于如何在 Unity 中执行此操作的答案。谢谢。 【参考方案1】:

如果您想将程序添加到“打开方式”上下文菜单 (您需要做的是在您的安装程序中,添加一个注册表项,指向您的应用程序,如 here 所述 如果您没有安装程序(我认为 unity 5 可以为您构建一个),您可以在游戏中简单地通过调用

Microsoft.Win32.Registry.SetValue(key, valueName, value, Microsoft.Win32.RegistryValueKind.String);

在场景中使用脚本。或者您可以用 C# 编写一个安装程序来执行此操作。)

如果您只想处理应用程序打开的文件,则需要在 unity 播放器中获取命令行参数,例如文件路径。在第一个加载的场景中编写一个脚本,该脚本读取 System.Environment.GetCommandLineArgs() 返回的字符串数组。第一个参数是可执行文件的名称,因此您需要执行以下操作:

string filepath;
string arguments = System.Environment.GetCommandLineArgs();
if (arguments.Length >= 2)

    filepath = arguments[1];
    DoYourThing(filepath);

return;

如果您然后右键单击您的文件,使用您的应用程序打开它,操作系统会将文件路径作为第二个命令行参数传递给应用程序,并使用上面的代码,您将阅读它。

【讨论】:

以上是关于在我的游戏中添加“打开方式...”功能的主要内容,如果未能解决你的问题,请参考以下文章

VS2017将程序添加到“打开方式”列表中

如何让我的应用程序显示在 iPhone 上的“打开方式...”列表中?

如果应用程序尚未打开,则“打开方式...”问题

苹果手机怎样增加打开方式?

bat格式怎么打开啊?我下了一个游戏补丁是BAT格式,打开方式没有默认!怎么让它运行写入注册表呢?

Iphone Phonegap 链接打开方式不同,为啥?