読者です 読者をやめる 読者になる 読者になる

Unityのコミュニティ活動でMicrosoft MVPを受賞するには?

AdventCalendar Unity Microsoft MVP

これはUnity Advent Calendar 2の16日目の記事です。

昨日は、@riberunn さんの「メッセージやパラメータをYAMLファイルで定義・参照する」でした。


本日は、Microsoft MVPをUnityで受賞する方法を解説したいと思います。

==================

目次

1. Microsoft MVPとは?

1-1. 概要
1-2. 受賞対象分野
1-3. 受賞者の人数
1-4. 有効期限

2. 受賞の特典

2-1. アワードキット
2-3. カンファレンス参加
2-4. 製品開発部門のメーリングリスト、オンラインミーティングへの参加
2-5. コミュニティメンバーとのつながり

3. 応募方法

4. 応募時に気をつけるとよいこと

4-1. 簡潔、かつ客観性のある文章にする
4-2. 自己PRを工夫する
4-3. MVP受賞者に事前チェックを依頼する

5. 日本のMVP受賞者の方のブログご紹介

6. 終わりに


==================

1. Microsoft MVPとは?

1-1. 概要

f:id:Takyu:20161213095001p:plain

マイクロソフト MVP アワード プログラムとは

とあるように、ある技術分野のコミュニティの発展に貢献するような活動をしている人をMicrosoftが表彰する制度です。

有効期限は1年なので、受賞を継続するには毎年のコミュニティ活動が欠かせなくなってきます。

1-2. 受賞対象分野

下記の通り、たくさんあります。

f:id:Takyu:20161213101414p:plain

f:id:Takyu:20161213101422p:plain

ところで、Unityもそうですが、Microsoft製でない技術が多いですよね。これは2015年の10月からアワード規約が改訂されて増えたため、のようです。

(一部抜粋)

単一の技術専門分野にて表彰していた従来の MVP アワードの構造を改め、技術の垣根を超えた広範囲にわたる MVP のコミュニティ活動を表彰する運びとなりました。これにより、開発者と IT 技術者に関連した MVP の受賞分野は、従来の 36 の技術専門分野から、オープンソース技術を含めた 90 種類の活動領域から構成される 10 の受賞カテゴリーへ変更となります。

MVP Award Update - Oct 2015


とはいえ、Microsoft製以外の技術については、Microsoft製の技術や製品にも結びつく活動であることが必要と思います。

そう思った理由として、下記の関連記事を見つけました。

ascii.jp

(一部抜粋)

MVPになるのはどうしたらよいのだろうか? マイクロソフトが力を入れていきたい分野で活躍する人はもちろんのこと、MVPは各製品の事業部からの出資から成り立っているため、その時点で事業部の求める人材像がクライテリアになる可能性は高い。


上記の通り、MVP候補者の最終審査は、事業部が行うようです。

なので、UnityであればUWPやHoloLensとか、Windows Holographicで提携しているHTC VIVE関連とか、何らかの形でMicrosoftに関わってくる分野の活動の方が受賞確率は高まると思われます。


1-3. 受賞者の人数

全世界では約4000名、日本国内では約250名が受賞しています。

カテゴリ内の技術別の人数内訳は非公開ですが、数名から数十名と思われます。

2. 受賞の特典

2-1. アワードキット

このようなた「たて」が送られてきます。ガラス製で結構重いです。

f:id:Takyu:20161011162607j:plain

他にも、ピンバッジ、証明書のようなカードと賞状も同梱されています。

2-2. サブスクリプション

Office 365 E3相当のサブスクリプションを使うことができます。Office365とは、Microsoft Office製品を端末問わず使えるサービスです。

Officeと言えば最も有名なのは、Word、ExcelPowerPointですが、今のOffice365はこのように多数のアプリケーションがあります。

f:id:Takyu:20161213210623p:plain

また、5人分のライセンスが付与されており、ポータルサイトからアカウントを発行することで、自分以外の人でも使うことができます。
(ユーザライセンスの数は受賞カテゴリによって変わります)


2-3. カンファレンス参加

MVP受賞者限定のカンファレンスに参加することができます。

大きく二種類あります。


(1) MVP Global Summit

世界中のMVP受賞者が集まるカンファレンスです。MVP受賞者だけでなくMicrosoft本社の方も参加するので、とにかく色々な方と交流できます。

講演やセミナーのほか、そこでしか得られない最新の技術情報も得られます。

ただし、参加にはNDA締結が必須のため、Global Summitでどんなことがあったのか、何を知ったのか、などは言えないことになっています。

(ネット検索で「MVP Global Summit」でブログ検索しても中身が出てこないのは、そのためです)


2016年のMVP Global Summitは11月にシアトルで開催されました。10月に受賞した私も参加資格はあったのですが、諸事情でどうしても日程が合わず、残念ながら欠席させていただきました。

来年もMVPを受賞できたら参加したいと思います。


(2) MVP Open Day

MVP受賞者同士の交流を深めるためのイベントです。

私はまだ詳細わかってないのですが、国別に開催されるようです。
(こちらもNDAなので詳細は言えないのですが)

2-4. 製品開発部門のメーリングリスト、オンラインミーティングへの参加

こちらもNDA前提となりますが、受賞カテゴリに関係した製品開発を行っている部署のメーリングリストや、オンラインミーティングに参加することができます。
(オンラインミーティングについては、週1回程度の頻度で開催案内が来ます)

これらは、製品開発部門に対して直接フィードバックをかけることができるため、中々ない機会だと思います。

2-5. コミュニティメンバーとのつながり

MVP受賞者の方は、それぞれの技術分野で突出しています。

受賞者の集まりが不定期にあるので、機会を利用してそのような方たちと交流できるのはとても励みになります。

また、MVP経由のつながりで、書籍執筆とか転職の機会も増えるそうです。

これらはMVPを受賞しないとできない体験ですので、これらだけでもMVPを目指す価値があると思います。

3. 応募方法


では、どうやったらMVPを受賞できるのか、についてです。

大前提としてMVPを受賞するには、まずは応募することです。(Microsoftが突然声をかけてくれることは滅多にありません)

応募用のURLは下記です。Microsoftのアカウントでサインインする必要があります。

https://mvp.microsoft.com/ja-jp/Nomination/NominateAnMvp


ここで、氏名や連絡先の他に、自分の活動内容と自己PRを入力していきます。

基本的にはこれだけです。活動内容の種類は、

・勉強会での発表

・ブログでの技術情報執筆

・何かの技術で作った作品を展示

・書籍執筆

・メディアへの寄稿

Githubなどでソースコードを公開

・コミュニティの運営

などなど、コミュニティやユーザーと幅広く自分の技術に関する知見を共有している活動はすべて対象となります。
(活動が多い人は入力が大変かもしれません)

あとは提出すれば審査が進みます。3回の審査を経て、通ればMVPを受賞できます。


ちなみに、審査は1年で4回実施され、1月、4月、7月、10月のいずれかを開始月として受賞が決定します。

本日12/16だと1月受賞者の選考中になるので、受賞に興味ある方は、4月受賞を狙って応募することになります。

1月以降に、上記のサイトをチェックすることをお勧めします。

4. 応募時に気をつけるとよいこと

4-1. 簡潔、かつ客観性のある文章にする

最も簡単に言うと、自分の活動がいかにコミュニティに影響力あるものなのか、すごい活動なのか、を文章で伝えることが重要だと思います。

例えば、「Unity勉強会でshaderの書き方の発表をした」とします。

この活動を応募フォームに書く場合、単に「発表をした」だけでなく、

・どれくらい続いている勉強会か? (例:2012年から年間4回開催している、開催が初めてで自分は第一回目として発表した)

・参加者人数は?(例:参加者100名)

・どんな影響があったか (例:自分の発表したshaderの使い方で、最近のスマホゲームで使われる光のエフェクトを簡単に表現できるようになったので、スマホゲーム業界の人、趣味で新しくゲームを作りたい人に貢献できた)

のようなことを混ぜて書くと、Unityを知らない人でも、客観性のある数値と効果を読むことで、その勉強会で発表することのすごさが伝わります。

また、その勉強会での来場者の反応などを示すのもよいと思います。



なぜこのような提案をするか、ですが、審査をする方はあらゆる技術や勉強会に精通しているわけではないためです。

また、多数の応募フォームを見ているため、「私の活動はすごい」を客観性のある言葉で伝えて審査する方の印象に残す必要があります。


4-2. 自己PRを工夫する

審査事務局より別途、自己PRの提出が求められます。

ここは自分自身の活動を要約し、今後コミュニティにおいてどんなことをしたいか、と言う抱負を書くところです。

これは私の個人的予想ですが、審査をする場合、まずここを見て応募者がどんな人でどんな活動をしているのか、を見極めるのだと思います。


最初の見極めで評価が良くないと困るので、ここは簡潔かつわかりやすく書く必要があります。

4-3. MVP受賞者に事前チェックを依頼する

審査に通った人であれば、書き方のコツも分かっているはずなので、個人的には事前チェックを依頼することをお勧めします。

私の場合も、@mitsuba_tan さんに見ていただきました。

5. 日本のMVP受賞者の方のブログご紹介

参考までに、私が知っているMVP受賞者の方を一部ご紹介します。
(順不同です)

mitsuba

c-mitsuba.com

C#JavascriptRubyなどの言語の他、XAML、Blendなどの描画系の言語にも詳しい方です。

書籍も出されておられます。

xin9le.net

xin9le.net

C#.NET Frameworkを中心に活動されている方です。北陸地域でコミュニティ運営もされています。

Natural Software

www.naturalsoftware.jp

センサーデバイス系について書籍やブログなどで情報発信をされている方です。
特に、HoloLens関係の情報発信では日本で最も多いかと思います。

つくるの大好き

satoshi-maemoto.hatenablog.com

Kinectなどのセンサーデバイスを使って新しいものを生み出すコミュニティ「TMCN」に所属されている方です。センサー系だけでなく、VRやAR関係でも多数の作品を出展されています。

かずきのBlog@hatena

blog.okazuki.jp

Windowsアプリケーション関係で多数ブログを書かれています。Windows 10以降のアプリケーションプラットフォーム「UWP」について電子書籍を発行されています。UWPに関する情報は少ないのでとても勉強になります。


他にもたくさんの方がいらっしゃいますので、ぜひ探してみてください。

6. 終わりに

Microsoft MVPは、Unity系のコミュニティではまだあまり知られていないと思います。

私が知らない受賞メリットもまだまだあるはずですので、気になった方はぜひご検討ください。

今回の記事が、MVPを考えている方の助けになれば幸いです。


次回は、@isemito_niko さんの「VRデバッグに役立つかもしれないアセットを作りましたのでその紹介」です。よろしくお願いします!

MRデバイスMeta2発売に備えて、Meta1と色々比較してみました

AdventCalendar Meta Unity

これは、Oculus Rift Advent Calendar 2016の6日目です。

前回は、@obaatsu さんの 『ふぉとゆに』をViveからTouchに移行したハナシ でした。

今回は、お題に含んでいただいてたので、VRではなく、MR(Mixed Reality)について書くことにしました。


===

目次

0.はじめに

1. Meta1とは?

2. Meta1でできること

3. Meta1でのアプリの作り方

4. Meta2でのアプリの作り方

5. Meta1とMeta2のアプリの作り方の違い

6. 終わりに

===

0.はじめに

MRといえば、MicrosoftのHoloLensが有名ですが、Metaというデバイスもあります。

両者のプロモーションムービーを見ると、コンセプトが似ています。

また、Metaは、もうすぐMeta2という新機種が出ます。

しかし、Metaについては基本的にムービー以上の情報があまりないのが実態です。

そこで、Meta2の準備をするために、前機種であるMeta1を含めて色々と整理してみました。

1. Meta1とは?

Meta Companyが2013年に発表し、2014年に発売したHead Mount Displayです。

こちらにまとめてあります。

www.slideshare.net

あるいはだいたい同じ内容ですが、こちらにも一通り書きました。

magicbullet.hatenablog.jp

(自分でも忘れてましたが、この時点でHoloLensに期待してたことが書いてありました)

2. Meta1でできること

ToFセンサがついているので、手の動きを認識してCGオブジェクトを操作することができます。

以前紹介したものと同じですが、こんなことができます。

Grab

手でオブジェクトを握ることで、オブジェクトを移動させる


Pinch Out/In

両手の指でオブジェクトを拡大、縮小させる


Tap

オブジェクトに触ることで、操作する


また、RGBカメラによりAR表示も可能です(のはずですが、私の環境ではうまく動きませんでした)。


ToFセンサとRGBカメラを組み合わせることで、SLAMという方式も使えます。

SLAMとは、「自分の位置を推定しながら周辺の地図を作る方式」のことですが、MetaやHoloLensのようなHead Mount Displayでは、三次元空間に表示したCGオブジェクトに「近づく」、「遠ざかる」ができることです。

綺麗に書けてないですが、こういうイメージです。

f:id:Takyu:20161204074752j:plain

f:id:Takyu:20161204074759j:plain


ただし、ジェスチャーもSLAMも、認識精度は高くありません。

3. Meta1でのアプリの作り方

大前提として、Unityで開発します。他の開発方法は書かれていませんでした。

Developerサイトよりunity package、ドライバーソフトを取得します。

ドライバーソフトをインストール後、下記のように接続します。

f:id:Takyu:20161204074813j:plain


Unityを起動して、Hierarchy ViewにMeta WorldというPrefabを置きます。立体視のためにCamera オブジェクトが二つ付いているなど、Meta1を動作させるための必須Prefabです。


また、Meta1で操作したいオブジェクトには、Meta Bodyというコンポーネントを追加します。

f:id:Takyu:20161204074857p:plain

MetaBodyには、使えるジェスチャが表示されます。実際に起動させたとき、有効にしたジェスチャだけが認識されます。

では全部有効にすればよいか、と考えたいところですが、有効にしたものが多いと個別のジェスチャを認識しづらくなるので、ほどほどにする必要があります。


Meta1装着時にジェスチャで操作したいオブジェクトを適当に配置してロジックを作ったら、Unityエディタで実行するか、Windows (exe形式)向けにビルドして実行します。

Meta1は先ほど示した配線図の通り、PCがないと動かず、PCの画面をミラーリングする形で使用します。


ちなみに、SDK ver1.3.4でWindows10 Proの環境で使用すると、Unity Editor実行時に100%Unityが落ちます。

Forumに問い合わせをして色々調べたところ、最終的にUnity Editorの32bitを使うことで回避できました。

(Meta2でも類似現象が発生するかもしれないので、参考までに記載しました)

4. Meta2でのアプリの作り方

引き続きUnityで開発する方針は固定とみてよさそうです。

Meta2未発売のため詳細は不明ですが、1回だけMeta社がブログでHello World的なアプリの作り方を公開していました。

blog.metavision.com

この中にはYou Tubeのリンクも貼られており、Unityを使って開発する流れが具体的に解説されています。

5. Meta1とMeta2のアプリの作り方の違い

動画を見ていて、Meta1との違いがいくつかわかったので、整理してみました。

項目 Meta1 Meta2
基本となるPrefabの名称 Meta World Meta2
操作したいオブジェクトに必要な処理 Meta Body Componentを追加 追加不要。Create Objectするだけ
SLAM機能 SDKのver1.1.0から使用可能。ただし精度は低く、ドキュメントにもα版の実験的なものだと書かれていた 最初から使用可能。You Tubeの動画を見る限り、CG上に表示させた両手で、オブジェクトを自在に制御できていた。精度はよさそう
操作方法 規定のジェスチャでのみ制御できる まるでオブジェクトが実在するかのように、自由に操作できる

(ブログの内容を元にした考察です。開発状況によって、今後変わる可能性があります)

まだ情報が少ないですが、Meta1よりもアプリ開発が楽になり、精度が上がっていると思われます。

6. 終わりに

これまでのMeta2の情報を見ると、Meta1でうまくいかなかった点が改善されているようです。
予定よりも発売日が遅れていることだけが懸念ですが、Meta1の時も1年近く遅れたので気長に待とうと思っています。


2016年は、MicrosoftのHoloLensが発売されたり、LenovoからGoogleのProject Tangoベースのタブレットが発売されたりと、VRだけでなくMR関係の話も盛り上がりました。

また、

・VR向けHead Mound Displayの大手であるHTC VIVEが、Microsoftと一緒にVR/MRのデモを披露して連携をアピール

IntelがVR/ARを意識したHead Mount Display「Project Alloy」を発表

など、VRとAR/MRの融合も起きつつあります。


個人的には、VRとAR/MRは構成する技術が多く、相互に発展していくものと考えています。

2017年もブログや勉強会などを通じて広く情報発信しつつ、色々な方と交流できればと思いますので、引き続きよろしくお願いします。


明日は、@nyanko_omori さんによる、Oculus Touchのお話です。よろしくお願いします。

Unity+VR/AR/MR勉強会で、2つ同時の発表をしました。

Meta Android Unity 勉強会

下記でご依頼いただき、2種類の内容を同じ日に発表しました。

atnd.org

発表1:UnityでAndroid nativeの機能を使う⽅法の勘所

ここ2ヶ月ほど、ブログで書いていた内容のまとめです。記事が多めになったので、いったん整理する意味で発表資料にしました。

www.slideshare.net


関連記事はこちらです。

magicbullet.hatenablog.jp

magicbullet.hatenablog.jp

magicbullet.hatenablog.jp

magicbullet.hatenablog.jp

magicbullet.hatenablog.jp



Eclipseはともかく、Android Studio向けの情報があまりないので、もし似たようなことをやりたい方には役に立つかもしれません。


発表2:MRデバイスMeta2に向けて、Meta1の SLAM機能をためしてみた

f:id:Takyu:20161127215037p:plain

私はおそらく数少ない日本人のMeta1所持者で、過去にブログにいくつか書いたこともあります。

Meta1については、残念ながら当初の紹介動画とは遠い印象でしたが、いくつかの情報筋から、次世代機のMeta2にとても期待しています。

そこで、Meta2が届く前にMeta1の最新機能であるSLAM機能について整理してみました。

www.slideshare.net

感想

実は、諸事情で12月から数ヶ月ほど活動頻度が減る可能性があります。

そこで、お声かけもいただいていたので、その前にということで、2つ同時発表に挑戦してみました。

いつもよりは準備に時間がかかりましたが、無事に終わってよかったです。


Unity-Androidは、残りの未完のブログを書いたら収束させます。

12月以降にMeta2が来るはずなので、12月からはMeta2とHoloLensのMR関係に注力する予定です。

MacのVisual Studio CodeとUnityを連携させる方法(3)

Visual Studio Unity Mac

以前紹介したように、私はMac版Unityで開発する時は、Visual Studio Codeを使っています。

magicbullet.hatenablog.jp

magicbullet.hatenablog.jp

(2)の記事で、インテリセンス(コード補完)が効かなくなったときの対処方法を書きましたが、先ほどそれでも対応できなかった(結果的には勘違いも含みます)があったので、参考までに紹介します。

環境

Mac OS X 10.11.6
Visual Studio Code 1.7.1
VSCode.cs v2.7 ( (2)のときはv2.6)

現象

Unityのプロジェクトを別のフォルダにコピーしてから、Visual Studio CodeでUnityC#のインテリセンスが効かなくなってしまった。

(2)の記事で紹介した方法により、Legacy C# SupportのExtensionが入っていることは確認済み

原因

プロジェクトを別の名前のフォルダにコピーしたことで、slnファイルが二つ生成されてしまい、Visual Studio Codeが新しいslnファイルを読み込んでいたため。

補足説明

例えば、UnityProjectAという名前のプロジェクトを作ったとします。そうすると、UnityProjectAの階層に、slnファイルやAssetsフォルダなどが生成されます。

UnityProjectA / UnityProjectA.sln

今回、途中からgit管理したくなったので、UnityProjectAフォルダの中身をコピーしてUnity_gitという別フォルダの中に入れました。

このように配置すると、Unity_gitフォルダには、UnityProjectA.sln以外にUnity_git.slnという別のslnファイルが生成されます。

Unityで開発を続ける分には問題ないのですが、Visual Studio Codeでは、Unity_git.slnを読んでいました。

対処方法

Visual Studio Codeで、元のプロジェクト名のslnファイルを読み込むように変更する

補足説明

Visual Studio Codeの右下を見ると、読み込んだプロジェクトのslnが表示されています。

f:id:Takyu:20161115000749p:plain

ここをクリックすると、画面上部にslnの選択画面が出ます。

f:id:Takyu:20161115000820p:plain

ここで、フォルダコピー前のslnを選択すると、インテリセンスが効くようになります。



こんな使い方をする方はあまりいないかもしれませんが、せっかくなので整理してみました。

(4-2) UnityでBing Speech to Text API(Android用)を使う方法

Android Unity

前回の続きです。

magicbullet.hatenablog.jp

前回はUnityでBing Speech to Text(Android用)を使う手順のうち、Android Studio側で準備する内容を解説しました。

今回はUnity側の手順を解説します。

==============================
目次

(1章は前回の記事を参照ください)

2. Unity側の手順

2-1. プロジェクト作成&フォルダ構成を変更

2-2. スクリプト作成

2-3. uGUIでボタン作成

2-4. ビルド

3. 動作確認

4. 終わりに

==============================

2. Unity側の手順

2-1. プロジェクト作成&フォルダ構成を変更

(1) 空のプロジェクトを作成

ここは説明不要ですね。

(2) Assets以下のフォルダ構成を変更

以下のようにします。スペルミスにご注意ください。

f:id:Takyu:20161108233910p:plain

(3) AndroidManifest.xmlとSpeechSDK.jarを追加

AndroidManifest.xmlは、Unity標準のものを使います。下記からドラッグ&ドロップします。

Macの場合
/アプリケーション/Unity/PlaybackEngine/AndroidPlayer/Apk/AndroidManifest.xml

Windowsの場合
C:\Program Files\Unity\Editor\Data/PlaybackEngines/AndroidPlayer/Apk/AndroidManifest.xml

配置後、下記のようにpermissionやserviceを追加します。


gist31362bb5b3588534bd643afd90c14404


SpeechSDK.jarは、Android Studio側のプロジェクトから取り出します。
Android Studio側でビルドすると、以下に生成されています。

samples/SpeechRecoExample/build/intermediates/exploded-aar/com.microsoft.projectoxford/speechrecognition/1.1.0/jars/libs/SpeechSDK.jar


これをPlugins/Android フォルダに入れます。

(4) libandroid_platform.soを追加

libandroid_platform.soは、Android Studio側のプロジェクトから取り出します。
これはビルドと関係なくプロジェクトに配置されていますが、下記の中にも入っています。

samples/SpeechRecoExample/build/intermediates/jniLibs/arm/release/armeabi/ libandroid_platform.so

これを、Plugins/Android/libs/armeabi-v7aフォルダの中に入れます。

(注)Unityは基本的にフォルダ構成を気にせず開発できますが、いくつかのフォルダ名は予約語扱いされており、その名前にしないと動きません。

今回のフォルダ名は予約語扱いされているので、この名前にしてください。


(5) assetフォルダとresフォルダにwavとxmlファイルを追加

下記のwavとxmlファイルを、

Plugins/Android/assets/

Plugins/Android/res/values/

に入れます。


f:id:Takyu:20161108090744p:plain


(6) ビルドしたjarファイルを追加

最後に、Android Studioでビルドしたjarファイル(初期ファイル名はclasses.jar)を追加します。

名称は何でもよいです。特に意味はありませんが、他のアセットを調べた時、plugins.jarとなっていたので、この名前に変更してから入れました。

入れる場所は、Plugins/Androidの中です。

2-2. スクリプト作成

(1) Manifestファイル

次に、2-1 (3)で入れたManifestファイルに追記します。

追記箇所は、<permission>と<service>です。

<permission>は、元のサンプルの記述をそのまま使っています。

<service>は、今回向けに追加したものです。

最終的にこのようになります。



giste78a421f6137a9aa4552ff4a8319bf04


(2) C#

このようなスクリプトを作ります。

今回、個々のpublicメソッドは、uGUIのボタンから呼ぶようにしてみました。


gistf29682214864ad95cff9172847fe4268

また、onCallbackResultメソッドは、Androidjavaでこのように書くことで、java側から呼んでいます。

UnityPlayer.UnitySendMessage("TestObject","onCallBackShowResult",response.Results[i].DisplayText);

スクリプトTest1.csは、Empty Gameobjectを作り、そこにアタッチします。

2-3. uGUIでボタン作成

特に大したことはしていません。uGUIでボタンを作って、先ほど作ったC#のメソッドを呼ぶようにしただけです。

f:id:Takyu:20161108225742p:plain

ここで、Canvas以下の要素について説明します。

Text :音声認識結果を表示

StartBindServiceボタン:bindServiceを開始。Test1.csのbindService_Startメソッドを呼ぶ。

StopBindServiceボタン:bindServiceを停止。Test1.csのbindService_Stopメソッドを呼ぶ。

StartRecognitionボタン:音声認識を開始。Test1.csのstartRecognitionメソッドを呼ぶ。


ちなみに、今回の趣旨とはずれますが、skyboxの見た目を変えたいときは、下記の記事の「補足」を試してみてください。

Unityモデルの見た目を調整する方法をまとめました - Cross Road


2-4. ビルド

File -> Build Settingsで通常のAndroidアプリをビルドするときの手順と同じように進めます。
Build identifierは任意の名称で大丈夫です。Android Studioで作ったときのpackage名と合わせる必要はありません。

3. 動作確認

XperiaZ3(Android 5.0.1)にインストールし、BindServiceボタン、StartRecognitionボタンの順に押してから「これで動きました」と話しかけてみました。

f:id:Takyu:20161108231325p:plain

マイクロソフトコグニティブサービス」と話しかけた結果です。

f:id:Takyu:20161108233740p:plain

4. 終わりに

今回使ったMicrosoftのBing Speech to Textは、以前書いたように、これまで試した音声認識エンジンの中で、認識精度と速度が最も速いです。なので、Unityで使えるようにすると、色々と応用範囲が広がると思います。

また、今回、あまり情報がないことで時間がかかった面もあるので、本記事を含む4種類の記事で実装方法やトラブル対応集を整理しました。

合わせてご参照いただければと思います。


【Unity-Android 】 (1) Android StudioでUnity向けにmoduleを作る方法 - Cross Road

【Unity-Android 】(2) Android Studio作ったmoduleを、unityから呼ぶ方法 - Cross Road

【何回かに分けて更新予定】(3) Android StudioでUnity向けにmoduleを作るときのトラブル対応集 - Cross Road




===
2016/11/25 追記

今回のサンプルコードをGithubで公開しました。手順についてはブログの該当記事を参照してください。
ざっくり言うと、Cognitive ServiceのPrimary Key、LuisAppID、Subscription Keyを書き換えてAndroid Studioでビルドし、ビルドで生成されたclasses.jar(念のため名前をplugins.jarなどに変更した方が良いかもしれません)を、UnityのPlugins/Androidに入れるだけです。

github.com


===

(4-1) UnityでBing Speech to Text API(Android用)を使う方法

Unity Android

以前紹介した、MicrosoftのBing Speech To TextをUnityで使えるようにしてみました。

magicbullet.hatenablog.jp

ただ、Android nativeアプリ開発に不慣れだったこともあり、色々とつまづきました。

せっかくなので、修正過程を整理しておこうと思います。

実行した環境は以下です。

MacOS X 10.11.6
Android Studio 2.1.2

Windows10環境では試していませんが、Android Studioの話なので動くと思います。

=====

手順

1. Android Studio側の手順

1-1. Android Studioプロジェクトサンプルを入手し、動作確認

1-2. Module & Service化

1-3. ビルド

2章以降は別の記事に掲載
=====

1. Android Studio側の手順

1-1. Android Studioプロジェクトサンプルを入手し、動作確認

まずはMicrosoftが提供しているサンプルコードを入手します。

github.com

これをAndroid Studioで開きます。開いた後、下記の手順に従って、Androidスマートフォンで動くように設定します。

magicbullet.hatenablog.jp

この記事でも紹介しましたが、私の環境では、アプリインストール直後は、ほぼ必ず1,2回動作に失敗しました。
(Login Failedというエラーが出ます)

この場合、アプリの再インストールか再起動を繰り返してみてください。

1-2. Module & Service化

Microsoftが提供するサンプルコードは、アプリ(app)になっています。これだとUnityでアプリ化できないので、モジュール(library)に変更します。

アプリとモジュールの違いについては、下記を参照ください。また、以後は下記を確認済みとして解説します。

magicbullet.hatenablog.jp


以下、手順です。

[1] classes.jarを追加

以下のclasses.jarでctrl+cした後、Android Studioを開いてlibフォルダで、ctrl+pします。

Macの場合
/アプリケーション/Unity/PlaybackEngine/AndroidPlayer/Variations/mono/Release/Classes/classes.jar

Windowsの場合
C:\Program Files\Unity\Editor\Data/PlaybackEngines/AndroidPlayer/Varitations/mono/Release/Classes/classes.jar

classes.jarをドラッグ&ドロップすると、copyではなくmove扱いになって、Unityの本来のフォルダからclasses.jarが消えてしまうので注意してください。

コピーすると、Android Studio上ではこのように配置されます。

f:id:Takyu:20161106131058p:plain

メッセージウインドウが2回出ますが、どちらもOKを選択してください。


[2] build.gradleを修正

applicationではなくlibraryとしてビルドするため、先頭を変更します。

また、末尾(でなくてもよいですが)に、android.libraryVariants.all を使って、ビルド時の条件を追加します。

それ以外は元のMicrosoftのサンプルと同様です。下記のようになります。


gist1df4689cfea9d7484a04147b83e01c8b


[3] Unityと通信するためのI/Fクラスを追加

Project Viewにして、com.microsoft.CognitiveServicesExampleで右クリックし、New / Java Class を選択して、新しくクラスを追加します。

私の場合、クラス名をNativeBridgeとしました。

f:id:Takyu:20161106175735p:plain


[4] I/Fクラス NativeBridge.javaにbindServiceの機能を実装

色々試しましたが、最終的に元のMicrosoftの機能をService化することで、動作させることができました。

以下はNativeBridge側の機能です。

ざっくり説明すると、元の機能をServiceとして呼び出し、bindServiceによってUnity側のActivityとつなぎ、Service化した機能をUnityに渡しています。

bindServiceの書き方は少し複雑ですが、いくつか調べたところ、決まったフォーマットで書けばよいことがわかったので、それに倣って書きました。

下記はNativeBridge.javaの実装例です。


gist47c7cb56bd156593badcefcca2a80827

なお、これだけを書いた時点では多数のエラーが出ます。それはMainActivity.java側を変更していないためなので、この時点では無視して問題ありません。


[5] Activityクラスを修正

Serviceとして呼ぶためにActivityの記述を削除すること、およびUnityに音声認識結果を返すためにUnitySendMessage関数を仕込むこと、の2つが大きな修正目的です。

個別に説明すると相当多くなるので、ここでは主な修正箇所をざっと解説します。余力があればgithubで全体を公開します。


(2016/11/27 追記:Githubで公開しました。)

import

以下を追加。

import android.os.IBinder;

import android.util.Log;
import com.unity3d.player.UnityPlayer;

import android.content.Intent;

import android.app.Service;
import android.os.Binder;
bindService

以下を追加。

    public class MyServiceLocalBinder extends Binder {
        MainActivity getService() {
            return MainActivity.this;
        }
    }
    private final IBinder mBinder = new MyServiceLocalBinder();

    @Override
    public IBinder onBind(Intent intent) {
        return mBinder;
    }
    @Override
    public void onRebind(Intent intent){}

    @Override
    public boolean onUnbind(Intent intent){
        //onUnbindをreturn trueでoverrideすると次回バインド時にonRebildが呼ばれる
        return true;
    }
元のサンプルコードでボタンやラジオボタンで処理が分かれる箇所

基本的に全てtrueで返し、ボタン関係の処理はコメントアウトします。

認識対象の言語

下記のようにgetDefaultLocaleメソッドを修正し、日本語対応させます。

    private String getDefaultLocale() {  return "ja-jp"; }
onCreateメソッドの削除

全てコメントアウトします。

StartButton_Clickメソッドの変更

このメソッドの中では、Activityを引数に持つメソッドを呼び出す箇所が何個かあります。

ただ、今回はServiceにしているので、Activityを引数に持たないようにします。

幸い、呼び出したいメソッドを調べるとActivityが引数にない場合の宣言もあるので、こっちを使います。

また、StartButton_Clickメソッドの引数はなしにしておきます。

onFinalResponseReceivedメソッドにUnitySendMessageを追加

このメソッドは、音声認識が完了すると呼ばれます。
そこで、ここにUnitySendMessageを挟むことで、認識結果の文字列をUnity側に送ることができます。

具体的には、

 for (int i = 0; i < response.Results.length; i++) {
                UnityPlayer.UnitySendMessage("TestObject","onCallBackShowResult",response.Results[i].DisplayText);
             //   this.WriteLine("[" + i + "]" + " Confidence=" + response.Results[i].Confidence +
             //           " Text=\"" + response.Results[i].DisplayText + "\"");
}

のように記述します。

1-3. ビルド

Terminalを開いて、

./gradlew :samples:SpeechRecoExample:clean :samples:SpeechRecoExample:assembleRelease

を実行します。

Terminalの場所については、下記の2-5を参照ください。

magicbullet.hatenablog.jp



ここまで実行すると、Android Studio側の対応が完了します。

Unity側は次回記載します。

Unityを介してお仕事を募集、受ける仕組み「Unity Connect」について調べてみました

Unity UnityConnect

先日のUnite 2016 @ロサンゼルスで、Unityに関する新サービスがいくつか発表されました。

そのうちの一つに、Unity Connectがあります。

Unity Connectとは、Unityに関する仕事を募集したり、逆に自身がUnityに関するスキルを公開して仕事を得るための仕組みです。

ざっと見たところ、色々と面白そうな感じがしたのでちょっと調べてみました。

=====

目次

1. Unity Connect の登録方法

2. サイトの構成

3. 自分のプロフィール登録内容

4. 終わりに

=====

1. Unity Connect の登録方法

まず、Unity IDというものを作ります。これはAsset Store用のIDとは別です。


まずはここにアクセスします。

下記の画面で Create Unity IDをクリックして新しくIDを作ります。

f:id:Takyu:20161105200051p:plain

必要な項目を入力してCreate Unity IDをクリックします。

f:id:Takyu:20161105200104p:plain

これでIDが登録されるので、登録完了メールが来たらログインします。これでUnity Connectに参加できます。

2. サイトの構成

ログインするとこのような画面になります。

f:id:Takyu:20161105202129p:plain

Activity

Facebookのタイムラインと同等です。followした人や企業の更新情報が表示されます。

Discover

Project、Talent、Companiesのカテゴリ別に検索することができます。

f:id:Takyu:20161105203047p:plain

Project

個人または企業が進めているプロジェクトの一覧です。11/5時点ではプロジェクトの詳細を見ることはできませんでした。
(そもそも概要だけしか紹介しない仕様かもしれません)

Talent

Unity Connectに登録している個人の一覧です。詳細を見ると、どんなスキルがあって、どんな作品を作ったか、などが書かれています。


Companies

会社の紹介、および募集職種(ある場合)が掲載されています。

いくつか調べた中では、どこも募集職種の条件について、かなり細かく書かれていました。

たとえば、ある企業の応募条件です。

f:id:Takyu:20161105203913p:plain

Jobs

仕事を受けてくれる人の募集ページです。

たとえば、下記はある方の募集要項です。

Los Angeles, United States · Remote Ok · Task · 3 - 5 years experience using Unity · Unity Certified Preferred · Unity · Game Design · Animation · 2D Toolkit · pipeline · Video · 2D Platformer · Hourly · A Few Hours · English

意訳
アメリカのロサンゼルスが開発拠点。リモート対応OK。プロジェクトのアウトソース(Task)。3-5年のUnity使用経験。Unity Certified Developerの資格があると望ましい。対応してほしいスキルは、ゲームデザイン、アニメーション、2D Toolkit、パイプライン、ビデオ、2D Platformer。給料は1時間当たりで相談。作業時間は数時間。英語必須。

こんな感じの内容が多数掲載されています。
私が見た時点では146件ですが、これからもっと増えていくのかもしれません。

Recruit

f:id:Takyu:20161105210647p:plain

先ほどのJobsの反対で、自分の提示した条件の仕事を受けてくれる人を募集するためのページです。

募集するためにPost a Job しよう、という案内が出ています。

Post a Job

f:id:Takyu:20161105210940p:plain

仕事の募集をするためのページです。TaskとJobの二種類があります。

Taskとは、プロジェクトの一部をアウトソースするもので、Jobsはフルタイムかパートタイムで雇うものです。

3. 自分のプロフィール登録内容

ちょっと見づらくて申し訳有りませんが、初期状態の画面を貼ってみました。こんな感じに色々と登録できます。

f:id:Takyu:20161105211832p:plain

f:id:Takyu:20161105211839p:plain


いくつか補足です。

Title :自分の職業を表すものを書きます。Programmer、Character Artist、Game Designerなどです。

About me :自己アピールです。こういう開発をしたとか、こういう技術習得をしているとか、です。

Desired Annual Salary:Annual(年間)の給料条件を記入します。「年間の」とあるので、Full Timeを選んだときに書けばよいと思います。

Why Me :自分だったらこういうことができる、のようなアピールです。ただ、ざっと調べた範囲では書いている人を見つけられませんでした。

Companies to Hide From:ここに記入した会社の所属の人には自分のプロフィールが表示されない、と思います。

4. 終わりに

日本でも転職サイトはありますが、Unityに特化し、案件単位で仕事を応募するサイトは、今回が初めてです。

全部英語なのは少し面倒ですが、Remote OKの仕事もけっこう多いので、日本の企業や開発者の方でも気軽に募集したり応募したり、ということができる気がします。