Este artículo está participando en el "Proyecto Piedra Dorada"
introducción
Antecedentes del proyecto: la aplicación iOS está integrada con funciones H5 y AR, y AR se desarrolla utilizando unity2020.
Punto técnico: el proyecto de destino exportado por la unidad Unity-iPhone.xcodeproj
está integrado con el original
Solución actual: uniapp une IOS, ios une unity, uniapp desarrolla el código nativo de iOS en forma de complemento y luego lo integra en un archivo ipa.
Ideas de implementación
Idea 1: uniapp une IOS, ios une unity y luego lo integra en un archivo ipa.
Lo que Unity publica en la plataforma iOS es un proyecto Xcode y uniapp es un paquete de recursos locales.
Idea 2: la aplicación nativa integra el proyecto Xcode exportado por Unity (el proyecto exportado debe empaquetarse como una biblioteca estática) zhuanlan.zhihu.com/p/103759507、www.jianshu.com/p/00dcac5b2…
Idea 3: Unity3D incorpora el código nativo de iOS www.jianshu.com/p/82e34d9a1…
Idea 4: El proyecto web exportado por Unity se implementa en el servidor y la aplicación nativa carga la dirección H5 correspondiente. (Video AR no admite la exportación web)
El AR del applet es reconocimiento de imágenes, y el AR de realidad aumentada es reconocimiento de espacio; el applet está en la pantalla y la aplicación puede seguir la imagen en 3D.
Si tiene mejores ideas y artículos relacionados, deje un mensaje para intercambiar.
II puente
2.1 El método de llamar a Unity en IOS
inserte la descripción de la imagen aquí
Utilice la interfaz UnitySendMessage proporcionada por unityengine.dll en C. El primer carácter* indica el nombre del GameObject que recibe el mensaje, el segundo indica el nombre de la función que recibe el mensaje en el script del GameObject y el tercero indica el parámetro pasado.
//参数1 场景中模型的名字
//参数2 脚本名称方法
//参数3 想unity传递一个char类型的数据
UnitySendMessage("iOSSendMessageToUnity", "ChangeCameraDirection", "");
复制代码
结合后unity里面的你先打开后是进入这个场景(SelectScene) 物体名SceneManager 脚本名SceneSelect 函数ChangeScene(string str) 传参数ZhenWuMiaoAR就是真武庙;或者传参数modelShow就是沙盘。
2.2 uniapp 桥接iOS
除了 uni-app 框架内置的跨端 API,各端自己的特色 API 也可通过条件编译 自由使用。因此uniapp可直接使用原生API进行发布通知,实现通信。
在这里插入图片描述
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,比如扫码。
3.2 运行原理
uni-app 在非H5端运行时,从架构上分为逻辑层和视图层两个部分。
- 逻辑层负责执行业务逻辑,也就是运行js代码。
逻辑层是运行在一个独立的jscore里的,它不依赖于本机的webview,所以一方面它没有浏览器兼容问题,可以在Android4.4上跑es6代码,另一方面,它无法运行window、document、navigator、localstorage等浏览器专用的js API。
- 视图层负责页面渲染。
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 规范,可以实现 tree shaking, 打包出来的代码更干净)
|
|
Webpack2(也实现了 tree shaking, 但是配置还是太繁琐了)
|
|
Parcel (号称 0 配置)
|
|
Webpack4(通过 mode 确定 development 和 production 模式,各个模式有自己的默认配置)
|
|
Webpack5(持久化缓存、module federation)
|
|
Esbuild(采用 go 语言开发,比 Webpack 更快)
|
|
Vite(推崇 ESM 规范,开发模式采用 nobundle,更好的开发体验)
复制代码
La modularización de componentes se ha convertido en el modo principal del desarrollo front-end. Tome React y Webpack como ejemplos: divida todas las funciones involucradas en una aplicación en componentes, cada componente corresponde a un archivo fuente y luego empaquete estos archivos fuente a través de Webpack. Durante el proceso de desarrollo, puede abrir un servidor local a través de Webpack para ver el efecto de ejecución del código en tiempo real.
IV Preguntas Frecuentes
4.1 Dispositivos compatibles con ARCore
desarrolladores.google.cn/ar/devices#…
4.2 Desarrollo mixto de uni-app y aplicación nativa
En primer lugar, asegúrese de confirmar uni-app y el código nativo, quién es el maestro y quién es el esclavo.
- Si su aplicación está desarrollada por uni-app y necesita expandir algunas capacidades nativas, primero vaya al mercado de complementos para ver si hay complementos listos para usar. De lo contrario, desarrolle complementos nativos usted mismo.
- Si su aplicación se desarrolla de forma nativa y algunas columnas funcionales desean implementarse a través de la aplicación uni, hay dos formas: a. Integrar el sdk del subprograma uni en la aplicación nativa y luego ejecutar la interfaz del subprograma desarrollado con el uni. -proyecto de marco de aplicación (paquete de recursos de aplicación de mini programa wgt). nativesupport.dcloud.net.cn/README b. Si no desea integrar el SDK nativo, publique el código uni-app como H5 y ábralo a través de la vista web en la aplicación nativa.
ver también
Cuenta oficial: ingeniería inversa de iOS