【发布时间】:2017-04-20 00:10:38
【问题描述】:
虽然它只是与编程远程相关,但它是这样的:
自上周以来,我一直在 Win 10 (x64) 上使用 Unity (5.6.0f3 Community x64) - 使用Visual Studio (2017 Community) 作为附加的编辑器,作为 Unity “要求” - 并以 [Unity]: Tutorials 开头(第一个) .几天来一切都很好,但随后为 PC Standalone 目标构建,停止工作。 谷歌并检查论坛,并没有帮助找到有关这种确切行为的信息:
如 Build Settings 对话框(移至右侧)所示,没有(Target Platform 或 Architecture)组合框允许指定构建参数。错误在左侧。
注意事项(关于当前行为):
- 第一个猜测是教程项目不知何故搞砸了,所以我从头开始创建了一个新项目(一个包含一个 Sphere 并附加了一个 Rigidbody 的虚拟/简单项目和一个 C# 脚本,它根据用户输入施加力),但它的行为相同(这是上图中的项目构建输出)
- WebGL 构建运行良好(在浏览器中加载);这是目前使用的解决方法,但需要很长时间才能完成
- 播放(显然)也有效(不用说 VStudio 中的一切都OK,csc 没有抱怨),!!!但是!!!在尝试(但失败)构建后,播放不再起作用(重新加载项目是修复它的唯一方法)
为了排除任何可能的疑问,这里有一个 DownloadAssistant 截图:
所有内容都已检查,有 2 个项目(与本案例不太相关)未显示(因为窗口不大),但已检查(并安装)。 p>
背景信息:
- 第一次安装 Unity 时,计算机上没有 VStudio 2017 版本,因此它(社区版)作为一部分安装Unity 的安装过程(我记得(至少)Assistant 中有一个与 VStudio 相关的组合框)
- 然后,一个 VStudio 补丁可用了;在准备安装它时,我意识到 VStudio 安装在默认路径上(在 %SYSTEMDRIVE% 上),这对我不起作用,因为它是一个大型产品, 所以:
- 已卸载
- 在不同的驱动器上重新安装(直接从[VisualStudio]: Visual Studio Downloads)(是的,我知道更改安装路径后,仍然会在 % 上安装一个相当大的部分,例如 Windows SDK SYSTEMDRIVE%)
- 由于我认为上述 2 个步骤会破坏 Unity 和新的 VStudio 之间的联系,因此我还重新安装了 Unity。这一次,在 Assistant 中没有与 VStudio 相关的复选框(检查它需要安装的任何软件是否尚未安装似乎很正常1)。后来,我还发现了一个持久的(意味着它在 Unity 卸载时没有被清除)RegValue (HKEY_CURRENT_USER\SOFTWARE\Unity Technologies\Installer\Select_VisualStudio),值为 0(相对于同一键下的一堆其他值,值为 1)李>
- 之后,我重新安装了 Unity 几次,包括在卸载/安装之间重新启动(不是必需的),但没有结果(我还长期启用 RegVaue 在开始之前Assistant)
一点调试表明,在尝试构建 (PC Standalone) 时,Unity 会执行类似的操作(不要介意路径,这就是它们的运行方式我的机器),可以从 cmdline 复制:
build_win.bat:
"E:\Install\x64\Unity\5.6.0f3\Editor\Data\MonoBleedingEdge\bin\mono.exe" "E:\Install\x64\Unity\5.6.0f3\Editor\Data\MonoBleedingEdge\lib\mono\4.5\mcs.exe" "@args-win.txt"
args_win.txt:
-debug
-target:library
-nowarn:0169
-langversion:4
-out:Temp/Assembly-CSharp.dll
-unsafe
-optimize
-r:E:/Install/x64/Unity/5.6.0f3/Editor/Data/UnityExtensions/Unity/GUISystem/Standalone/UnityEngine.UI.dll
-r:E:/Install/x64/Unity/5.6.0f3/Editor/Data/UnityExtensions/Unity/Networking/Standalone/UnityEngine.Networking.dll
-r:E:/Install/x64/Unity/5.6.0f3/Editor/Data/UnityExtensions/Unity/UnityAnalytics/UnityEngine.Analytics.dll
-define:UNITY_5_3_OR_NEWER
-define:UNITY_5_4_OR_NEWER
-define:UNITY_5_5_OR_NEWER
-define:UNITY_5_6_OR_NEWER
-define:UNITY_5_6_0
-define:UNITY_5_6
-define:UNITY_5
-define:UNITY_ANALYTICS
-define:ENABLE_AUDIO
-define:ENABLE_CACHING
-define:ENABLE_CLOTH
-define:ENABLE_DUCK_TYPING
-define:ENABLE_GENERICS
-define:ENABLE_PVR_GI
-define:ENABLE_MICROPHONE
-define:ENABLE_MULTIPLE_DISPLAYS
-define:ENABLE_PHYSICS
-define:ENABLE_RUNTIME_NAVMESH_BUILDING
-define:ENABLE_SPRITERENDERER_FLIPPING
-define:ENABLE_SPRITES
-define:ENABLE_TERRAIN
-define:ENABLE_RAKNET
-define:ENABLE_UNET
-define:ENABLE_LZMA
-define:ENABLE_UNITYEVENTS
-define:ENABLE_WEBCAM
-define:ENABLE_WWW
-define:ENABLE_CLOUD_SERVICES_COLLAB
-define:ENABLE_CLOUD_SERVICES_ADS
-define:ENABLE_CLOUD_HUB
-define:ENABLE_CLOUD_PROJECT_ID
-define:ENABLE_CLOUD_SERVICES_UNET
-define:ENABLE_CLOUD_SERVICES_BUILD
-define:ENABLE_CLOUD_LICENSE
-define:ENABLE_EDITOR_METRICS
-define:ENABLE_EDITOR_METRICS_CACHING
-define:ENABLE_NATIVE_ARRAY
-define:INCLUDE_DYNAMIC_GI
-define:INCLUDE_GI
-define:PLATFORM_SUPPORTS_MONO
-define:RENDER_SOFTWARE_CURSOR
-define:INCLUDE_PUBNUB
-define:ENABLE_PLAYMODE_TESTS_RUNNER
-define:ENABLE_SCRIPTING_NEW_CSHARP_COMPILER
-define:ENABLE_VIDEO
-define:UNITY_STANDALONE_WIN
-define:UNITY_STANDALONE
-define:ENABLE_SUBSTANCE
-define:ENABLE_RUNTIME_GI
-define:ENABLE_MOVIES
-define:ENABLE_NETWORK
-define:ENABLE_CRUNCH_TEXTURE_COMPRESSION
-define:ENABLE_UNITYWEBREQUEST
-define:ENABLE_CLOUD_SERVICES
-define:ENABLE_CLOUD_SERVICES_ANALYTICS
-define:ENABLE_CLOUD_SERVICES_PURCHASING
-define:ENABLE_CLOUD_SERVICES_CRASH_REPORTING
-define:ENABLE_EVENT_QUEUE
-define:ENABLE_CLUSTERINPUT
-define:ENABLE_VR
-define:ENABLE_WEBSOCKET_HOST
-define:ENABLE_MONO
-define:NET_2_0_SUBSET
Assets/_Scripts/x.cs
-r:E:\Install\x64\Unity\5.6.0f3\Editor\Data\Mono\lib\mono\unity\System.Runtime.Serialization.dll
-r:E:\Install\x64\Unity\5.6.0f3\Editor\Data\Mono\lib\mono\unity\System.Xml.Linq.dll
-r:E:\Install\x64\Unity\5.6.0f3\Editor\Data\Mono\lib\mono\unity\UnityScript.dll
-r:E:\Install\x64\Unity\5.6.0f3\Editor\Data\Mono\lib\mono\unity\UnityScript.Lang.dll
-r:E:\Install\x64\Unity\5.6.0f3\Editor\Data\Mono\lib\mono\unity\Boo.Lang.dll
-sdk:unity
args_win.txt 是 ${PROJECT_ROOT}\Temp\UnityTempFile-* 之一的副本(我将把这样的文件称为utfile),更准确地说是在开始构建时创建的文件。有趣的是,它是由另一个(在项目加载时创建的 10 多个相同文件之一) utfile 通过(没有进行全面检查,也许还有其他行)创建的(并改组(amestecating))一些行。
显而易见的(甚至不必检查源utfile)是:-r:E:/Install/x64/Unity/5.6.0f3/Editor/Data/Managed/UnityEngine.dll,插入到上述文件中,可以完美运行。但我不知道如何指示 Unity 不要剥离它。
其他事实(或多或少相关):
- 安装了其他几个 VStudio 版本(2010、2013、2015)等等VCRedists,但我严重怀疑这是否会有所作为,因为 VStudio 仅用于编辑(例如,在 dblclicking 时由 Unity 启动脚本)
- 我的电脑也“遭受”[BT]: Has your Windows 10 Start menu stopped working? How to fix it 的困扰(我每周重新启动一次;大约 3-4 天后问题再次出现),但在安装 Unity 之前,这种情况已经发生了数周
可能的解决方案:
- 卸载 Unity 和 VStudio,并恢复原始设置(如果仍然有效) - 不可取
- 获得答案(在此处或在 Unity 论坛上,我将立即发布相同的问题),并希望能深入了解它
- 开始痛苦的调试/监控过程([MS.Docs]: Process Monitor (ProcMon) 是一个很好的工具)也可能涉及反汇编UnityDownloadAssistant-5.6.0f3.exe,但不能保证它会产生(有利的)结果。无论如何,我认为之间有一个(暂时隐藏的)链接:
- VStudio 复选框在 Assistant 中不存在,而 VStudio 已安装
- 缺少PC Standalone 的构建参数组合框
- 在构建时剥离 UnityEngine.dll 依赖项
- 解决此问题的可能工作计划/算法是(仅理论上):
- 调试Assistant并识别查询VStudio安装状态的资源(注册表值、文件等)
- 调整该资源以使 Assistant “认为” VStudio 未安装;这将触发 VStudio 安装程序(并使 Assistant “标记”此安装适合 PC Standalone 构建),这将检测到以前的安装(当然在此之前,资源(如果相同)需要取消调整)并且会失败(这里的另一个远景是 Assistant 不检查返回码)
- 让Assistant完成,希望一切都会好起来
欢迎提出任何想法。
旁注1(与问题无关):在卸载/安装Unity时,我注意到了;如果它是 Community Edition 特定的,我可以(某种程度上)理解它,但如果不是,那么它就是一个非常la脚的错误/行为:
- 已安装 Unity(完全如上)
- 运行 Assistant 并且不要更改之前安装的任何内容(我上面提到的 RegValue 的父 RegKey,确保默认情况下)。它会:
- 下载(并覆盖 ???)任何子 pkg(例如 UnitySetup-Linux-Support-for-Editor-5.6.0f3.exe、FacebookGamesArcade .msi, ...);对我来说大约是 3GB+(即使 文件已经存在)
- 运行每个指定的(“已检查”)pkg / 文件
- 在安装之前删除 (UnitySetup64.exe) 任何现有安装 (???)
【问题讨论】:
-
你的脚本顶部有
using UnityEngine;吗? -
@Daco18s 当然。该脚本在语法上是正确的,否则它不会播放/构建,并且会在 VStudio 中显示为“红色”。
-
只是检查一下,因为这是首先想到的。很奇怪。