LoginSignup
18
12

More than 1 year has passed since last update.

Unity as a Library のハマりポイント集

Last updated at Posted at 2022-05-20

前段

Unity as a Library (以下UaaL)は、UnityでビルドしたプロジェクトとObjectiveC/Swift/SwiftUIのプロジェクトを悪魔合体できるという変態的な素晴らしい仕組みだ。

基本的な仕組みは他のブログを参考にしていただけると良い。
https://jpdebug.com/p/2469679
https://www.tattichan.work/entry/2021/06/25/Unity_as_a_Libraryと_SwiftUI_で作るARアプリ_%28前編%29

ちなみに今回、当方で実践したのはUnity+SwiftUIであり、比較的参考文献が少ないが以下のブログが大変役に立った。
https://davidpeicho.github.io/blog/unity-integration-swiftui/
↑のリポジトリ
https://github.com/DavidPeicho/unity-swiftui-example/tree/old/unity2020

このブログでは当方でUaaLでハマったことをツラツラと書いていく。

Q. Unity側を再ビルドしたら、Swift側でビルドできなくなった

Unityで再ビルド(Replace)すると
スクリーンショット 2022-05-20 23.09.45.png
UaaLで全体ビルドがなぜか通らなくなる

A. Build System を「New Build System」に変更しなおす

UnityでiOSビルドを作ると、「Xcode Legacy Build system」で作ってしまう(Unity2021.1.6f1で確認)。これだとそもそもiOSビルドができない。

2022.5.21 追記
@mao_ さんのコメントでUnityバージョンアップによって、こちらが修正されているとの指摘をいただきました。
実際に最新版の 2021.3.3f1 で試したところ「New Build System」でビルドできました。

File → Project Settings で Build System を「New Build System」に変更すればビルドしてくれるのだが、一回リビルドしてしまうと再び「Legacy Build System」になってしまうので注意。

なお、通常の単体ビルドをすればエラーメッセージですぐに気づくのだが、UaaLでビルドしているとそれに気づかない。

Q. Unity側で起動時に「[libil2cpp] ERROR: Could not open」と出て、落ちる

こんな感じのログがコンソールに出てくる

[libil2cpp] ERROR: Could not open
/var/containers/Bundle/Application/
****/ZZZZ.app/Frameworks/UnityFramework.framework/Data/Managed/Metadata/global-metadata.dat
   IL2CPP initialization failed

A. Unity側のプロジェクトで「Data」フォルダのTarget Membershipを「UnityFramework」にチェックを入れる

Unity側をビルドすると、「Data」フォルダが↓このように「Target Project」が「Unity-iPhone」になっているが(これはUnityでアプリを作るので当たり前)
スクリーンショット 2022-05-20 22.25.49.png
  ↓
Swift側でビルドするのであれば、以下のように「UnityFramework」にしておかないとリンクされない(のでクラッシュする)
スクリーンショット 2022-05-20 22.26.00.png

Q. なぜか以下のエラーが出てリンクができなくなる

/aaaa/bbb/NativeCallProxy-Bridging-Header.h:13:10: error: 'UnityFramework/NativeCallProxy.h' file not found
#include <UnityFramework/NativeCallProxy.h>
         ^
1 error generated.
<unknown>:0: error: failed to emit precompiled header
'/Users/myUser/Library/Developer/Xcode/DerivedData/XXX-
ahqzulzcsrizsffdoonndkyblpuk/Build/Intermediates.noindex/PrecompiledHeaders/
NativeCallProxy-Bridging-Header-swift_18V7S09DN9EIS-clang_7WH5WTMDIV2M.pch' 
for bridging header 'NativeCallProxy-Bridging-Header.h'

A. Simulator用にビルドしようとしている

Unityだけで開発するときはほぼ実機でしかビルドしないだろうが、SwiftUIを使っているとついシミュレーターでもビルドしてしまうことがある。その際UaaLだとUnity側が実機ビルドにしか対応していないためビルドできない。

なお、Unityでも以下のブログのようにシミュレーター用にビルドすれば、UaaLもシミュレーター用にビルドできるかと思う。(が、今度は実機用にビルドできなくなる)
https://develop.hateblo.jp/entry/unity-ios-simulator

Q. なぜかBridging-Headerが見つからないと出てくるようになる

<unknown>:0: error: error opening input file 'XXX/YYY/NativeCallProxy-Bridging-Header.h'
 (No such file or directory)

A. Bridgingファイルはプロジェクト管理されているので、移動したり名前変更すると見つからなくなる

例えば、「Bridging-Header.h」 の場所を「ObjC/Bridging-Header.h」 とかに再配置してみる。すると上記エラーが出てビルドができなくなる。

これは「Build Settings」の「Objective-C Bridging Header」という項目にファイルパスを書き込んであるからである。
スクリーンショット 2022-05-20 23.05.13.png
つまりファイルを再配置や命名変更した場合は、忘れずにこの項目も変更しなくてはいけない。

参考ブログ

18
12
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
12