Accueil
Explorer
Soumettre la recherche
Mettre en ligne
S’identifier
S’inscrire
Publicité
Unity ネイティブプラグインの作成について
Signaler
Tatsuhiko Yamamura
Suivre
ユニティ・テクノロジーズ・ジャパン合同会社
11 Dec 2012
•
0 j'aime
77 j'aime
×
Soyez le premier à aimer ceci
afficher plus
•
47,763 vues
vues
×
Nombre de vues
0
Sur Slideshare
0
À partir des intégrations
0
Nombre d'intégrations
0
Check these out next
脱UniRx&Croutineから始めるUniTask
Euglenaching
UniTask入門
torisoup
Unityでオンラインゲーム作った話
torisoup
Unityでパフォーマンスの良いUIを作る為のTips
Unity Technologies Japan K.K.
Unity開発で使える設計の話+Zenjectの紹介
torisoup
CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい
エピック・ゲームズ・ジャパン Epic Games Japan
UE4のためのより良いゲーム設計を理解しよう!
Masahiko Nakamura
Unity2018/2019における最適化事情
Unity Technologies Japan K.K.
1
sur
49
Top clipped slide
Unity ネイティブプラグインの作成について
11 Dec 2012
•
0 j'aime
77 j'aime
×
Soyez le premier à aimer ceci
afficher plus
•
47,763 vues
vues
×
Nombre de vues
0
Sur Slideshare
0
À partir des intégrations
0
Nombre d'intégrations
0
Télécharger maintenant
Télécharger pour lire hors ligne
Signaler
Développement personnel
Tatsuhiko Yamamura
Suivre
ユニティ・テクノロジーズ・ジャパン合同会社
Publicité
Publicité
Publicité
Recommandé
建築革命、更に更に進化!便利さ向上【Unity Reflect ver 3.0 】
Unity Technologies Japan K.K.
1.9K vues
•
47 diapositives
大規模ゲーム開発における build 高速化と安定化
DeNA
44.7K vues
•
22 diapositives
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術
Unity Technologies Japan K.K.
27.9K vues
•
112 diapositives
Photonのサービス選択の勘どころ
GMO GlobalSign Holdings K.K.
4.4K vues
•
36 diapositives
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
DeNA
22.9K vues
•
85 diapositives
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
UnityTechnologiesJapan002
58.7K vues
•
82 diapositives
Contenu connexe
Présentations pour vous
(20)
脱UniRx&Croutineから始めるUniTask
Euglenaching
•
228 vues
UniTask入門
torisoup
•
13.7K vues
Unityでオンラインゲーム作った話
torisoup
•
9.8K vues
Unityでパフォーマンスの良いUIを作る為のTips
Unity Technologies Japan K.K.
•
79.2K vues
Unity開発で使える設計の話+Zenjectの紹介
torisoup
•
121.3K vues
CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい
エピック・ゲームズ・ジャパン Epic Games Japan
•
51.4K vues
UE4のためのより良いゲーム設計を理解しよう!
Masahiko Nakamura
•
26.7K vues
Unity2018/2019における最適化事情
Unity Technologies Japan K.K.
•
9.5K vues
徹底解説!UE4を使ったモバイルゲーム開発におけるコンテンツアップデートの極意!
エピック・ゲームズ・ジャパン Epic Games Japan
•
12K vues
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
Game Tools & Middleware Forum
•
5.7K vues
猫でも分かる UE4のAnimation Blueprintの運用について
エピック・ゲームズ・ジャパン Epic Games Japan
•
57K vues
Unreal engine4を使ったVRコンテンツ製作で 120%役に立つtips集+GDC情報をご紹介
エピック・ゲームズ・ジャパン Epic Games Japan
•
14.8K vues
【GCC18】PUBGライクなゲームをUnityだけで早く確実に作る方法 〜ひとつのUnity上でダミークライアントを100個同時に動かす〜
モノビット エンジン
•
8.5K vues
Unityではじめるオープンワールド制作 エンジニア編
Unity Technologies Japan K.K.
•
12.8K vues
インタフェース完全に理解した
torisoup
•
5.7K vues
UnityのMultiplayサービスの得意な事
Unity Technologies Japan K.K.
•
4.4K vues
UE4でマルチプレイヤーゲームを作ろう
エピック・ゲームズ・ジャパン Epic Games Japan
•
28K vues
UE4におけるレベル制作事例
エピック・ゲームズ・ジャパン Epic Games Japan
•
36.5K vues
Unityネイティブプラグインマニアクス #denatechcon
DeNA
•
15.5K vues
UnrealBuildTool勉強会まとめ
Shun Sasaki
•
12.5K vues
Similaire à Unity ネイティブプラグインの作成について
(20)
Unity sdk-plugin
Elias Hasnat
•
634 vues
The evolution of c#
leverages_event
•
2.4K vues
Unityネイティブプラグイン
MakotoItoh
•
3.5K vues
みゆっき☆Think#3 「androidに触ってみるよ!」
techtalkdwango
•
575 vues
Android0422
takahiko_takahashi
•
518 vues
C#
Naohiro Yoshikawa
•
1.5K vues
C#の書き方
信之 岩永
•
9K vues
C#の書き方
信之 岩永
•
2.9K vues
NPAPIを使ったandroid標準ブラウザの拡張方法
Naruto TAKAHASHI
•
4.1K vues
.NETの自作ツール公開手段
Pierre3 小林
•
188 vues
The Twelve-Factor (A|M)pp with C#
Yuta Matsumura
•
567 vues
[2001/05/30] .NET Developers Conference 2001 May / C#の生産性とパフォーマンス
Tatsuhiko Tanaka
•
254 vues
ZendStudioのご紹介
Manabu Shinsaka
•
480 vues
Web制作で培ってきたFlashのリッチな表現力をモバイルアプリに
invogue
•
1.2K vues
Unityの夕べ in Fukuoka
Shinobu Izumi
•
3.6K vues
Windows Live SkyDrive Update .NETラボ勉強会 2012-06-23 - 公開
Tomokazu Kizawa
•
834 vues
The forefront of html5 implementation
Satoshi Tanaka
•
3.1K vues
AndroidでDIxAOP
nfc research
•
1.1K vues
デブサミ2013 【15-B-2】iOS/Android向け開発をビジュアルに!
hmimura_embarcadero
•
2.9K vues
20161125 Unity-Android連携の発表資料
WheetTweet
•
2.4K vues
Publicité
Dernier
(20)
国外学历【斯隆管理学院研究生文凭毕业证留学生首选】
534asdsa
•
2 vues
本科/硕士《新西兰奥克兰大学毕业证成绩单》
21dadasda
•
3 vues
☀️《Bournemouth毕业证仿真》
DAS54SA
•
2 vues
在哪里可以做《奥克兰大学文凭证书|毕业证》
kjds1245
•
2 vues
★可查可存档〖制作麦考瑞大学文凭证书毕业证〗
tujjj
•
2 vues
留信网认证可查【戴尔豪斯大学文凭证书毕业证购买】
12da12
•
2 vues
留学生案例《科隆大学学位毕业证书和学士文凭》
45dayh
•
2 vues
留学学分不够办理《美国阿苏萨太平洋大学假文凭毕业证》
250dsacd
•
3 vues
本科/硕士《澳洲南昆士兰大学毕业证成绩单》
nxj1dsa
•
3 vues
①【圣力嘉学院毕业证文凭学位证书|工艺完美复刻】
vgh215w
•
2 vues
国外学历【俄亥俄大学研究生文凭毕业证留学生首选】
21dsasa
•
2 vues
①【伯恩茅斯大学毕业证文凭学位证书|工艺完美复刻】
0987hgh789
•
2 vues
留信网认证可查【阳光海岸大学文凭证书毕业证购买】
khh123kj
•
2 vues
《奥本大学毕业证|学位证书校内仿真版本》
123shab123
•
2 vues
国外学历【贝勒大学研究生文凭毕业证留学生首选】
21dsasa
•
3 vues
《堪萨斯大学毕业证|学位证书校内仿真版本》
123shab123
•
2 vues
留学生案例《凯斯西储大学学位毕业证书和学士文凭》
15sdasd
•
3 vues
《怀俄明大学毕业证|学位证书校内仿真版本》
123shab123
•
2 vues
国外学历【伊利诺伊理工学院研究生文凭毕业证留学生首选】
21dsasa
•
2 vues
留学生案例《菲莎河谷大学学位毕业证书和学士文凭》
789sd12
•
2 vues
Unity ネイティブプラグインの作成について
Unity ネイティブプラグインの 作成について
Terasurware 山村 達彦 http://terasur.blog.fc2.com/ @tsubaki_t1
言葉あわせ
1
アセット。C#やらテクスチャ等、ゲームを構成する資産の総称
DLL。C#を(ソース隠蔽の目的で)DLLに変換したもので、特に制限はない。 C++のプラグインもDLLなのでややこしい
プラグイン。正しくはネイティブプラグイン。今日のお題
ネイティブプラグインとは何ぞや
2
UnityとiOSやらAndroid(あとPC)を連動させる機能
あとUnityからC/C++で作ったソースコードを使用する機能
例えば、アプリに好きなアドサービスを導入したり、 例えば、アプリ内課金を実装したり 例えば、上の2つを概ねコピペで実装したり
例えば、WebViewを動かしたり、 例えば、日本語フォントを利用したり、 例えば、Androidの特殊なデバイスにアクセスしたり.
Androidの動作イメージ
iOSの動作イメージ
ちなみに、Unity Web Playerでは動作しない。
ネイティブプラグインをアプリにインス トール
3
プラグイン諸々(DLLやら.hやら.mm) を「Plugins/iOS」フォルダに入れる。
必要なフレームワーク等は ビルドした後の途中成果物を編集 iOS環境で動かすために必要なプラグインをインストール
プラグイン(.jar)のソースコード諸々 を「Plugins/Android」フォルダに入れ
る。 AndroidManifest.xmlをプラグインが動く ように書き換える iOS環境で動かすために必要な操作を行う
AndroidManifest.xmlのひな形は PlaybackEngines/AndroidPlayerにある
もしくはAndroidビルド時に Temp/StagingArea下に生成される マニフェストファイルが無い場合は、適当な箇所からコピーしてきて、Plugins/Androidにポイ。 このファイルは競合し上書きされる可能性が滅法高いので、バックアップは忘れずに。
後はPluginsにあるプラグインにアクセスするC#のコードから、プラグインにアクセス
必要に応じて、対応プラットフォーム用の途中成果物のソースコードを書き換える時もある
PostprocessBuildPlayerで、この作業を自動化できるらしい
プラグインを作るために必要なもの
4
対応OSのライセンス。PC版の場合はProライセンス (絶対必要ではないが、無いと動作確認できない)
対応するプラットフォームのアプリを構築できる知識 対応するプラットフォームのネイティブアプリを構築できる環境 対応するプラットフォームが実行できるデバイス
Orz 折れない心
Unity→プラグインの連携
5
Activity/UIViewControllerを改造し、
勝手に開始してもらう UnityのC#からプラグインを呼び出す プラグインを呼び出す方法は概ね2通り 基本的には後者でやるべき
UnityPlayerActivityを継承したクラスを
eclipseあたりで作成する (ビルドにはclasses.jarをビルドパスに含める、 Unityフォルダ下のPlaybackEngines/AndroidPlayer/binにある またAndroidの機能を使うなら、それもインポートする) 上で作成したクラスをjarにエクスポート して、Plugins/Androidフォルダに配置 AndroidManifest.xmlの UnityPlayerProxyActivityと書かれている 箇所を、作成したクラス名に書き換える 前者のActivityを改造して実行する方法。 Activityを改造して実行するプラグインは、他のActivityを改造して実行するプラグインと競合する UnityPlayerNativeActivityのほうが早いが、古いAndroidでは動作しないらしい
resやassetsはPlugins/Androidフォルダ
に入れておくと、自動でインポート namespaceの問題で、resを使っているプラグインは動かない時がある。 resでnamespaceを固定するか(そんな方法はあるのか?)、プラグインのRが 使っているnamespaceをアプリのbunleIDと合わせると動作する resやassetも使えるが、R.classのnamespacecがbundleId依存なので注意
Unity4からまさかのEclipse出力機能が登場 UnityPlayerActivityを直接編集できるかも(ActivityとNativeActivityを継承したクラス等)
AndroidJavaClassで
Javaのコードを呼び出す C#のコード Javaのコード Androidのプラグイン連携その2。他にもJNIとかJNIHelper等があるが、これが一番楽 C#はPluginsフォルダに入れておく Javaのコードはjarに変換してPlugins/Androidへ
DllImport(“__Internal”)で、
Objective-Cのコードを呼び出す C#のコード Objective-Cのコード Pluginsフォルダ下に置いたC#は、Plugins/iOS下に置いたObjective-CやCの関 数を呼べる iOSの場合。 C#のコードはPlugins下にでも置いておく。Javaと違い、コードのままビルド可能
直接DLLを呼ぶこともできる
プラグイン→Unityの連携
6
UnityのSendMessageと同じ感じで使える Pluginsを処理の起点にできるが、 届くのに1Fかかる SendMessageは戻り値が使えない ●
SendMessageを使う
Android向け
iOS向け ● 戻り値(return)を使う
SQLite
PlayerPrefs等 ● I/Oに書き込む
プラグインを作る上での注意
7
Unityからプラグインの呼び出しは 重い処理 Androidの場合は関数をキャッシュする
1フレームに何回も呼ぶ事は避けて、 データをキャッシュしていくべきらしい Unityからプラグインを呼び出す処理は基本的に重いので、乱発は避けるべき
Unityのゲームが終了しているのに、 プラグインの処理が継続する的な事が たまにある。
困る場合は戻り値ではなく 結果をI/Oにでも入れて、 Unity側から承認プロセスを用意 プラグインは色々なところで面倒くさい
iOSビルドはARCがOFFなので、 自分で開放してやらないと大惨事 さり気なくメモリリークを起こしてる
プラグインが稀によくある String型のみMono側で開放するので 開放は不要らしい(ドキュメント談) メモリの開放も自己責任。プロファイラーでよくよく確認する。
プラグインのコードは 端末の影響をモロに受けるかもしれない (HTMLを使用したりする場合等) プラットフォームの細分化に注意(主にAndroid)
実機で動かさないと動作しない (iphoneシミュレータ等では動かない) プラグインの動作検証は毎回ビルドして実機確認
その他
8
プラグインの構造は可能な限りシンプル に 機能は最小限にして実装しとくと管理が楽
Platform Dependent Compilationで
プラットフォーム毎に機能わけると楽 (こうしないと、iphoneビルド時にAndroidJavaClassがエラーになる) エディター上で動作している時に仮デー タを入れておくと、ゲームが作りやすい プラグインを呼び出すコードは、PlatformDependentCompilationで管理
iOSはconst char*stringで渡された時、
Stringを使用する場合はUTF8に変換する iosに投げた文字をそのまま使うと文字化けするかも
Ad等の描画やUIに関わる処理は
UIThreadから呼び出す UnityのActivityは UnityPlayer.currentActivityで取得可能 Androidのルールがけっこう面倒くさいので注意
プラグイン配布の際、
package形式を使うと フォルダ構成等を簡単にインポート (あとファイルサイズが減る事がある 出力は必要なファイルのみ選択してAssets>Export Package) ただしファイルがすでにある場合は上書きするので、 AndroidManifest.xml等は含めない方が良いかも プラグインはpackage形式で保持しとくと、導入が超楽になる
デバッグログは iOSならXcodeのロガー、 AndroidならLogcatでチェック
パフォーマンスの確認は iOSならXcodeのアナライザ Androidは…まあ頑張ろう デバッグは各プラットフォームのデバッガで行う
Notes de l'éditeur
Android の例 ・アプリ内課金 ・アドネットワーク ・他社サービス(ネットワークのランキング機能) ・アプリ内蔵ブラウザ ・その他 Android に出来ること ・サンプルコードの一部はコピペで使用可能
iOS の例 ・他社のアドサービス ・アプリ内課金 ・ネットワークソリューション ・データベースを使う ・システムフォントの使用 ・アプリ内蔵ブラウザ ・サンプルコードは概ねコピペで使用可能
Publicité