安卓集成Unity開發示例(一)

本項目目的是在移動端的 Native App 中以庫的形式集成已經寫好的 Unity 工程,利用 Unity 遊戲引擎便捷的開發手段進行跨平臺開發。html

Unity官方文檔 Unity as a Library integration example to iOS and Androidandroid

環境

  • Android Studio 3.5.3
  • Unity version 2019.3.7f1

新建工程操做步驟(安卓)

Step.1

  • Android Studio 新建項目:
  • Unity 新建項目:
  • 最終工程結構以下:

Step.2

  • 經過 Unity 打開 UnityProjectgit

  • 選擇 File -> Build Settings -> Switch Android Platform -> Export Projectgithub

  • 這時候選擇Export可能會提示JDK路徑配置出錯,不要緊咱們到 Preference -> Externl Tools 設置路徑
    app

  • 能夠點擊Export了,路徑選擇能夠自由選擇,這裏建議按照官方來
Step.3
  • 經過 Android Studio 打開 NativeAndroidApp函數

  • 選擇 setting.gradle 文件添加 unityLibrary module性能

    include ':unityLibrary'
    project(':unityLibrary').projectDir = new File('..\\UnityProject\\androidBuild\\unityLibrary')
  • 選擇 build.gradle(Module:app)添加 dependenciesgradle

    dependencies {
        implementation project(':unityLibrary')
        implementation fileTree(dir: project(':unityLibrary').getProjectDir().toString() + ('\\libs'), include: ['*.jar'])
        // 本身項目的配置
    }
  • 選擇 build.gradle(Module:NativeAndroidApp)ui

    allprojects {
        repositories {
            google()
            jcenter()
    
            // Add Code
            flatDir {
                dirs "${project(':unityLibrary').projectDir}/libs"
            }
            // End
        }
    }
  • 選擇 NativeAndroidApp 的 strings.xml 添加google

    <resources>
        <string name="app_name">NativeAndroidApp</string>
        <string name="action_settings">Settings</string>
        // Add Code
        <string name="game_view_content_description">Game view</string>
        // End
    </resources>

解決方案事例

限制

  • 以庫形式使用的Unity僅支持全屏渲染,不支持在屏幕的一部分進行渲染;
  • 不支持加載多個Unity運行時實例,Unity可選擇附着與當前App的進程,也能夠另啓一個進程(目前僅限於Android);
  • 開發者須要調整第三方插件,包括原生插件和託管插件,目前咱們作VR App就遇到了這種窘妝,庫支持堪憂;
  • 生命週期事件的感知(目前最新版本已經添加了部分事件);

包體(粗略計算)

  • Android 空工程包體 2.2M

  • Unity IL2CPP ARM64 & V7a 空工程包體 9.87M & 9.12M

  • Unity Into Android 空工程包體 22.9M:

性能 - 內存

  • 跑在同一進程,資源不能徹底釋放

  • 跑在不一樣進程,資源能夠徹底釋放

消息傳遞(用例後續有時間補齊)

  • 傳統數據交換 - 函數傳參 - 支持
  • 數據指針交換 - 推拉流數據 - 支持
  • 共享紋理 - 相機採集數據 - 支持
  • C++ 直接交互 - 底層庫 - 支持

建議參考

安卓 & U3D 交互

官方文檔

相關文章
相關標籤/搜索