iOS の小さなスキル: uni-app と unity を使用した統合スキーム

この記事は「ゴールデンストーンプロジェクト」に参加しています

序章

プロジェクトの背景: iOS アプリに H5 と AR 機能を組み込み、unity2020 を使用して AR を開発。

技術的なポイント: 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/103759507www.jianshu.com/p/00dcac5b2…

アイデア 3: Unity3D に iOS ネイティブ コードを埋め込むwww.jianshu.com/p/82e34d9a1…

アイデア 4: Unity によってエクスポートされた Web プロジェクトがサーバーにデプロイされ、ネイティブ APP が対応する H5 アドレスをロードします。(ビデオ AR は Web エクスポートをサポートしていません)

アプレットの AR は画像認識、拡張現実 AR は空間認識で、アプレットは画面上にあり、アプリは 3D で画像をたどることができます。

より良いアイデアや関連記事がある場合は、メッセージを残して交換してください。

II ブリッジング

2.1 IOSでUnityを呼び出す方法

ここに画像の説明を挿入

ここに画像の説明を挿入

unityengine.dll が提供する C インターフェイス UnitySendMessage を使用します.最初の char* はメッセージを受信するゲームオブジェクトの名前を示し、2 番目はゲームオブジェクトのスクリプトでメッセージを受信する関数の名前を示し、3 番目はメッセージを受信する関数の名前を示します.渡されたパラメーター。

    //参数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端运行时,从架构上分为逻辑层和视图层两个部分。

  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 规范,可以实现 tree shaking, 打包出来的代码更干净)
   |
   |
Webpack2(也实现了 tree shaking, 但是配置还是太繁琐了)
   |
   |
Parcel (号称 0 配置)
   |
   |
Webpack4(通过 mode 确定 development 和 production 模式,各个模式有自己的默认配置)
   |
   |
Webpack5(持久化缓存、module federation)
   |
   |
Esbuild(采用 go 语言开发,比 Webpack 更快)
   |
   |
Vite(推崇 ESM 规范,开发模式采用 nobundle,更好的开发体验)
复制代码

コンポーネントのモジュール化がフロントエンド開発の主流となり、React や Webpack を例にとると、アプリケーションに含まれるすべての機能をコンポーネントに分割し、各コンポーネントがソース ファイルに対応し、これらのソース ファイルを Webpack によってパッケージ化します。開発プロセス中に、Webpack を介してローカル サーバーを開いて、コードの実行効果をリアルタイムで表示できます。

IV よくある質問

4.1 ARCore をサポートするデバイス

developers.google.cn/ar/devices#…

4.2 ユニアプリとネイティブアプリの混在開発

まず、ユニアプリとネイティブコード、どちらがマスターでどちらがスレーブかを必ず確認してください。

uniapp.dcloud.io/hybrid.html

  1. アプリケーションが uni-app で開発されており、ネイティブ機能を拡張する必要がある場合は、まずプラグイン マーケットにアクセスして、既製のプラグインがあるかどうかを確認し、ない場合はネイティブ プラグインを自分で開発します。
  2. アプリがネイティブに開発されていて、一部の機能列を uni-app で実装したい場合、次の 2 つの方法があります: a. uni アプレット sdk をネイティブ アプリに統合し、uni で開発されたアプレットのフロント エンドを実行します。 -app フレームワーク プロジェクト (ミニ プログラム アプリケーション リソース パッケージ wgt)。nativesupport.dcloud.net.cn/README b. ネイティブ SDK を統合したくない場合は、ユニアプリ コードを H5 として公開し、ネイティブ アプリの webview で開きます。

こちらもご覧ください

公式アカウント:iOSリバースエンジニアリング

おすすめ

転載: juejin.im/post/7208897614824325178