unity 2019 点击脚本启动不了VS_记录一次坑爹的Unity项目的降级操作

a10ba4529806547d818c210d186d7926.gif  点击上方 “蓝字 ”带你去看星辰大海

 记录一下,超刺激的,unity项目版本降级操作。不知道谁开发的项目,2020年敢选2020版本的unity,虽然是正式版吧,但是网友们从来都是今年用去年版本,去年用前年版本。坑的很。

事情的起因是这样子的,我们有个CDI的项目,主要是想要做一个楼内导航的WebGL虚拟化项目。进行路标模拟的评估什么的。然而不知道谁用的最新版本的正式版unity实现的整个项目。

我们当时的项目版本是这样的:

4972e0848090770cca5c71a7f940d88f.png

准确的说上次的那个版本是2020.1.01.f1,我看了看是正式版也就没管什么,毕竟我上次学习和使用unity是大概13年的时候哈哈哈。

然后问题来了,unity的这个版本只能打包dev包,打不了生产包,😳。我觉得他们一定是在演我哈哈哈,然后我们线上就先一直用的development包。线上的版本,build的文件夹下是这样子的:

928dde7ee8d190bb8a483f83f814f47d.png

47b0e9a0242292d1f346982be8f919da.png

然后尴尬的问题来了,我们上次用2020版本的unity打的生产包是这样子的:

257f83c2c46a7c6dd0987bba81340a55.png

8bde624bb0c938c258ea2dee6f9dddf8.png

我们发现其实从加载方式上来看,index.html加载unity instance的方式其实是一样的,这个示例代码只是相当于更新了需要加载的文件的名字。我们猜测是因为unity自己的loader.js其实自己做过处理,production的包比development的包只是多了一个tar压缩,别的也没什么区别。但是问题在于就是不能用。。。

同样是扔给nginx代理开起来,development的包能用,production不行。console会抛出错误:

“Uncaught ReferenceError: unityFramework is not defined at HTMLScriptElement.script.onload (WebGL)” 

2016614f18105efd9d08761564a6b7b8.png

大概看了下网友们的评测[1],就是因为做了压缩所以出现了错误。有人说再nginx改一下配置就行。

e3e3512e01cd754e0fa169ac68463d1e.png

然而我试了下不行,后面估计是版本的问题就没管,一直在拿着develop的包用。结果今天安装了2020.1.0f1c1之后就没事了。估计是不是用的unity hub安装的,我以前是独立的unity然后绑定到unity hub上的,又或是更新了。目前打出来的生产包没什么问题,照常使用。

事实证明,目前我用的这个版本的2020是可以的,只不过需要更新下nginx的配置。因为浏览器没有将gzip的包识别为正确的格式,比如*.js.gz没有在response里面识别为 application/javascript,所以会出现这些的问题。

298e9ba50c6fd959cb0d1153f19bb17c.png

56c69715ea7098ec18373f3a9109ccb4.png

5d478f4312c616b5046787575c18e73f.png

7e0d5bb6bf4db5caebba8fdc535c2b19.png

第二个坑的点是,我降级导入项目,各种坑各种错。然后发现了一个非常机智的做法[2]:

总结下来就是先将高版本的项目导出成*.unitypackage,然后reimport到新的,低版本的asset里面去就行。

3bc633a561ceb03d69a37ca9ff52e83d.png

686d4dadb842b3ca0123500f2f7a94f3.png

38711b3c94a45dc86af433fef00cb8b7.png

dc067b9cf7e36524d19d282858963aa1.png

c9d73b9a002bc40629940c1706191a54.png

然后我又发现了一个坑,就是我导入的项目,为什么死活拿不到WebGLInput的这个包呢。我明明已经安装了webgl的module。

d656af6f72aaea4e31e41d88ed8b96bf.png

查了很多资料,有的说需要在c# assemble里面重新添加一下reference。我发现其实UnityEngine的这个包其实是在的,就是对应的一些别的包不在。后来发现其实因为我没有再build setting里面设置对应的打包platform。

默认的平台是这样的,如果我们只是新建一个3D的项目,默认打包平台是这样:

bf75cb38c5401087c1074c0e3763aecc.png

然后点到对应的WebGL的tab下,然后点击switch platform:

557671e8e231f2c3607de9826c43f31b.png

漫长的加载之后,如果unity的logo变成这个样子,就对了:

35062b740b25522d769a6f78abf72c26.png

这个时候我们发现以前标红线的WebGLInput就对了,并且我们肯也可以在assemble里面看见这些内容:

9fd81f7d99f3f9dccb4c33915b0d94ab.png

如果我们能看到UnityEngine.WebGLModule这个引用,就证明已经存在了编译成功的可能。

当然为了在打包多种平台代码的时候,去掉讨厌的红线,因为红线会导致编译错误,然后挂载的脚本就不能继续挂载到对应的player上了。所以我们还有一种骚操作,就是利用#def语句来进行动态的加载和编译,目前最后的代码是这样的:

ef7cb5e39566c146823469302be1d4e9.png

public static void _enableInteraction(bool enable) {#if !UNITY_EDITOR && UNITY_WEBGL    // WebGLInput 在刚刚进入场景时是否拦截    UnityEngine.WebGLInput.captureAllKeyboardInput = enable;#endif }

如果判断的当前的编译环境就是UNITY_EDITOR的时候,这行就不会编译,我用的外置visualstudio2019也是对应的UNITY_EDITOR的环境。如果打包模式是UNITY_WEBGL,那么代码也会加载。否则就不会加载,也就不会有编译错误,爽

e20e8455b6293b740f7dad9127ed7ec8.png

还有一点要注意的是,降级之后,我之前烘焙好的navigation mesh全都需要重新烘焙一下,要不然又会出现识别错误,我猜测如果对应的烘焙了lighting,对应的光照图是不是也要重新bake一遍才行哈哈哈。

2fc7ea86cb3f5c98556a0dfafe493fa0.png

然后最悲催的事情,是我发现2020打包出来的production包和2019打包出来的production包不一样。。尴尬的一笔哈哈哈。

这个故事告诉我们什么呢,还是用LTS的稳定版吧,别用最新版哈哈哈哈。

结尾引用:

[1] 【Bug】 Uncaught ReferenceError: unityFramework is not defined at HTMLScriptElement.script.onload (WebGL)

    { https://forum.unity.com/threads/uncaught-referenceerror-unityframework-is-not-defined-at-htmlscriptelement-script-onload-webgl.803967/ }

[2] Downgrading your Project’s Unity Version             { https://courses.cs.washington.edu/courses/cse490j/19wi/tutorials/project_version_tutorial.pdf }

7c9dc2f4535358b107ec4c4f3664ba96.gif

无需摇摆不定

快来点在看吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值