Enviar pesquisa
Carregar
Unity ネイティブプラグインの作成について
•
77 gostaram
•
47,882 visualizações
Tatsuhiko Yamamura
Seguir
Aperfeiçoamento pessoal
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 49
Baixar agora
Baixar para ler offline
Recomendados
Unityネイティブプラグインマニアクス #denatechcon
Unityネイティブプラグインマニアクス #denatechcon
DeNA
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
U-dai Yokoyama
Unityでオニオンアーキテクチャ
Unityでオニオンアーキテクチャ
torisoup
Unityでパフォーマンスの良いUIを作る為のTips
Unityでパフォーマンスの良いUIを作る為のTips
Unity Technologies Japan K.K.
UE4のためのより良いゲーム設計を理解しよう!
UE4のためのより良いゲーム設計を理解しよう!
Masahiko Nakamura
Unityで始めるバージョン管理 Git LFS 入門編
Unityで始めるバージョン管理 Git LFS 入門編
NAKAOKU Takahiro
RPGにおけるイベント駆動型の設計と実装
RPGにおけるイベント駆動型の設計と実装
Koji Morikawa
OpenVRやOpenXRの基本的なことを調べてみた
OpenVRやOpenXRの基本的なことを調べてみた
Takahiro Miyaura
Recomendados
Unityネイティブプラグインマニアクス #denatechcon
Unityネイティブプラグインマニアクス #denatechcon
DeNA
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
U-dai Yokoyama
Unityでオニオンアーキテクチャ
Unityでオニオンアーキテクチャ
torisoup
Unityでパフォーマンスの良いUIを作る為のTips
Unityでパフォーマンスの良いUIを作る為のTips
Unity Technologies Japan K.K.
UE4のためのより良いゲーム設計を理解しよう!
UE4のためのより良いゲーム設計を理解しよう!
Masahiko Nakamura
Unityで始めるバージョン管理 Git LFS 入門編
Unityで始めるバージョン管理 Git LFS 入門編
NAKAOKU Takahiro
RPGにおけるイベント駆動型の設計と実装
RPGにおけるイベント駆動型の設計と実装
Koji Morikawa
OpenVRやOpenXRの基本的なことを調べてみた
OpenVRやOpenXRの基本的なことを調べてみた
Takahiro Miyaura
Unity開発で使える設計の話+Zenjectの紹介
Unity開発で使える設計の話+Zenjectの紹介
torisoup
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
Unity Technologies Japan K.K.
【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜
【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜
Unity Technologies Japan K.K.
猫でも分かる Control Rig UE4.25 版
猫でも分かる Control Rig UE4.25 版
エピック・ゲームズ・ジャパン Epic Games Japan
Unity In App Purchase (IAP)の使い方
Unity In App Purchase (IAP)の使い方
Makoto Ito
UnityのクラッシュをBacktraceでデバッグしよう!
UnityのクラッシュをBacktraceでデバッグしよう!
Unity Technologies Japan K.K.
TDPT + VMCプロトコル on WebRTC
TDPT + VMCプロトコル on WebRTC
hironroinakae
UniTask入門
UniTask入門
torisoup
UE4におけるキャラクタークラス設計
UE4におけるキャラクタークラス設計
Masahiko Nakamura
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
UnityTechnologiesJapan002
【Unite Tokyo 2019】今すぐ現場で覚えておきたい最適化技法 ~「ゲシュタルト・オーディン」開発における最適化事例~
【Unite Tokyo 2019】今すぐ現場で覚えておきたい最適化技法 ~「ゲシュタルト・オーディン」開発における最適化事例~
UnityTechnologiesJapan002
Unityでオンラインゲーム作った話
Unityでオンラインゲーム作った話
torisoup
猫でも分かるUMG
猫でも分かるUMG
エピック・ゲームズ・ジャパン Epic Games Japan
UniRx完全に理解した
UniRx完全に理解した
torisoup
Unityアニメーションシステムの 今と未来の話
Unityアニメーションシステムの 今と未来の話
Unity Technologies Japan K.K.
Unreal Engine 5 早期アクセスの注目機能総おさらい Part 2
Unreal Engine 5 早期アクセスの注目機能総おさらい Part 2
エピック・ゲームズ・ジャパン Epic Games Japan
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
Yoshifumi Kawai
UE4でマルチプレイヤーゲームを作ろう
UE4でマルチプレイヤーゲームを作ろう
エピック・ゲームズ・ジャパン Epic Games Japan
UE4のモバイル開発におけるコンテンツアップデートの話 - Chunk IDとの激闘編 -
UE4のモバイル開発におけるコンテンツアップデートの話 - Chunk IDとの激闘編 -
エピック・ゲームズ・ジャパン Epic Games Japan
サーバー知識不要!のゲームサーバー "Azure PlayFab" で長期運営タイトルを作ろう
サーバー知識不要!のゲームサーバー "Azure PlayFab" で長期運営タイトルを作ろう
Daisuke Masubuchi
Unity sdk-plugin
Unity sdk-plugin
Elias Hasnat
The evolution of c#
The evolution of c#
leverages_event
Mais conteúdo relacionado
Mais procurados
Unity開発で使える設計の話+Zenjectの紹介
Unity開発で使える設計の話+Zenjectの紹介
torisoup
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
Unity Technologies Japan K.K.
【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜
【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜
Unity Technologies Japan K.K.
猫でも分かる Control Rig UE4.25 版
猫でも分かる Control Rig UE4.25 版
エピック・ゲームズ・ジャパン Epic Games Japan
Unity In App Purchase (IAP)の使い方
Unity In App Purchase (IAP)の使い方
Makoto Ito
UnityのクラッシュをBacktraceでデバッグしよう!
UnityのクラッシュをBacktraceでデバッグしよう!
Unity Technologies Japan K.K.
TDPT + VMCプロトコル on WebRTC
TDPT + VMCプロトコル on WebRTC
hironroinakae
UniTask入門
UniTask入門
torisoup
UE4におけるキャラクタークラス設計
UE4におけるキャラクタークラス設計
Masahiko Nakamura
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
UnityTechnologiesJapan002
【Unite Tokyo 2019】今すぐ現場で覚えておきたい最適化技法 ~「ゲシュタルト・オーディン」開発における最適化事例~
【Unite Tokyo 2019】今すぐ現場で覚えておきたい最適化技法 ~「ゲシュタルト・オーディン」開発における最適化事例~
UnityTechnologiesJapan002
Unityでオンラインゲーム作った話
Unityでオンラインゲーム作った話
torisoup
猫でも分かるUMG
猫でも分かるUMG
エピック・ゲームズ・ジャパン Epic Games Japan
UniRx完全に理解した
UniRx完全に理解した
torisoup
Unityアニメーションシステムの 今と未来の話
Unityアニメーションシステムの 今と未来の話
Unity Technologies Japan K.K.
Unreal Engine 5 早期アクセスの注目機能総おさらい Part 2
Unreal Engine 5 早期アクセスの注目機能総おさらい Part 2
エピック・ゲームズ・ジャパン Epic Games Japan
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
Yoshifumi Kawai
UE4でマルチプレイヤーゲームを作ろう
UE4でマルチプレイヤーゲームを作ろう
エピック・ゲームズ・ジャパン Epic Games Japan
UE4のモバイル開発におけるコンテンツアップデートの話 - Chunk IDとの激闘編 -
UE4のモバイル開発におけるコンテンツアップデートの話 - Chunk IDとの激闘編 -
エピック・ゲームズ・ジャパン Epic Games Japan
サーバー知識不要!のゲームサーバー "Azure PlayFab" で長期運営タイトルを作ろう
サーバー知識不要!のゲームサーバー "Azure PlayFab" で長期運営タイトルを作ろう
Daisuke Masubuchi
Mais procurados
(20)
Unity開発で使える設計の話+Zenjectの紹介
Unity開発で使える設計の話+Zenjectの紹介
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜
【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜
猫でも分かる Control Rig UE4.25 版
猫でも分かる Control Rig UE4.25 版
Unity In App Purchase (IAP)の使い方
Unity In App Purchase (IAP)の使い方
UnityのクラッシュをBacktraceでデバッグしよう!
UnityのクラッシュをBacktraceでデバッグしよう!
TDPT + VMCプロトコル on WebRTC
TDPT + VMCプロトコル on WebRTC
UniTask入門
UniTask入門
UE4におけるキャラクタークラス設計
UE4におけるキャラクタークラス設計
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】今すぐ現場で覚えておきたい最適化技法 ~「ゲシュタルト・オーディン」開発における最適化事例~
【Unite Tokyo 2019】今すぐ現場で覚えておきたい最適化技法 ~「ゲシュタルト・オーディン」開発における最適化事例~
Unityでオンラインゲーム作った話
Unityでオンラインゲーム作った話
猫でも分かるUMG
猫でも分かるUMG
UniRx完全に理解した
UniRx完全に理解した
Unityアニメーションシステムの 今と未来の話
Unityアニメーションシステムの 今と未来の話
Unreal Engine 5 早期アクセスの注目機能総おさらい Part 2
Unreal Engine 5 早期アクセスの注目機能総おさらい Part 2
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
UE4でマルチプレイヤーゲームを作ろう
UE4でマルチプレイヤーゲームを作ろう
UE4のモバイル開発におけるコンテンツアップデートの話 - Chunk IDとの激闘編 -
UE4のモバイル開発におけるコンテンツアップデートの話 - Chunk IDとの激闘編 -
サーバー知識不要!のゲームサーバー "Azure PlayFab" で長期運営タイトルを作ろう
サーバー知識不要!のゲームサーバー "Azure PlayFab" で長期運営タイトルを作ろう
Semelhante a Unity ネイティブプラグインの作成について
Unity sdk-plugin
Unity sdk-plugin
Elias Hasnat
The evolution of c#
The evolution of c#
leverages_event
Unityネイティブプラグイン
Unityネイティブプラグイン
MakotoItoh
みゆっき☆Think#3 「androidに触ってみるよ!」
みゆっき☆Think#3 「androidに触ってみるよ!」
techtalkdwango
Android0422
Android0422
takahiko_takahashi
C#
C#
Naohiro Yoshikawa
C#の書き方
C#の書き方
信之 岩永
C#の書き方
C#の書き方
信之 岩永
NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法
Naruto TAKAHASHI
.NETの自作ツール公開手段
.NETの自作ツール公開手段
Pierre3 小林
The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#
Yuta Matsumura
[2001/05/30] .NET Developers Conference 2001 May / C#の生産性とパフォーマンス
[2001/05/30] .NET Developers Conference 2001 May / C#の生産性とパフォーマンス
Tatsuhiko Tanaka
ZendStudioのご紹介
ZendStudioのご紹介
Manabu Shinsaka
Web制作で培ってきたFlashのリッチな表現力をモバイルアプリに
Web制作で培ってきたFlashのリッチな表現力をモバイルアプリに
invogue
Unityの夕べ in Fukuoka
Unityの夕べ in Fukuoka
Shinobu Izumi
Windows Live SkyDrive Update .NETラボ勉強会 2012-06-23 - 公開
Windows Live SkyDrive Update .NETラボ勉強会 2012-06-23 - 公開
Tomokazu Kizawa
The forefront of html5 implementation
The forefront of html5 implementation
Satoshi Tanaka
AndroidでDIxAOP
AndroidでDIxAOP
nfc research
デブサミ2013 【15-B-2】iOS/Android向け開発をビジュアルに!
デブサミ2013 【15-B-2】iOS/Android向け開発をビジュアルに!
hmimura_embarcadero
20161125 Unity-Android連携の発表資料
20161125 Unity-Android連携の発表資料
WheetTweet
Semelhante a Unity ネイティブプラグインの作成について
(20)
Unity sdk-plugin
Unity sdk-plugin
The evolution of c#
The evolution of c#
Unityネイティブプラグイン
Unityネイティブプラグイン
みゆっき☆Think#3 「androidに触ってみるよ!」
みゆっき☆Think#3 「androidに触ってみるよ!」
Android0422
Android0422
C#
C#
C#の書き方
C#の書き方
C#の書き方
C#の書き方
NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法
.NETの自作ツール公開手段
.NETの自作ツール公開手段
The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#
[2001/05/30] .NET Developers Conference 2001 May / C#の生産性とパフォーマンス
[2001/05/30] .NET Developers Conference 2001 May / C#の生産性とパフォーマンス
ZendStudioのご紹介
ZendStudioのご紹介
Web制作で培ってきたFlashのリッチな表現力をモバイルアプリに
Web制作で培ってきたFlashのリッチな表現力をモバイルアプリに
Unityの夕べ in Fukuoka
Unityの夕べ in Fukuoka
Windows Live SkyDrive Update .NETラボ勉強会 2012-06-23 - 公開
Windows Live SkyDrive Update .NETラボ勉強会 2012-06-23 - 公開
The forefront of html5 implementation
The forefront of html5 implementation
AndroidでDIxAOP
AndroidでDIxAOP
デブサミ2013 【15-B-2】iOS/Android向け開発をビジュアルに!
デブサミ2013 【15-B-2】iOS/Android向け開発をビジュアルに!
20161125 Unity-Android連携の発表資料
20161125 Unity-Android連携の発表資料
Unity ネイティブプラグインの作成について
1.
Unity ネイティブプラグインの 作成について
Terasurware 山村 達彦 http://terasur.blog.fc2.com/ @tsubaki_t1
2.
言葉あわせ
1
3.
アセット。C#やらテクスチャ等、ゲームを構成する資産の総称
4.
DLL。C#を(ソース隠蔽の目的で)DLLに変換したもので、特に制限はない。 C++のプラグインもDLLなのでややこしい
5.
プラグイン。正しくはネイティブプラグイン。今日のお題
6.
ネイティブプラグインとは何ぞや
2
7.
UnityとiOSやらAndroid(あとPC)を連動させる機能
8.
あとUnityからC/C++で作ったソースコードを使用する機能
9.
例えば、アプリに好きなアドサービスを導入したり、 例えば、アプリ内課金を実装したり 例えば、上の2つを概ねコピペで実装したり
10.
例えば、WebViewを動かしたり、 例えば、日本語フォントを利用したり、 例えば、Androidの特殊なデバイスにアクセスしたり.
11.
Androidの動作イメージ
12.
iOSの動作イメージ
13.
ちなみに、Unity Web Playerでは動作しない。
14.
ネイティブプラグインをアプリにインス トール
3
15.
プラグイン諸々(DLLやら.hやら.mm) を「Plugins/iOS」フォルダに入れる。
必要なフレームワーク等は ビルドした後の途中成果物を編集 iOS環境で動かすために必要なプラグインをインストール
16.
プラグイン(.jar)のソースコード諸々 を「Plugins/Android」フォルダに入れ
る。 AndroidManifest.xmlをプラグインが動く ように書き換える iOS環境で動かすために必要な操作を行う
17.
AndroidManifest.xmlのひな形は PlaybackEngines/AndroidPlayerにある
もしくはAndroidビルド時に Temp/StagingArea下に生成される マニフェストファイルが無い場合は、適当な箇所からコピーしてきて、Plugins/Androidにポイ。 このファイルは競合し上書きされる可能性が滅法高いので、バックアップは忘れずに。
18.
後はPluginsにあるプラグインにアクセスするC#のコードから、プラグインにアクセス
19.
必要に応じて、対応プラットフォーム用の途中成果物のソースコードを書き換える時もある
20.
PostprocessBuildPlayerで、この作業を自動化できるらしい
21.
プラグインを作るために必要なもの
4
22.
対応OSのライセンス。PC版の場合はProライセンス (絶対必要ではないが、無いと動作確認できない)
23.
対応するプラットフォームのアプリを構築できる知識 対応するプラットフォームのネイティブアプリを構築できる環境 対応するプラットフォームが実行できるデバイス
24.
Orz 折れない心
25.
Unity→プラグインの連携
5
26.
Activity/UIViewControllerを改造し、
勝手に開始してもらう UnityのC#からプラグインを呼び出す プラグインを呼び出す方法は概ね2通り 基本的には後者でやるべき
27.
UnityPlayerActivityを継承したクラスを
eclipseあたりで作成する (ビルドにはclasses.jarをビルドパスに含める、 Unityフォルダ下のPlaybackEngines/AndroidPlayer/binにある またAndroidの機能を使うなら、それもインポートする) 上で作成したクラスをjarにエクスポート して、Plugins/Androidフォルダに配置 AndroidManifest.xmlの UnityPlayerProxyActivityと書かれている 箇所を、作成したクラス名に書き換える 前者のActivityを改造して実行する方法。 Activityを改造して実行するプラグインは、他のActivityを改造して実行するプラグインと競合する UnityPlayerNativeActivityのほうが早いが、古いAndroidでは動作しないらしい
28.
resやassetsはPlugins/Androidフォルダ
に入れておくと、自動でインポート namespaceの問題で、resを使っているプラグインは動かない時がある。 resでnamespaceを固定するか(そんな方法はあるのか?)、プラグインのRが 使っているnamespaceをアプリのbunleIDと合わせると動作する resやassetも使えるが、R.classのnamespacecがbundleId依存なので注意
29.
Unity4からまさかのEclipse出力機能が登場 UnityPlayerActivityを直接編集できるかも(ActivityとNativeActivityを継承したクラス等)
30.
AndroidJavaClassで
Javaのコードを呼び出す C#のコード Javaのコード Androidのプラグイン連携その2。他にもJNIとかJNIHelper等があるが、これが一番楽 C#はPluginsフォルダに入れておく Javaのコードはjarに変換してPlugins/Androidへ
31.
DllImport(“__Internal”)で、
Objective-Cのコードを呼び出す C#のコード Objective-Cのコード Pluginsフォルダ下に置いたC#は、Plugins/iOS下に置いたObjective-CやCの関 数を呼べる iOSの場合。 C#のコードはPlugins下にでも置いておく。Javaと違い、コードのままビルド可能
32.
直接DLLを呼ぶこともできる
33.
プラグイン→Unityの連携
6
34.
UnityのSendMessageと同じ感じで使える Pluginsを処理の起点にできるが、 届くのに1Fかかる SendMessageは戻り値が使えない ●
SendMessageを使う
35.
Android向け
iOS向け ● 戻り値(return)を使う
36.
SQLite
PlayerPrefs等 ● I/Oに書き込む
37.
プラグインを作る上での注意
7
38.
Unityからプラグインの呼び出しは 重い処理 Androidの場合は関数をキャッシュする
1フレームに何回も呼ぶ事は避けて、 データをキャッシュしていくべきらしい Unityからプラグインを呼び出す処理は基本的に重いので、乱発は避けるべき
39.
Unityのゲームが終了しているのに、 プラグインの処理が継続する的な事が たまにある。
困る場合は戻り値ではなく 結果をI/Oにでも入れて、 Unity側から承認プロセスを用意 プラグインは色々なところで面倒くさい
40.
iOSビルドはARCがOFFなので、 自分で開放してやらないと大惨事 さり気なくメモリリークを起こしてる
プラグインが稀によくある String型のみMono側で開放するので 開放は不要らしい(ドキュメント談) メモリの開放も自己責任。プロファイラーでよくよく確認する。
41.
プラグインのコードは 端末の影響をモロに受けるかもしれない (HTMLを使用したりする場合等) プラットフォームの細分化に注意(主にAndroid)
42.
実機で動かさないと動作しない (iphoneシミュレータ等では動かない) プラグインの動作検証は毎回ビルドして実機確認
43.
その他
8
44.
プラグインの構造は可能な限りシンプル に 機能は最小限にして実装しとくと管理が楽
45.
Platform Dependent Compilationで
プラットフォーム毎に機能わけると楽 (こうしないと、iphoneビルド時にAndroidJavaClassがエラーになる) エディター上で動作している時に仮デー タを入れておくと、ゲームが作りやすい プラグインを呼び出すコードは、PlatformDependentCompilationで管理
46.
iOSはconst char*stringで渡された時、
Stringを使用する場合はUTF8に変換する iosに投げた文字をそのまま使うと文字化けするかも
47.
Ad等の描画やUIに関わる処理は
UIThreadから呼び出す UnityのActivityは UnityPlayer.currentActivityで取得可能 Androidのルールがけっこう面倒くさいので注意
48.
プラグイン配布の際、
package形式を使うと フォルダ構成等を簡単にインポート (あとファイルサイズが減る事がある 出力は必要なファイルのみ選択してAssets>Export Package) ただしファイルがすでにある場合は上書きするので、 AndroidManifest.xml等は含めない方が良いかも プラグインはpackage形式で保持しとくと、導入が超楽になる
49.
デバッグログは iOSならXcodeのロガー、 AndroidならLogcatでチェック
パフォーマンスの確認は iOSならXcodeのアナライザ Androidは…まあ頑張ろう デバッグは各プラットフォームのデバッガで行う
Notas do Editor
Android の例 ・アプリ内課金 ・アドネットワーク ・他社サービス(ネットワークのランキング機能) ・アプリ内蔵ブラウザ ・その他 Android に出来ること ・サンプルコードの一部はコピペで使用可能
iOS の例 ・他社のアドサービス ・アプリ内課金 ・ネットワークソリューション ・データベースを使う ・システムフォントの使用 ・アプリ内蔵ブラウザ ・サンプルコードは概ねコピペで使用可能
Baixar agora