虽然这与编程只有遥远的关系,但它在这里:
自上周以来,我一直在使用 Unity (5.6.0f3 Community x64) 在 Win 10 (x64) 上玩耍 - 使用 Visual Studio (2017 Community) 作为附加编辑器,因为 Unity “需要”,并从[Unity]: Tutorials(第一个)开始。几天内一切都很顺利,但是后来,构建为PC Standalone目标时停止工作。搜索谷歌并检查论坛没有帮助找到有关此确切行为的信息:
如图所示,在“构建设置”对话框中(移至右侧),没有(“目标平台”或“架构”)组合框可用于指定构建参数。错误在左侧。
注(关于当前行为的说明):
- 第一个猜测是教程项目出了问题,因此我从头开始创建了一个新项目(一个包含一个“球体”,附加了一个“刚体”和一个基于用户输入应用力的“C#”脚本的虚拟/简单项目),但它的行为相同(这是上面图像中的项目构建输出)
- WebGL构建运行得非常好(在浏览器中加载);这是当前使用的解决方法,但它需要很长时间才能完成
- Play(显然)也可以工作(不用说事情在VStudio中是OK的,没有来自csc的抱怨),!但!在尝试(并失败)构建之后,Play就再也不能工作了(重新加载项目是唯一的修复方法)
我会尽力为您翻译中文,以下是需要翻译的内容:
一切都已经检查完毕,有两个项目(与此案件不太相关)没有显示出来(因为窗口大小不可调整),但它们已经被勾选(并且已经安装)。
背景信息:
- 第一次安装Unity时,计算机上没有VStudio 2017版本,因此它(Community Edition)作为Unity安装过程的一部分被安装(我记得助手中有至少一个与VStudio相关的组合框)
- 然后,一个VStudio补丁可用;在准备安装它时,我意识到VStudio安装在默认路径(%SYSTEMDRIVE%上),这对我来说不起作用,因为它是一个很大的产品,所以:
- 卸载它
- 直接从[VisualStudio]: Visual Studio Downloads下载并安装到另一个驱动器上(是的,我知道更改安装路径仍会在%SYSTEMDRIVE%上安装相当大的部分,例如Windows SDK)
- 由于我认为上述两个步骤将打破Unity和新VStudio之间的链接,因此我也重新安装了Unity。这一次,在Assistant中没有VStudio相关的复选框(检查是否已安装它需要安装的任何软件似乎是正常的1)。后来,我还发现了一个持久的RegValue(意味着在Unity卸载时不会被清除)(HKEY_CURRENT_USER\SOFTWARE\Unity Technologies\Installer\Select_VisualStudio)其值为0(与同一键下值为1的其他值相对)
- 之后,我多次重新安装Unity,包括在卸载/安装之间重新启动计算机(不需要),但没有结果(在启动Assistant之前启用上述RegVaue是一种试探)
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 之一)utfile 中通过去除(和混淆(amestecating))某些行来创建的。(没有进行彻底检查,可能还有其他行)。
显而易见的是(甚至不需要检查源 utfile):-r:E:/Install/x64/Unity/5.6.0f3/Editor/Data/Managed/UnityEngine.dll
,将其插入上述文件中,可以完美地工作。但我不知道如何指示 Unity 不要去除它。
其他事实(更或者不太相关):
- 已安装了其他几个 VStudio 版本(2010,2013,2015),以及更多的 VCRedist,但我严重怀疑这些都不会有任何影响,因为 VStudio 仅用于编辑(例如,在双击脚本时由 Unity 启动)
- 我的电脑也“遭受” [BT]: 您的 Windows 10 开始菜单停止工作了吗?如何修复(我每周重新启动一次;约 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时,我注意到了一些问题;如果这是“社区版”特有的问题,我可以(有点)理解,但如果不是,那么这是一个相当糟糕的错误/行为:
- 已安装Unity(完全按照上述方式)
- 运行Assistant,并且不要更改以前安装的任何内容(我上面提到的父RegKey的RegValue默认情况下确保了这一点)。 它将:
- 下载(并覆盖?)任何子包(例如UnitySetup-Linux-Support-for-Editor-5.6.0f3.exe,FacebookGamesArcade.msi等);对我来说,它是~3GB+(即使文件已经存在)
- 运行每个指定的(“已选中的”)pkg /文件
- 在安装之前删除(UnitySetup64.exe)任何现有的安装(???)
using UnityEngine;
? - Draco18s no longer trusts SE