iOS开发之Unity游戏在iOS平台运行调研(踩坑)

需求

在现有App上运行自研的Unity游戏

注:此需求可能会由于一些原因而弃掉

方案

方案一、导出WebGL运行在WKWebView上(方案不适用)

结论:
  • 不建议采用;不建议深挖
  • 移动端网页仅适用于Unity小游戏,不适用于大型Unity游戏。PC可正常运行
  • 游戏本身兼容性并不是大问题,主要还是内存原因无法在移动端网页运行
原因:
  • WebView内存分配不足以支撑。经测试手机最多可分配1G内存供Web使用,超出1G,如果手机性能高,会弹出请求分配更多内存的提示;否则直接崩溃,无法进入游戏
  • 手机性能高,勉强能够进入游戏,但持续运行,手机发烫严重,请谨慎尝试。高内存场景也无法进入
  • 手机性能低,Unity进度条加载完毕,网页直接崩溃
历程:
  1. Unity项目导出WebGL,直接让其运行在PC浏览器上,可正常运行。不过有些UI无法显示,经分析是有些插件不兼容WebGL,可通过更换插件支持。

  2. 让其运行在手机浏览器,弹出错误提示:在这里插入图片描述
    点击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 应用程序中

结论:
  • 多工程项目
  • 可运行,不过打出的包会很大,根据取舍自行考量
踩坑
  1. 保证导出的 Unity iOS工程可正常运行在手机上。
    其中遇到报错脚本不执行如下:
    /Users/xxxx/Desktop/yinghua2020Ios/MapFileParser.sh: Permission denied
    执行命令修改权限即可
    chmod a+x "/Users/xxxx/Desktop/NativeBrige/yinghua2020Ios/process_symbols.sh"
  2. 可运行,不过有几率闪退
    通过导出项目选择的渲染方式解决。
    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
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sailip

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值