Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 2013 如何在Visual Studio中运行Unity游戏(2013)_Visual Studio 2013_Unity3d - Fatal编程技术网

Visual studio 2013 如何在Visual Studio中运行Unity游戏(2013)

Visual studio 2013 如何在Visual Studio中运行Unity游戏(2013),visual-studio-2013,unity3d,Visual Studio 2013,Unity3d,我需要能够在VisualStudio表单中为我的学校项目运行Unity游戏 我对VS还不是很好,这类事情对我来说仍然很复杂,我甚至不知道这是否可能 这就是我所拥有的: 这就是我需要的结果: 这可能吗?如果是这样的话,请告诉我如何或指出正确的方向 编辑: 找到了如何做到这一点: [DllImport(“user32.dll”)] 静态外部IntPtr SetParent(IntPtr hWndChild、IntPtr hwndnnewparent) 私有无效按钮1\u单击(对象发送者,事件参数

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

我对VS还不是很好,这类事情对我来说仍然很复杂,我甚至不知道这是否可能

这就是我所拥有的:

这就是我需要的结果:

这可能吗?如果是这样的话,请告诉我如何或指出正确的方向

编辑: 找到了如何做到这一点:

[DllImport(“user32.dll”)]
静态外部IntPtr SetParent(IntPtr hWndChild、IntPtr hwndnnewparent)
私有无效按钮1\u单击(对象发送者,事件参数e)
{
var clientApplication=Process.Start(“C:/Users/ricardo.coelho/Desktop/Unity_VS_Test.exe”);
线程。睡眠(500);
SetParent(clientApplication.MainWindowHandle,panel1.Handle);

}

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

您要查找的参数是
-parentHWND
,如下所示。文档中还包含一个可以帮助您解决问题的示例

从那里(在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的一部分重新添加。我最近没有检查它是否仍然存在,但文档似乎表明情况就是这样。顺便说一句,你不应该使用线程。如果可能的话,睡在那里,因为它依赖于PC组件加载Unity的速度。首先,看看clientapplication.WaitForInputIdle()是否足够。应该是,但如果它不起作用,您应该确保.MainWindowHandle在调用SetParent之前不为null,如果为null,您将希望循环直到它不为null;然后你可以使用线程。在循环中睡眠。最好还要确保clientApplication.HasExited为false,以确保它在启动时没有崩溃,如果崩溃了,请进行适当的处理。