ドキュメント

Unity Engine

Unity Engine

Android Application Entries Game Activity Modify Bridge

Make changes to the code that connects the Unity runtime to the GameActivity library.
読み終わるまでの所要時間 8 分最終更新 1ヶ月前

GameActivity ブリッジコードの変更

GameActivity は、Unity との相互作用にブリッジを使用します。ブリッジには変更を加えたり、追加機能を実装したりできます。ブリッジを構成するコードは C++ で記述され、ビルドプロセス中に GameActivity によって
libgame.so
と呼ばれる共有ライブラリにビルドされます。
Unity 自体ではブリッジコードは変更できません。最初に プロジェクトをエクスポート する必要があります。プロジェクトをエクスポートすると、ブリッジコードを構成するファイルが
<exported_project_directory>/unityLibrary/src/main/cpp/GameActivity/
に作成されます。このディレクトリのほとんどのコードファイルにはユーティリティコードが含まれています。以下の表は、最も重要なブリッジコードファイルの目的を示しています。

ファイル

説明

UGAInput.cpp
入力イベント: ここでは、GameActivity が Unity に渡す前の入力データを調整または変換できます。
UGAApplication.cpp
ライフサイクルイベント: ここでは、一時停止、再開、フォーカス、フォーカス解除などのイベントのハンドル方法を変更できます。これは、コードブリッジのコア機能です。
UGASoftKeyboard.cpp
タッチスクリーンキーボード: ここでは、オンスクリーンキーボードの実装を変更できます。デフォルトの実装では、GameTextInput を使用します。
プロジェクトのエクスポート処理中に、Unity の インクリメンタルビルドパイプライン によって、エクスポートしたプロジェクトに加えた変更が上書きされる場合があります。変更を持続させたい場合は以下を行ってください。
  1. プロジェクトをエクスポートします。
  2. Unity プロジェクトの外部に新しいディレクトリを作成します。この新しいディレクトリを変更後のブリッジコードディレクトリにします。
  3. 変更後のブリッジコードディレクトリに、変更したいコードファイルを
    <exported_project_directory>/unityLibrary/src/main/cpp/GameActivity/
    ディレクトリからコピーします。
  4. Unity で Android.IPostGenerateGradleAndroidProject を使用して、変更後のブリッジコードディレクトリにあるコードファイルをコピーして
    <exported_project_directory>/unityLibrary/src/main/cpp/GameActivity/
    ディレクトリに戻す新しい C# スクリプトを作成します。Unity がアプリケーションをビルドするとき、このコードを使ってデフォルトのブリッジコードファイルを変更後のバージョンで上書きします。
  5. 変更後のブリッジコードディレクトリ内のファイルを使用してブリッジコードを変更します。

GameActivity ブリッジコードの拡張

既存の GameActivity ブリッジファイルにソースファイルを追加して、一緒にコンパイルできます。
以下に例を示します (サンプルプロジェクトは こちら にあります)。
  1. Unity で C# スクリプトを作成し、SendMessageReceiver.cs という名前を付けます。
    using UnityEngine;public class SendMessageReceiver : MonoBehaviour{ public void SendMessageFromCpp(string message) { Debug.LogFormat(LogType.Log, LogOption.NoStacktrace, null, message); }}
  2. 新しいゲームオブジェクトを作成し、SendMessageReceiver という名前を付けます。
  3. SendMessageReceiver ゲームオブジェクトに SendMessageReceiver スクリプトをアタッチします。
  4. \<unityproject\>/ExtraSourceFiles
    ディレクトリに
    MyFile.cpp
    を作成します。
    ノート:
    .cpp
    ファイルは Assets フォルダーには配置しないでください。IL2CPP の
    libil2cpp.so
    共有ライブラリにリンクされ、コンパイルされないためです。
    以下のコードでは、
    SendMessageReceiver
    というゲームオブジェクトで
    SendMessageFromCpp
    を呼び出し、スマートフォンの画面をタッチするたびに追加のパラメーターとして
    HelloFromBridge
    を渡します。
    #include "UGAApplication.h"#include "game-activity/native_app_glue/android_native_app_glue.h"void UnityGameActivityPluginLoad(Unity::UnityApplication& application){ application.GetEvents().Register<Unity::UnityEventProcessInput>([](const Unity::UnityEventProcessInput& e) { auto inputBuffer = e.GetInputBuffer(); if (inputBuffer->motionEventsCount != 0) { for (uint64_t i = 0; i < inputBuffer->motionEventsCount; ++i) { GameActivityMotionEvent* motionEvent = &inputBuffer->motionEvents[i]; if (motionEvent->action == AKEY_EVENT_ACTION_DOWN) e.GetApplication().SendMessage("SendMessageReceiver", "SendMessageFromCpp", "HelloFromBridge"); } } });}
  5. 以下のエディタースクリプト PostProcessor.cs を Assets/Editor フォルダーに配置します。
    (これにより、インクリメンタルビルドで使用できるように、'ExtraSourceFiles/MyFile.cpp' が 'unityLibrary/src/main/cpp/GameActivity/CustomFolder/MyFile.cpp' にコピーされるようにします。)
    using System;using UnityEditor.Android;using UnityEditor;using UnityEngine;public class PostProcessor : AndroidProjectFilesModifier{ const string CustomSourceFileSrc = "ExtraSourceFiles/MyFile.cpp"; const string CustomSourceFileDst = "unityLibrary/src/main/cpp/GameActivity/CustomFolder/MyFile.cpp"; public override AndroidProjectFilesModifierContext Setup() { var ctx = new AndroidProjectFilesModifierContext(); ctx.Dependencies.DependencyFiles = new[] { CustomSourceFileSrc }; ctx.AddFileToCopy(CustomSourceFileSrc, CustomSourceFileDst); return ctx; } public override void OnModifyAndroidProjectFiles(AndroidProjectFiles projectFiles) { }}
  6. Android Player 設定ウィンドウで、Other Settings > Configuration > Application Entry Point に移動し、GameActivity を選択します。
  7. Build & Run を選択します。
  8. スマートフォンの画面をタッチして logcat を確認します。
これで、
MyFile.cpp
から送信されて
SendMessageReceiver.cs
スクリプトによって出力された
HelloFromBridge
ログを確認できるようになりました。
ノート:
  • MyFile.cpp
    の
    UnityGameActivityPluginLoad
    はリンクが弱く、GameActivity のブリッジを初期化すると呼び出されます。必要に応じて ShutdownUserCode を使用することもできます。
  • MyFile.cpp
    には
    UnityEventProcessInput
    イベントが含まれます。その他のイベントは
    UGAEvents.h
    ファイルにあります。

追加リソース