●Unityプラグインは複数の方法がある
(1)UnityPlayerActivityファイルを拡張する
UnityPlayerActivity.javaを使ってUnityプラグインを作る。
準備:
UnityPlayerActivity.java/classes.jarはUnityExportしたProjectにもある。
Unity向けAndroidネイティブプラグインの作り方
build.gradleを編集して、プラグインにclasses.jarを含めないようにする。含めるとUnity側のclasses.jarと衝突する。
dependencies {
// implementation files('libs\\classes.jar')
// implementation fileTree(dir: "libs", include: ["*.jar"])
compileOnly fileTree(dir: 'libs', include: ['*.jar'])
final Activity activity = UnityPlayer.currentActivity; で、UnityPlayerActivityを継承しなくてもOK
Unityマルチスレッドレンダリングは外す
低レベルネイティブプラグインインターフェース
Unity のレンダリングは、プラットフォームと CPU の数が一定の条件を満たす場合は、マルチスレッドで行われます。マルチスレッドのレンダリングが使用されるとき、レンダリング API の命令は、MonoBehaviour スクリプトを実行するスレッドとは完全に別の 1 つのスレッド上で行われます。そのため、プラグインがいくつかのレンダリングを即座に開始することが常に可能ではありません。なぜなら、その時レンダースレッドが行っている処理に干渉する場合があるからです。
Unity2018以降(?)はマルチスレッドレンダリングがデフォルト。OpenGLES描画は GL.IssuePluginEvent(GetRenderEventFunc(), 1);経由で行う事。
参考
Androidネイティブ開発のすすめ
https://qiita.com/relzx/items/a35f7ab6dbacb48f7e26
UnityでAndroidのネイティブプラグインを使用する3つの方法
https://qiita.com/tempura/items/5e7992896c0faba08da3