Unity ネイティブ Plugin 作り方
イリアス ハスナット
2015年4月28日
Backendと広告SDK含めて呼び出す方法
アセットは?
C#やらテクスチャ等、ゲームを構成する資産の総称
DLLは?
C#を(ソース隠蔽の目的で)DLLに変換したもので、特に制限はない。C++のプラグインもDLLなので
ややこしい
プラグインは?
• Unity  プラグイン iOS 向け
• Unity プラグイン Android 向け
• iOS アプリ objectiveC, C++ 「.a ファイル」
• Android アプリ java, jni(c,c++) 「 .soファイル」
UnityとiOSやAndroidを連動させる機能
. .
Pluginでできることは?
• アプリに好きなアドサービスを導入したり
• アプリ内課金を実装したり
• アプリにSocial(FB,Twitter等)サービスを導入
したり
• アプリにバックエンドサービスを導入したり
Admobプラグインバナー
楽天DSP とSSP
FREAKOUT 動画 広告サービス
プラグインで出来ることは?
• WebViewを動かしたり、
• 日本語フォントを利用したり、
• Androidの特殊なデバイスにアクセスしたり
. 動画再生エンジン
. TVに再生機能
Androidの動作イメージ
iOSの動作イメージ
ネイティブプラグインをアプリに組み込む
iOS環境で動かすために必要なプラグインを組
み込む
Step1: プラグイン諸々(DLLやら.hやら.mm)を
「Plugins/iOS」フォルダに入れる。
Step2: 必要なフレームワーク等はビルドした後
の途中成果物を編集
ネイティブプラグインをアプリに組み込む
ネイティブプラグインをアプリに組み込む
android環境で動かすために必要な操作を行う
Step1: プラグイン(.jar)のソースコード諸々を
「Plugins/Android」フォルダに入れる。
Step2: AndroidManifest.xmlをプラグインが動く
ように書き換える
ネイティブプラグインをアプリに組み込む
1. Manifestファイルが無い場合は、適当な箇所からコピーし
てきて、Plugins/Androidに保存しています。
2. このファイルは競合し上書きされる可能性が滅法高いの
で、ビルドの前必ずバックアップ取れる用なします。
ネイティブプラグインをアプリに組み込む
• AndroidManifest.xmlのひな形は
PlaybackEngines/AndroidPlayerにある
• もしくはAndroidビルド時にTemp/StagingArea
下に生成される
プラグインにアクセスするC#のコードか
ら、プラグインにアクセス
必要に応じて、対応プラットフォーム用の途中成
果物のソースコードを書き換える時もある
Unity→プラグインの連携
Unity→プラグインの連携
プラグインを呼び出す方法は概ね2通り基本的
には後者でやるべき
Step1: Activity/UIViewControllerを改造し、勝手
に開始してもらう
Step2: UnityのC#からプラグインを呼び出す
Activityを改造して実行する方法
Step1: UnityPlayerActivityを継承したクラスをeclipseあた
りで作成する(ビルドにはclasses.jarをビルドパスに含め
る、Unityフォルダ下の
PlaybackEngines/AndroidPlayer/binにあるまたAndroidの
機能を使うなら、それもインポートする)
Step2: Step1で作成したクラスをjarにエクスポートして、
Plugins/Androidフォルダに配置
Step3: AndroidManifest.xmlのUnityPlayerProxyActivityと
書かれている箇所を、作成したクラス名に書き換える
resやassetも使える方法
resやassetsはPlugins/Androidフォルダに入れて
おくと、自動でインポート
namespaceの問題で、resを使っているプラグイン
は動かない時がある。
resでnamespaceを固定するか、プラグインのRが
使っているnamespaceをアプリのbunleIDと合わ
せると動作する
AndroidJavaClassでJavaのコードを呼び出す
Androidのプラグイン連携がC#はPluginsフォルダ
に入れておくJavaのコードはjarに変換して
Plugins/Androidへ
C#のコード
Javaのコード
iOSの場合、C#のコードはPlugins下にでも置いておく。Javaと違い、コードのままビルド
可能
Pluginsフォルダ下に置いたC#は、Plugins/iOS下に置いたObjective-CやCの関数を呼
べる
Objective-Cのコード
C#のコード
プラグイン→Unityの連携
Pluginを呼び出す
プラグイン とプラットフォーム連携
プラグインを呼び出すコードは、PlatformDependentCompilation
で管理Platform Dependent Compilationでプラットフォーム毎に
機能わけると楽(こうしないと、iphoneビルド時に
AndroidJavaClassがエラーになる)
エディター上で動作している時に仮データを入れておくと、ゲー
ムが作りやすい
プラットフォーム連携
バックエンドやAd等の描画やUIに関わる処理は
UIThreadから呼び出す
UnityのActivityはUnityPlayer.currentActivityで
取得可能
プラグインをインポトする
プラグイン配布の際、package形式を使うとフォルダ構成等を簡
単にインポート(あとファイルサイズが減る事がある出力は必要な
ファイルのみ選択してAssets>Export Package)
ただしファイルがすでにある場合は上書きするので、AndroidManifest.xml等は含め
ない方が良いかも
ありがとうございました。

Unity sdk-plugin