以前に作ったC#ライブラリのお話の続きです。2016/3/6追記: Macに対応しました。
もくじ 1. はじめに 2. ダウンロードと使い方 3. (参考)Unityへの移植に必要だった作業 4. まとめ 5. (2016/3/6追記:)Unityへの移植に必要だった作業(Mac編)
はじめに
本記事は「.NET/C#でPepperやNaoが操縦出来るようにした話」の続編的な記事です。
以前の記事を書いた時点では、C#/.NETからPepper用のフレームワークが触れない状況を打開するためにラッパーをゴリゴリ書いて「とりあえずC#でPepperが動いたぜヒャッハー!」みたいな事を言うまでで話が終わってました。しかし先日のLT等でも触れている通りC#用のライブラリはUnityに移植できるという強みがあり、実際にUnity/Pepper連携したいという方がいらっしゃるのも確認できたため、パッケージ化して公開しました。
ダウンロードと使い方
Google DriveのzipにUnitypackage等が入ってます。ダウンロードして使ってください。
使い方はzipに同梱したreadmeに記載してますが、特に下記の3点に注意してください。
- ライブラリの実体は以前に公開したBaku.LibqiDotNetなので、Unityでも非Unityでも同じ処理が可能
- Unityでデバッグ実行するには32bitのUnityエディタが必要(ラップしてるC++のライブラリが32bit(x86)にしか対応していないため)(※2016/3/6追記:Macの場合は特に気にしないで問題ありません)
- Unity特化なサンプルは特に用意してないので、サンプルが見たい場合はBaku.LibqiDotNetのサンプルやAPI自体のリファレンスとなるNao Documentationを確認する
(参考)Unityへの移植に必要だった作業
(2016/3/6追記: この節で紹介しているのはWindows向けの移植作業に限定した話題です。Macに関しては最下部に追記しました)
上で書いたように今回はパッケージ化したライブラリを配布していますが、Unityへの移植作業は非常にシンプルなので、実は上記のzipファイルを使わずに手元で環境整備してもらうことも可能です。
- Baku.LibqiDotNetのソースを用意し、"UNITY"というコンパイルシンボルを追加定義してビルド(※後述)
- 手元の環境でUnityプロジェクトを作り、配布してるUnity Packageのと同じファイル階層を作り、動作することを確認(アンマネージドなdllファイルはGitHubのココを参考に調達)
- Unityの公式ドキュメントにパッケージをエクスポートする方法が載ってるので指示に従ってパッケージ生成
たったこれだけです。
注意として"UNITY"というシンボルを定義してビルドする理由に触れておきますが、これはBaku.LibqiDotNetのうちDllImportSettings.csでコードを切り替えるための処理になっています。
namespace Baku.LibqiDotNet { /// <summary>アンマネージドライブラリの読み込み設定です。</summary> public static class DllImportSettings { /// <summary>ライブラリが読み込む予定のアンマネージドDLLファイルの名前</summary> #if UNITY public const string DllName = @"qic"; #else public const string DllName = @"qic.dll"; #endif } }
上記のDllNameという文字列はアンマネージライブラリを読み込むDllImport属性に指定するファイル名なのですが、.NETアプリケーションではファイル名そのものを用い、Unityでは拡張子を除去したファイル名を用いるという差異があるため、上のように使い分けをしています。単に「仕様が違う」というだけの話なので深く考える必要はありません。
まとめ
ゲームエンジンであると同時にあらゆるデバイスの待ち合わせ場所みたいな扱いもされているUnityにPepper(とNao)もやって来ましたよ、という話でした。もちろん義務ではありませんが、なんか応用で面白いものが作れたらコメント等でご一報いただければ幸いです。
(2016/3/6追記:)Unityへの移植に必要だった作業(Mac編)
本節は2016/3/6にMac対応が完了したので追記しました。
はじめに本記事を公開した段階ではWindowsに限定してUnityへの移植をしました。理由はいくつかあります。
- 個人的にWindowsしか使ってない
- 主にデバイス連携が目的でUnity対応させてるのでWindows以外への移植性は基本要らない
- というかUnityはVisual Studioと連携させて使った方がいいしWindowsで良くない?
しかし実態としてPepperを触る人はMacユーザが多い1ので、実態に即してMacでも動くようにしました。Macに対応した版(ver1.2以降)ではMac用のライブラリを詰め込んだqic.bundleというフォルダがPlugins/x86_64として追加されました。このフォルダを正しく作る方法ですが、英語の技術記事で"How to link dylibs into Unity3d"というドンピシャな内容が書かれているものがあるので、基本的にはコレを読んで手順を追えばどうにかなります。コチラの記事の内容に加えて次の点に注意してください。
- バンドルを作るプロジェクトの名前を"qic"とする(出力されるbundleファイル名がqic.bundleになる)
- 32bitアーキテクチャを指定しない(Unityが新しくなって64bitでも普通に動くようになったらしい)
- プロジェクトへ投入するdylib(計11個)は記事中で紹介されているotoolコマンドで依存関係を調べると芋づる式に必要なものが分かる
なお必要なdylibファイルはAldebaranの公式からPynaoqi SDKをダウンロードした際の中身を引っこ抜いて使っています。この取得方法はライセンス的にどうなんだろう、と思う場合はAldebaranのGitHubから各種のリソースを取得してlibqi-capiをMac向けにビルドしてください。ビルド作業は結構難しいですが、Ubuntuで試されている「qi Frameworkのc++環境構築と導入」などがあるので出来なくはないと思います。
最後にグチで〆ますが、どうもUnityにMacのネイティブライブラリを持って行く作業には少しクセがあるような気がしました…。