08.変化する画像を連続で描画
前の項で、Android(Java)のSurfaceTextureのテクスチャをUnityで描画できるようになりました。
ただし、画面に描画される画像が変わることはありませんでした。
本項では、変化する画像を連続で描画するように処理を変更します。
解説
変化する画像を連続で描画するために、すべきことは、以下です。
- Java側の処理として、「Surfaceでの描画」を乱数を用いた描画に変更します。
- Java側の処理として、「一定時間ごとに『Surfaceでの描画』を実行する処理」を記述します。
- Unity側の処理として、Java側の「一定時間ごとに『Surfaceでの描画』を実行する処理」を開始する関数の呼び出しを記述します。
実装
プロジェクトを開く
「07.Java側で作成したGL_TEXTURE_EXTERNAL_OESのテクスチャを、Unity側で作成したGL_TEXTURE_2Dのテクスチャに転写する方法」を実施していない場合は、実施します。
Javaクラスの編集
Javaクラスのメンバー変数部に、Surfaceに変化する画像を連続で描画するための変数を追加します。Runnable変数に関しては、run関数の定義も記述します。
Javaクラスの末尾に、以下のSurfaceでの連続描画の開始と終了の関数を追加します。
Surfaceでの描画 drawInSurface関数を、乱数を用いた描画に変更します。
Androidライブラリモジュールのビルド
Androidライブラリモジュールをビルドします。
「Gradle」ウィンドウの「SurfaceTextureRendererProject > surfacetexturerenderer
> Tasks > build > build」をダブルクリックします。
モジュールのビルドが開始します。
しばらく待ちます。
Android Studio のステータスバーに「Gradle build finished in ・・・」と出るまで待ちます。
「{Androidプロジェクトフォルダ}\{Androidライブラリモジュール名}\build\outputs\aar」フォルダに、リリースビルド、デバッグビルドの2つの「aar」ファイルが生成されます。
aarファイルの配置
Androidライブラリモジュールのファイル(aarファイル)を、Unityアプリのプロジェクトに配置します。
「{Unityプロジェクトフォルダ}\Assets\Plugins\Android」フォルダに、
「{Androidプロジェクトフォルダ}\{Androidライブラリモジュール名}\build\outputs\aar」フォルダに生成済みの「aar」ファイルのリリースビルドの方を、コピ-します。
Unityスクリプトの編集
Unityアプリのプロジェクトを開きます。
RawImageScriptクラスに以下の変更を加えます。
- 連続描画実行中かどうかを表すクラスメンバー変数を追加します。
- フレーム毎に呼び出される Update関数に、Java側の「テクスチャ更新」関数の呼び出しを追加します。
- イベント処理 OnEvent関数での、Java側の「テクスチャ更新」関数の呼び出しを削除します。
- イベント処理 OnEvent関数での、Java側の「Surfaceでの描画」関数の呼び出しを、「Surfaceでの連続描画の開始」関数と「Surfaceでの連続描画の停止」関数の呼び出しに変更します。
RawImageScriptクラスの内容を以下のようにします。
実行
Build And Run
Unityアプリのプロジェクトを開きます。
Android端末をUSB接続しておきます。
メインメニュー「File > Build And Run」を選択します。
Unityアプリのビルドが開始し、ビルドが終了すると、Android端末上でUnityアプリが実行されます。
起動直後
アプリ画面のボタンを押します。
変化する画像の連続描画が開始します。
アプリ画面のボタンを再度押します。
変化する画像の連続描画が停止します。
「Android Logcat」ウィンドウを確認すると、エラーは発生していません。
ダウンロード
関連ページ
前項目:07.Java側で作成したGL_TEXTURE_EXTERNAL_OESのテクスチャを、Unity側で作成したGL_TEXTURE_2Dのテクスチャに転写する方法