mergeInto(LibraryManager.library, {
//获取产品id
getProductIdStrFromJSCode: function(){
console.log("jslib getProductIdStrFromJSCode " + window.getModelIdFromJSCode());
var id = window.getModelIdFromJSCode();
var bufferSize = lengthBytesUTF8(id) + 1;
var buffer = _malloc(bufferSize);
stringToUTF8(id, buffer, bufferSize);
return buffer;
在WebGL端报错 Scene ‘DesiginSpace’ couldn’t be loaded because it has not been added to the build settings or the asset bundle has not been loaded. To add a scene to the build settings use the menu File->Build Settings ,
其实我在buildsettings里面是添加了DesiginSpace这个场景的,后来我几次将这个场景的位置调上或者调下都没效,发现场景名和存储场景路径中的某个文件夹名字一样, 就试着将场景名字改了一下,后面加个Scene,然后就可以了,估计是unity的bug。
StackOverflow也有人遇到了这样的错
How Do I Load A Assets Bundle
他的解决办法是重新将场景从build settings里面移出然后再添加进去
这个bug算是unity的bug了,我在关于unity的bug中也记录过
Unity 引擎报错集锦
因为在webgl出来的,其他人可能在webgl也会遇到,所以这里也说一下
unity的一些静态放置的UI在浏览器可能出现异常情况,对于这种问题需要在运行的时候将这种出现异常情况的UI用代码的方式进行设置。
missing function: ZNSt2212basic_stringIcNS_11char_traitsTcEENS_9allocatorIcEEE6initEPKcj这个报错的出现的原因一般是某个第三方库缺少引用或者是双重引用,我这边的情况是我使用了TriLib插件后,导出没问题,但是导出的包运行的时候报这个错误,因为我使用的Trilib插件是阉割版的,它的WebGL的分支不存在,导致在WebGL的时候出现了这个错误。出现这种错误看不见他具体报错内容而是一堆乱码的时候,要想想最近做了什么,最后一个可行的分支版本与出错版本的最显著区别是什么地方,我这次的错误靠的是这个方法猜出来的。
下图的左边是正常版本的,右边是阉割版本的,可以看出严格版本里面没有WebGL这个分支
这次遇到的还是关于Trilib插件的问题,在使用trilib1.8.7,并且在导出WebGL包的时候报错 unity版本是2019.3.1f1
Linking globals named ‘gzgetc’: symbol multiply defined!ERROR:root:Failed to run llvm optimizations:
参考链接: Unity 2019.1 TriLib WebGL build failed
链接的陈述大概是 插件里面的库文件对gzgetc的定义和unity的打包的库文件对gzgetc的定义重复了
我没有按照链接里面的做,将trilib版本从1.8.7升级到了1.9.0,它里面的内容也变了
这次打包的时候就不报错了。
Failed running “E:/AllUnity/2019.3.1f1/Editor/Data/PlaybackEngines/WebGLSupport\BuildTools\Emscripten_Win\python\2.7.5.3_64bit\python.exe” -E “E:/AllUnity/2019.3.1f1/Editor/Data/PlaybackEngines/WebGLSupport\BuildTools\Emscripten\emcc” @“D:\UnityProjects\Company\Assets…\Temp\emcc_arguments.resp”
stdout:
stderr⚠️ unresolved symbol: FullScrnForEndClickERROR:root:‘E:/AllUnity/2019.3.1f1/Editor/Data/PlaybackEngines/WebGLSupport\BuildTools\Emscripten_FastComp_Win\binaryen\bin\asm2wasm D:\UnityProjects\Company\Temp\StagingArea\Data\linkresult_wasm\build.temp.asm.js –total-memory=33554432 –trap-mode=clamp -O3 –mem-init=D:\UnityProjects\Company\Temp\StagingArea\Data\linkresult_wasm\build.js.mem –mem-base=1024 –wasm-only –symbolmap=D:\UnityProjects\Company\Temp\StagingArea\Data\linkresult_wasm\build.js.symbols -o D:\UnityProjects\Company\Temp\StagingArea\Data\linkresult_wasm\build.wasm’ failed
UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr)
这个报错是在打包时候报的错,仔细看内容,在里面有段话 stderr⚠️ unresolved symbol: FullScrnForEndClick 这个是关键的,
在我的工程里面,这个报错的原因是在jslib文件里面没有定义 FullScrnForEndClick 这个方法,但是在c#文件里面有引用到
#if UNITY_WEBGL
[DllImport("__Internal")]
private static extern void ForEndFullScrn();
[DllImport("__Internal")]
private static extern void FullScrnForEndClick();
#endif
所以把引用的去掉就可以了 ,或者在jslib里面定义这个方法。
unity打包的时候如果设置了broti或者gzip这种压缩方式,则打包出来的程序放到服务器的时候,服务器需要设置相对应的解压方式,否则运行的时候会报错,ReferenceError:Cant find variable: UnityFramework
ERR_HTTP2_PROTOCOL_ERROR
Failed to load resource: net::ERR_HTTP2_PROTOCOL_ERROR
听说是http2的关系。淘宝客服说可以关闭掉
会出现加载很久的情况,给出的提示是:
`You can reduce startup time if you configure your web server to
add “Content-Encoding: gzip” response header when serving “Build/WebAR-WebGLTest.wasm.unityweb” file.
AudioContext was not allowed to start`
The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page.
带有音频的视频或者其他元素,在WebGL的移动端或者PC端都需要用户输入响应。PC端是通过鼠标点击,移动端是通过手指触控做到用户输入响应。
il2cpp.exe did not run properly
Exception:
C:\Program Files\Unity\Hub\Editor\2019.4.36f1c1\Editor\Data\il2cpp/build/deploy/net471/il2cpp.exe
did not run properly!
环境变量或者硬盘命名或者我的文档或者打包路径中有中文名称。
一些粒子系统在WebGL下的表现可能不尽如人意,这是Unity对WebGL的兼容测试较少的原因。在更改参数测试了几次都没有效果的情况下,最好是用其他方法代替粒子系统,参考网址 Unity particles not showing on WebGL
null function or function signature mismatch
RangeError:Maximum call stack size exceeded. null function or function signature mismatch
我在服务器疯狂从回收站还原删除 再删除再还原 在谷歌浏览器就出现这些报错。
重启阿里云服务器不行 清楚手机浏览器缓存就可以了。但是微信浏览器不能清楚缓存,因为找不到这个选项按钮入口。
exception thrown: RuntimeError: unreachable,RuntimeError: unreachable
这其实对应了开发中最最常见的报错NullReference。所以某个地方出现了这个报错之后,最好还是到程序中根据对应的流程去复现这个报错。
Failed to fetchat instantiateAsync
TypeError: Failed to fetchat instantiateAsync (blob:https://www.wenginning.love/e2d10002-ac06-49e3-912d-5blf12alcb4d:3:18419)
at createWasm (blob:https://www.wenginning.love/e2d10002-ac06-49e3-912d-5blf12alcb4d:3:19029)
at Array.unityFramework (blob:https://www.wenginning.love/e2d10002ac06-49e3-912d-5blf12alcb4d:3:304158at https://www.wenqinning.love/WebAR/Build/4.8.10.24.loader.js:l:6595
我的出现原因是WebGl程序在加载过程中出现了wifi断开导致的。是wifi自己断开的原因。
谷歌浏览器报错
Get https://www.wenqinning.love/WebAR/Build/4.19.13.56.data 404 (Not Found)
这是放在服务器程序丢失了或者找不到造成的。
KeyNotFoundException
KeyNotFoundException: The given key"开始页船3 was not present in the dictionary.
在浏览器里面清除缓存即可。
build.js failed with output
Building Library\Bee\artifacts\WebGL\build\debug_WebGL_wasm\build.js failed with output:
Traceback (most recent call last):
File "C:\Program Files\Unity\Hub\Editor\2021.3.8f1c1\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\emscripten\emcc2.py", line 3571, in <module>
sys.exit(main(sys.argv))
File "C:\Program Files\Unity\Hub\Editor\2021.3.8f1c1\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\emscripten\emcc2.py", line 3564, in main
ret = run(args)
File "C:\Program Files\Unity\Hub\Editor\2021.3.8f1c1\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\emscripten\emcc2.py", line 1082, in run
phase_post_link(options, wasm_target, wasm_target, target)
File "D:\obj\windows-release\37amd64_Release\msi_python\zip_amd64\contextlib.py", line 74, in inner
File "C:\Program Files\Unity\Hub\Editor\2021.3.8f1c1\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\emscripten\emcc2.py", line 2400, in phase_post_link
phase_emscript(options, in_wasm, wasm_target, memfile)
File "D:\obj\windows-release\37amd64_Release\msi_python\zip_amd64\contextlib.py", line 74, in inner
File "C:\Program Files\Unity\Hub\Editor\2021.3.8f1c1\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\emscripten\emcc2.py", line 2428, in phase_emscript
emscripten.run(in_wasm, wasm_target, final_js, memfile)
File "C:\Program Files\Unity\Hub\Editor\2021.3.8f1c1\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\emscripten\emscripten.py", line 830, in run
emscript(in_wasm, out_wasm, outfile_js, memfile, shared.DEBUG)
File "C:\Program Files\Unity\Hub\Editor\2021.3.8f1c1\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\emscripten\emscripten.py", line 308, in emscript
glue, forwarded_data = compile_settings()
File "C:\Program Files\Unity\Hub\Editor\2021.3.8f1c1\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\emscripten\emscripten.py", line 178, in compile_settings
cwd=path_from_root('src'), env=env)
File "C:\Program Files\Unity\Hub\Editor\2021.3.8f1c1\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\emscripten\tools\shared.py", line 216, in run_js_tool
return check_call(command, *args, **kw).stdout
File "C:\Program Files\Unity\Hub\Editor\2021.3.8f1c1\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\emscripten\tools\shared.py", line 202, in check_call
return run_process(cmd, *args, **kw)
File "C:\Program Files\Unity\Hub\Editor\2021.3.8f1c1\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\emscripten\tools\shared.py", line 97, in run_process
ret = subprocess.run(cmd, check=check, input=input, *args, **kw)
File "D:\obj\windows-release\37amd64_Release\msi_python\zip_amd64\subprocess.py", line 474, in run
File "D:\obj\windows-release\37amd64_Release\msi_python\zip_amd64\subprocess.py", line 926, in communicate
UnicodeDecodeError: 'gbk' codec can't decode byte 0x99 in position 393654: illegal multibyte sequence
UnityEngine.GUIUtility:ProcessEvent (int,intptr,bool&)
在打包的时候,jslib里面不能够有中文。注释也是不行的。否则就会报这个错。
WebGL打包的时候只有
这是因为index.html与实际加载的文件名字不一样。
在打包的时候文件夹名字与index里面的一致即可。
404 Not Found
这类似于服务器加载程序的时候找不到要加载的js文件。
Failed to load resource: the server responded with a status of 404 (Not Found)
然后是加载完成后报的这个错。
mp\_test.loader.js:1 Uncaught (in promise) RangeError: Offset is outside the bounds of the DataView
at DataView.getUint32 ()
这种报错出现的原因是Unity中index.html的修改没有完成导致的,路径修改不对
GET https://hssczl.gd-txhn.com/WebGLPackages/5.10.17.29/temp\_test/Build/temp\_test.loader.js net::ERR\_ABORTED 404 (Not Found)
需要修改成
即把路径改成到Build之前的每个//之间的都用…代替。
webgl打包报错一般是因为cs里面调用到了js的方法,但是这个jslib已经被删除了