Unityネイティブプラグインの勧め

〜UnityでiOS, AndroidのAPIを利用する方法〜

KLab株式会社 牧野龍太郎
自己紹介

● 名前:牧野龍太郎

● 勤務先:KLab福岡事業所勤務

● 職種:クライアントエンジニア

● 2015年KLab入社(在籍期間自体は10年以上)

● 主な経歴

○ 携帯サイトのサーバサイド(Java)開発、および運用

○ ゲームアプリのクライアント(iOS,Android)、サーバサイド開
発、および運用

○ 現在Unityネイティブプラグインの開発に従事

● 3人の子持ち

もくじ

● モバイルゲームに必要な機能について
● 共通ライブラリとは
● ネイティブプラグインとは
● モバイルゲームに必要な機能について
● 共通ライブラリとは
● ネイティブプラグインとは

KLabでは様々なモバイルゲームを作っています





アクション
ゲーム
リズムゲーム
シミュレーション
ゲーム
etc...
RPG
モバイルゲームに必要な機能とは?

ゲームとしてまず必要になるのがゲームのコア部分の機能

パズルゲーム
・パズル要素
・ステージ
・クリア要素
・etc...
リズムゲーム
・音楽に合わせたタップパ
ターンを表示
・タップ判定
・クリア要素
・etc...
RPG
・レベルやスキルなどの
成長要素
・キャラクターや武器、魔
法などのエフェクト
・ストーリー
・etc...
などゲームによって様々ですが

モバイルゲームを作るには

コア部分以外にも必要となる機能がある

たとえば・・・



● プラットフォーム上(App Store, Google Play)の課金処理

● Push通知

● データ引き継ぎ機能

● アプリ内チャット機能

● 知人へのシェア機能

● お知らせ表示(WebView)

● etc...

それぞれのゲームでその機能を都度作るのは

面倒だし効率が悪い

ゲームのコア部分以外の共通機能を抽出して

再利用できるようにしよう

↓↓

共通ライブラリを作ろう!

KLabではアプリ開発者がゲーム開発に集中できるように

共通部分のライブラリ化を推進しています

● モバイルゲームに必要な機能について
● 共通ライブラリとは
● ネイティブプラグインとは

KLabでライブラリ化している機能

アプリ実装(クライアントのみ)
共通仕様 / ガイドライン 共通実装
Scripting Utilities
Other Libraries Unity3D mono
OS Native
Infrastructures
Device情報
Audio
HTTP通信
ログ出力
GameCenter
GPGS
Data Binding
Asset管理
Scripting
Graphics
Network
2D 3D
OS情報
Task(Thread/Process)
FileSystem etc...
MultiThread
etc...
Crash Report
etc...
AI Novel etc...
Latest .NET Polyfill
アプリ情報
ローカル通知 PFゲームサービス連携
WebView
課金
ユーザ認証
ローカライズ
友達招待
データ連係
不正対策
チャット
etc...
ストアレビュー
シェア機能
アプリ実装(クライアントのみ)
共通仕様 / ガイドライン 共通実装
Scripting Utilities
Other Libraries Unity3D mono
OS Native
Infrastructures
Device情報
Audio
HTTP通信
ログ出力
GameCenter
GPGS
Data Binding
Asset管理
Scripting
Graphics
Network
2D 3D
OS情報
Task(Thread/Process)
FileSystem etc...
MultiThread
etc...
Crash Report
etc...
AI Novel etc...
Latest .NET Polyfill
アプリ情報
ローカル通知 PFゲームサービス連携
WebView
課金
ユーザ認証
ローカライズ
友達招待
データ連係
不正対策
チャット
etc...
ストアレビュー
シェア機能
KLabではUnityでのアプリ開発が主流

Unityでは対応していないOSネイティブの機能

それに対応するためには?

OSのネイティブ機能を利用できるプラグイン

が必要

それがネイティブプラグイン

● スマホゲームに必要な機能について
● 共通ライブラリとは
● ネイティブプラグインとは

OSネイティブ機能
Unity開発での制限

Unity側で対応していない限り、通常ではiOSやAndroidで提供されているAPIを直接呼ぶ
ことはできない

アプリ側のコード(C#)
Android API
iOS API
ネイティブプラグイン
ネイティブプラグインとは

OSネイティブの各開発言語(C, C++, Objective-C, Swift, Java, Kotlin)で書かれたライブ
ラリで、Unityの開発言語であるC#から直接呼び出して利用できる

アプリ側のコード(C#)
Android
(C, C++, Java, Kotlin)
iOS
(C, C++, Objective-C,
Swift)
ネイティブプラグインを作るメリット



● ネイティブでしか提供されていない機能を使える

● 各OSの機能を共通のインターフェースで統一化できる

● iOS, Androidの最新機能のサポート

iOSやAndroidのネイティブ層からしか取得できない情報や、利用できない機能をUnityか
ら呼び出して使うことができる

● 例

○ ディスク容量やバッテリー容量取得

○ Androidのローカル通知機能

○ Android NやiOS10から提供されたリッチなPush通知の利用

○ アプリ内ストアレビュー機能

○ 他アプリへのシェア機能

ネイティブでしか提供されていない機能を使える



アプリ側 ネイティブプラグイン側
iOSとAndroidで共通的なインターフェースを提供することで、Unityからの利用を
容易にすることができる



Unityからの
呼び出し(C#)
共通IF(C#)
Androidでの
処理
iOSでの
処理
各OSの機能を共通のインターフェースで統一化できる



iOS, Androidの最新OSで追加された機能も、ネイティブプラグインで実装することで、
Unityをバージョンアップせずに利用できる

iOS, Androidの最新機能のサポート



● 例 アプリ内ストアレビュー送信APIの実装

● ゲームの機能を共通化することで、ゲーム開発者はゲームのコア機能
部分の実装に集中できる





● ネイティブプラグインを使うことで、Unity上でネイティブの機能を十分に
利用できる

まとめ


Unityネイティブプラグインの勧め 〜UnityでiOS, AndroidのAPIを利用する方法〜