本文正在参与「金石计划」

引言

项目背景:iOS app内嵌H5和 AR功用,AR运用unity2020开发。

技能点:unity导出的方针工程Unity-iPhone.xcodeproj 与原生进行交融

现在的方案:uniapp 桥接IOS, ios 桥接unity, uniapp 选用插件的形式进行iOS原生代码开发, 然后集成为ipa文件。

I 完成思路

思路1: uniapp 桥接IOS,ios 桥接unity,然后集成为ipa文件。

Unity发布到iOS平台得到的是一个Xcode工程,uniapp 这边是个本地资源包。

思路2: 原生APP集成Unity导出的Xcode工程(需要将导出的工程封装为静态库)zhuanlan.zhihu.com/p/103759507 、www.jianshu.com/p/00dcac5b2…

思路3: Unity3D 嵌入iOS原生代码www.jianshu.com/p/82e34d9a1…

思路4: Unity导出的web工程部署到服务器,原生APP加载对应的H5地址。(视加AR不支撑导出Web)

小程序的AR是图片识别,视加AR是空间识别; 小程序是在屏幕上,app能够做到3D的跟随图片。

假如有更好的思路和相关文章,欢迎留言沟通

II 桥接

2.1 IOS中调用Unity的办法

iOS小技能:和uni-app、unity的融合方案

在这里刺进图片描绘

运用unityengine.dll提供的C接口UnitySendMessage 第1个char* 表示承受该消息的GameObject的name, 第2个表示该GameObject的脚本中承受消息的函数名, 第3个表示传递的参数。

//参数1场景中模型的名字
//参数2脚本名称办法
//参数3想unity传递一个char类型的数据
UnitySendMessage("iOSSendMessageToUnity","ChangeCameraDirection","");

结合后unity里面的你先打开后是进入这个场景(SelectScene) 物体名SceneManager 脚本名SceneSelect 函数ChangeScene(string str) 传参数ZhenWuMiaoAR便是真武庙;或许传参数modelShow便是沙盘。

iOS小技能:和uni-app、unity的融合方案

2.2 uniapp 桥接iOS

除了 uni-app 框架内置的跨端 API,各端自己的特色 API 也可经过条件编译 自在运用。因此uniapp可直接运用原生API进行发布告诉,完成通讯。

iOS小技能:和uni-app、unity的融合方案

iOS小技能:和uni-app、unity的融合方案

在这里刺进图片描绘

III uni-app运转原理

kunnan.blog.csdn.net/article/det…

3.1 js引擎

浏览器的js引擎,便是jscore或v8的基础上新增了一批浏览器专用API,比方dom;

node.js引擎,则是v8基础上弥补一些电脑专用API,比方本地io;

uni-app的App端和小程序端的js引擎,其实是在jscore上弥补了一批手机端常用的JS API,比方扫码。

iOS小技能:和uni-app、unity的融合方案

3.2 运转原理

uni-app 在非H5端运转时,从架构上分为逻辑层和视图层两个部分。

  1. 逻辑层担任执行事务逻辑,也便是运转js代码。

逻辑层是运转在一个独立的jscore里的,它不依赖于本机的webview,所以一方面它没有浏览器兼容问题,能够在Android4.4上跑es6代码,另一方面,它无法运转window、document、navigator、localstorage等浏览器专用的js API。

  1. 视图层担任页面烘托。

h5和小程序平台,以及app-vue,视图层是webview。

而app-nvue的视图层是根据weex改造的原生烘托视图。

3.3 编译器

vue2:uni-app编译器根据wepback完成

vue3:uni-app编译器根据Vite完成,编译速度更快

HBuilderX 3.3.0+ , uni-app在App/H5/小程序全平台支撑Vue 3.0开发,且全平台支撑Vite编译器。

Webpack1
|
|
Rollup出现(推崇ESM标准,能够完成treeshaking,打包出来的代码更洁净)
|
|
Webpack2(也完成了treeshaking,但是装备还是太繁琐了)
|
|
Parcel(声称0装备)
|
|
Webpack4(经过mode承认development和production形式,各个形式有自己的默认装备)
|
|
Webpack5(持久化缓存、modulefederation)
|
|
Esbuild(选用go言语开发,比Webpack更快)
|
|
Vite(推崇ESM标准,开发形式选用nobundle,更好的开发体会)

组件模块化成为前端开发的主流形式,以 React 和 Webpack 为例:将一个应用涉及到的一切的功用拆分为一个个组件,一个组件对应一个源文件,然后经过 Webpack 将这些源文件打包。在开发过程中,可经过 Webpack 敞开一个 local server,实时查看代码的运转效果。

IV 常见问题

4.1 支撑 ARCore 的设备

developers.google.cn/ar/devices#…

4.2 uni-app和原生App混合开发问题

首先务必承认uni-app和原生代码,谁是主谁是从的问题。

uniapp.dcloud.io/hybrid.html

  1. 假如你的应用是uni-app开发的,需要扩展一些原生能力,那么首先去插件商场看看有没有现成的插件,假如没有,就自己开发原生插件。
  2. 假如你的App是原生开发的,部分功用栏目想经过uni-app完成,有2种方法: a. 在原生App里集成uni小程序sdk,然后即可运转用uni-app框架开发的小程序前端项目(小程序应用资源包wgt)。nativesupport.dcloud.net.cn/README b. 假如不想集成原生sdk,那就把uni-app代码发布成H5方法,在原生App里经过webview打开。

see also

大众号:iOS逆向