iOS开发之Unity游戏在iOS平台运行调研(踩坑)
需求
在现有App上运行自研的Unity游戏
注:此需求可能会由于一些原因而弃掉
方案
方案一、导出WebGL运行在WKWebView上(方案不适用)
结论:
- 不建议采用;不建议深挖
- 移动端网页仅适用于Unity小游戏,不适用于大型Unity游戏。PC可正常运行
- 游戏本身兼容性并不是大问题,主要还是内存原因无法在移动端网页运行
原因:
- WebView内存分配不足以支撑。经测试手机最多可分配1G内存供Web使用,超出1G,如果手机性能高,会弹出请求分配更多内存的提示;否则直接崩溃,无法进入游戏
- 手机性能高,勉强能够进入游戏,但持续运行,手机发烫严重,请谨慎尝试。高内存场景也无法进入
- 手机性能低,Unity进度条加载完毕,网页直接崩溃
历程:
-
Unity项目导出WebGL,直接让其运行在PC浏览器上,可正常运行。不过有些UI无法显示,经分析是有些插件不兼容WebGL,可通过更换插件支持。
-
让其运行在手机浏览器,弹出错误提示:
点击OK后,加载一会一直白屏。以为WebGL无法运行在手机端。就考虑第二套方案了(Unity与原生混合开发)。回过头来再分析此问题时,发现,此提示只是一个警告,可通过修改UnityLoader.js
文件的方法避开此提示。如下注释掉原方法实现,改成 直接回调t();
(此js文件是未格式化的,可以使用此 格式化工具)compatibilityCheck: function(e, t, r) { // UnityLoader.SystemInfo.hasWebGL ? UnityLoader.SystemInfo.mobile ? e.popup("Please note that Unity WebGL is not currently supported on mobiles. Press OK if you wish to continue anyway.", [{ // text: "OK", // callback: t // }]) : ["Edge", "Firefox", "Chrome", "Safari"].indexOf(UnityLoader.SystemInfo.browser) == -1 ? e.popup("Please note that your browser is not currently supported for this Unity WebGL content. Press OK if you wish to continue anyway.", [{ // text: "OK", // callback: t // }]) : t() : e.popup("Your browser does not support WebGL", [{ // text: "OK", // callback: r // }]) t(); },
此问题解决后,然而并没有解决无法进入游戏的问题。猜测可能是内存问题引起的,经查资料,尝试看能不能指定内存打包,结果2019版本的unityIDE不支持修改MemorySize的设定。(如图无法设置)
继续查找问题原因,通过Unity IDE查看此游戏启动所占用的内存,发现启动占用了近2G的内存。为了验证是否是内存不足导致的。尝试创建了一个新的项目,里面随意放几个组件,看是否能正常运行在手机端。发现可正常运行。问题越来越接近猜测了。再在网上找了几个小项目去尝试,也可正常运行。接下来,只要进一步验证到底是游戏项目的问题,还是内存的问题即可。
因为刚开始我使用的是iPhone 6sp 尝试的。想着找一台性能高的手机看看。如果可以运行,就肯定是内存问题。经尝试。猜测是正确的。在iPhone XS Max上可以进入游戏首页,不过点击进入游戏场景,网页就崩溃了。而且内存占用极大,手机发烫严重。赶紧杀死网页,停止尝试。
问题到此结束了,在移动端根本无法使用,此方案被Pass。从而得出了开头给出的结论。
方案二、Unity与原生混合开发
官方参考示例:将 Unity 集成到原生 iOS 应用程序中
结论:
- 多工程项目
- 可运行,不过打出的包会很大,根据取舍自行考量
踩坑
- 保证导出的 Unity iOS工程可正常运行在手机上。
其中遇到报错脚本不执行如下:/Users/xxxx/Desktop/yinghua2020Ios/MapFileParser.sh: Permission denied
执行命令修改权限即可chmod a+x "/Users/xxxx/Desktop/NativeBrige/yinghua2020Ios/process_symbols.sh"
- 可运行,不过有几率闪退
通过导出项目选择的渲染方式解决。
OpenGL2.0 或 OpenGL3.0 方式 更换成 Metal 方式
class ViewController in Interface Builder file.
CrashReporter: initialized
2020-10-14 16:42:14.464216+0800 NativeiOSApp[6896:858416] Built from '2019.4/china_unity/release' branch, Version '2019.4.9f1 (ba291d946e84)', Build type 'Release', Scripting Backend 'il2cpp'
-> applicationDidFinishLaunching()
2020-10-14 16:42:14.597049+0800 NativeiOSApp[6896:858416] Metal API Validation Enabled
-> applicationWillEnterForeground()
-> applicationDidBecomeActive()
[Subsystems] Discovering subsystems at path /var/containers/Bundle/Application/19D8DA15-9798-4373-977D-F28DDBFB24F5/NativeiOSApp.app/Frameworks/UnityFramework.framework/Data/UnitySubsystems
GfxDevice: creating device client; threaded=1
Renderer: Apple A9 GPU
Vendor: Apple Inc.
Version: OpenGL ES 2.0 Metal - 66.6
GLES: 2
GL_OES_depth_texture GL_OES_depth_texture_cube_map GL_OES_depth24 GL_OES_element_index_uint GL_OES_fbo_render_mipmap GL_OES_mapbuffer GL_OES_packed_depth_stencil GL_OES_rgb8_rgba8 GL_OES_standard_derivatives GL_OES_texture_float GL_OES_texture_half_float GL_OES_texture_half_float_linear GL_OES_vertex_array_object GL_EXT_blend_minmax GL_EXT_color_buffer_half_float GL_EXT_debug_label GL_EXT_debug_marker GL_EXT_discard_framebuffer GL_EXT_draw_instanced GL_EXT_instanced_arrays GL_EXT_map_buffer_range GL_EXT_occlusion_query_boolean GL_EXT_pvrtc_sRGB GL_EXT_read_format_bgra GL_EXT_separate_shader_objects GL_EXT_shader_framebuffer_fetch GL_EXT_shader_texture_lod GL_EXT_shadow_samplers GL_EXT_sRGB GL_EXT_texture_filter_anisotropic GL_EXT_texture_rg GL_EXT_texture_storage GL_APPLE_clip_distance GL_APPLE_color_buffer_packed_float GL_APPLE_copy_texture_levels GL_APPLE_framebuffer_multisample GL_APPLE_rgb_422 GL_APPLE_sync GL_APPLE_texture_format_BGRA8888 GL_APPLE_texture_max_level GL_APPLE_texture_packed_float GL_IMG_
read_format GL_IMG_texture_compression_pvrtc
OPENGL LOG: Creating OpenGL ES 2.0 graphics device ; Context level <OpenGL ES 2.0> ; Context handle -2126231072
OPENGL LOG: OpenGLES2 is deprecated on this platform
Initialize engine version: 2019.4.9f1 (ba291d946e84)
CrashReporter: No pending report exists at /var/mobile/Containers/Data/Application/A26F5888-B414-4B87-9645-D3A0FAABCE70/Library/Caches/CrashReports/crash-pending.plcrash
本文地址:https://blog.csdn.net/Yj_sail/article/details/109218510
上一篇: Intel游戏独显现身跑分!极具迷惑性