【问题标题】:How can i run a Unity Game inside Visual Studio (2013)如何在 Visual Studio (2013) 中运行 Unity 游戏
【发布时间】:2015-06-07 07:51:21
【问题描述】:

我需要能够在 Visual Studio 表单中为我的学校项目运行 Unity 游戏。

我对VS还没有那么好,这种东西对我来说仍然很复杂,我什至不知道这是否可能。

这就是我所拥有的:

这就是我需要的结果:

这甚至可能吗?如果是这样,请如何或指出我正确的方向。

编辑: 找到了怎么做:

[DllImport("user32.dll")]
静态外部 IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
private void button1_Click(object sender, EventArgs e)
{
var clientApplication = Process.Start("C:/Users/ricardo.coelho/Desktop/Unity_VS_Test.exe");
线程.睡眠(500);
SetParent(clientApplication.MainWindowHandle, panel1.Handle);
}

【问题讨论】:

  • 附带说明,如果可能,您不应在此处使用 Thread.Sleep,因为它依赖于 PC 组件加载 Unity 的速度。首先,看看 clientApplicartion.WaitForInputIdle() 是否足够。应该是,但如果它不起作用,您应该在调用 SetParent 之前确保 .MainWindowHandle 不为空,如果它为空,您将需要循环直到它不为空;那么您可以在循环内使用 Thread.Sleep 。最好还确保 clientApplication.HasExited 为 false 以确保它在启动时没有崩溃,如果发生崩溃,请适当处理。

标签: visual-studio-2013 unity3d


【解决方案1】:

是的,您可以通过命令行参数执行此操作。

您要查找的参数是-parentHWND,即stated in the documentation。该文档还包含一个可以帮助您的示例。

从那里(在 C# 应用程序中)这是一个问题

process = new Process();
process.StartInfo.FileName = "Child.exe";
process.StartInfo.Arguments = "-parentHWND " + panel1.Handle.ToInt32() + " " + Environment.CommandLine;
process.StartInfo.UseShellExecute = true;
process.StartInfo.CreateNoWindow = true;

process.Start();
process.WaitForInputIdle();
EnumChildWindows(panel1.Handle, WindowEnum, IntPtr.Zero);

【讨论】:

  • 有趣,这种方法有什么缺点吗?
  • 我自己没有尝试过,所以我不完全确定是否所有输入都被适当地捕获并提供给 Unity 实例。那将是需要注意的事情。但如果这样可行,应该没问题。
  • -parentHWND 自 Unity 4.6 起已被弃用和删除。
  • 不是真的 afaik @user169771,除非你能告诉我一个来源。它在 4.6 中被暂时删除,但作为 5.0.1 的一部分重新添加。我最近没有检查它是否仍然存在,但文档似乎表明是这种情况。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-28
  • 1970-01-01
  • 2021-09-29
  • 1970-01-01
  • 1970-01-01
  • 2022-10-15
相关资源
最近更新 更多