🍰

Unity As Libraryをざっくり使う(iOS)

2022/07/20に公開

概要

Unityで作った部分とObjective-C(Swift)で作ったネイティブアプリ部分を切り替える方法を最低限必要な機能の実装をざっくり共有します

最低限の機能

  • Unity側を呼び出す
  • Unity側を終了して、ネイティブへ戻る

Unityの画面の上にネイティブのボタンなどを載せる場合など相互に作用する方法は、
公式サンプル1を試してもらうと良いかと思います。
注意点としては、AppDelegateやViewCotrollerなどが1つのファイルにまとまっているため、
自分の実装に合わせて分割する必要あります。

公式サンプル1
https://github.com/Unity-Technologies/uaal-example

できたこと

  • ネイティブ側で、独自のWindowを作る必要はない。新規プロジェクトのStoryboardのまま使える
  • ネイティブ側(xcode)のワークスペース作成がいらない
  • UnityでビルドしたXcodeプロジェクトと、ネイティブ側のxcodeプロジェクトを同じフォルダに入れる必要はない

Unity側でやること

データをやり取りする場合は、ネイティブプラグインでやり取り部分のメソッド定義が必要そうだが、
Unityを表示、非表示するだけなら必要なさそう。
UnityでビルドしてXcodeプロジェクト出力し、DataフォルダをUnityFramework.frameworkに含める設定(参考文献参照)して、ビルドし、UnityFramework.frameworkを出力する。

ネイティブ側でやること

Unityで作成した”UnityFramework.framework”をXcodeプロジェクトに追加して、
Embeddedにする。
Unityの呼び出し及び、Unityおわったときの処理書く。

”公式サンプル1”を参考にし、一部抜粋して使う

処理

Unity側の処理

Unityは、呼び出されるだけなので、閉じる処理を実装するだけで基本良いと思う
Application.Unload()を呼び出すだけ。

ネイティブ側の処理

AppDelegateにUnityインスタンス初期化部分追加と
ViewController.mでunityDidUnloadメソッドを定義し、
Unity側がUnloadされたときに、UnityのViewを閉じる処理を書く
また、main.m、main.hでアプリ初期化時の設定?も保持しておく処理を書く

余分な部分あるとお思いますが、コード共有します
https://gist.github.com/ppengotsu/a9d71f63fb2842e54a4e34253368ac17
https://gist.github.com/ppengotsu/764c8c1403aa61e1eed483a854c5e3c1
https://gist.github.com/ppengotsu/5aeb9aeb3307c94e9f98d8ef553446f7
https://gist.github.com/ppengotsu/a43058a3daaae11ac8e4f72d664166de

参考文献

ありがとうございます
https://docs.unity3d.com/ja/2019.4/Manual/UnityasaLibrary-iOS.html
https://note.com/navitime_tech/n/ndf9705738de9#MJJm8

Discussion