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

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

Unity Mac Visual Studio

以前、Visual Studio CodeをUnity用のテキストエディタとする方法を紹介しました。

magicbullet.hatenablog.jp


しかし、本日このような記事を見つけました。

qiita.com

(ブログ執筆者の@SilverTats様、ありがとうございます)


自分の環境で試したら、たしかにインテリセンスが効かなくなっていました。

f:id:Takyu:20160723230555p:plain

(Unityの"Input"が候補に出て来ない)

アップデートの通知が来た時にVisual Studio Codeのバージョンを上げてた気がするので、それが影響したのかもしれません。

最近開発時はWindows10ばかりだったので気づくのが遅れました。。


最終的に動くようにできましたが、以前紹介した方法と変わっていたので、改めて方法を紹介します。

環境

Mac OSX 10.11.5
Unity 5.3.5f1
Visual Studio Code v1.3.1


1. Unity側で、Visual Studio Codeを使うように設定を変更する

これは以前と同じです。まず、Unity -> Preference を開きます。

f:id:Takyu:20160416114222p:plain

External Script Editor でBrowseを選択し、Macのアプリケーションフォルダから、Visual Studio Code.appを選択します。

一度選択すると、上記画像のように、Codeという項目が追加されチェックが付きます。

2. Visual Studio CodeのExtensionを変更する

上記ブログに記載の通り、Visual Studio Code and Unity のHPを開くと、

f:id:Takyu:20160723230312j:plain

というメッセージが追加されています。

この記載によると、バージョンが新しいVisual Studio Codeは、C#認識用のプラグイン(Extensionsと呼ばれてます)も新しくなっており、これがUnityのC#に対応していない、ということのようです。

そこで、手動でExtensionsを変更します。

2-1. C# Extensionsをアンインストール

Visual Studio Codeを開き、cmd + p を同時に押します。

f:id:Takyu:20160723230840p:plain

すると、赤枠のように、小さいコマンドプロンプトが出ます。

ここで、

ext install csharp

と入力してEnterキーを押します。

f:id:Takyu:20160723231023p:plain


すると、このようにC#関連のExtensionsが表示されます。

f:id:Takyu:20160723231512j:plain

"C#"の箇所にある「拡張機能のアンインストール」を選択すると、新しいプラグイン"C# Extensions"がアンインストールされます。

2-2. Legacy C# Support をインストール

Legacy C# Supportは、omnisharp という名前のExtensionsです。先ほどと同じように、

ext install omnisharp

を入力してから、出てきたメニューで「インストール」を選びます。私の環境では検討中に一回入れてたので、いったん「拡張機能のアンインストール」を選択してから再度インストールしました。

f:id:Takyu:20160723233803p:plain



以上、1と2が、最初のみ設定する作業です。


3. VSCode.csを入手し、プロジェクトに追加する。

これはエディタ拡張用のスクリプトで、Visual Studio Codeとの連携にはこれが必須になりました。

Unityでプロジェクトを作るたびに追加する必要があるので、これが一番大きな変更です。



以下のPlugins/EditorというフォルダからVSCode.csを取得します。

github.com

このファイルを、自分が使っているUnityプロジェクトに追加します。

Plugins/Editorフォルダを作り、この中に入れればOKです。


これで準備完了です。


あとは、Unityを起動してプロジェクトを作り、任意のスクリプトを作った状態で、UnityのメニューからVisual Studio Codeを開きます。

f:id:Takyu:20160724000227p:plain

具体的には、Assets -> Open C# Project In Code を選択します。


以前紹介したときは、Visual Studio Codeを開き、「フォルダを開く」からUnityのプロジェクトのトップディクレトリを指定していたので、ここも以前と変わっています。


これでC#のファイルを開くと、インテリセンスが効くようになりました。

f:id:Takyu:20160724000432p:plain

補足

補足1

C# Extensionsをアンインストールすると、このようなメッセージが表示されます。

f:id:Takyu:20160724000653p:plain

今のところ、Unity用のエディタとして使う分には、ここで指定されている「ms-vscode.csharp」のインストールは不要です。

補足2

VSCode.csを追加したことで、Unity PreferencesにVSCodeというメニューが追加されています。

f:id:Takyu:20160724000857p:plain


ここで最初に設定されている内容を変更しなくても使用できたので、今のところはここはそのままでよさそうです。

終わりに

Visual Studio Codeは進化が早いようですね。
以前よりひと手間増えてしまいましたが、個人的にはやはりMono DevelopよりVisual Studio Codeの方が軽くて使いやすいので、引き続きMacで開発する時はCodeを使おうと思っています。

Cortanaによる音声認識結果によってUnityで作った関数を呼ぶ方法をまとめました

UWP Unity HoloLens

前回、CortanaとUnityを連携する方法を紹介しました。

magicbullet.hatenablog.jp


このときは「Unity側で定義した会話文を元にCortanaとおしゃべりする」、というものでした。

構成としては、

Unity
→UWPのXAML
→Cortanaを呼び出す
→Cortanaがユーザの声を認識する
→Unity側で定義した言葉を、Cortanaがしゃべる


です。今回は、

Unity
→UWPのXAML
→Cortanaを呼び出す
→Cortanaがユーザの声を認識する
→認識した結果に応じて、Unity側で定義した関数を呼ぶ

を作ってみたので、この内容を解説したいと思います。

目次

1. 作成手順

1-1. Unity側で作成

1-2. Unityでビルド

1-3. Visual StudioでVoiceSpeech.csを修正

1-4. Visual StudioでCortanaを使うための設定

1-5. Deploy

1-6. 動作確認

2. 終わりに

1. 作成手順

今回、検討するにあたり、前回のプロジェクト一式を@kaorun55 さんに小さくしていただきました。

(@kaorun55さん、ありがとうございます)

これを元にCortanaからUnity関数を呼ぶ機能を追加したものを作りました。

以後、このプロジェクトの使い方を説明していきます。


2016/7/19 追記

ソースコードをzipで固めて下記におきました。Unityからのビルドが必要です。

https://1drv.ms/u/s!AIq6rsyH7lzvgolg

1-1. Unity側で作成

Unity側では、音声しゃべったら呼びたい関数を作ります。

今回のサンプルでは、"fire"としゃべって火の球を発生させ、"Go"としゃべって火の球を的に当てる、という動きを作ってみました。

まず、CortanaController.csでは、以下のように文字を定義します。

f:id:Takyu:20160713220521p:plain

Unity側ではこのようなスクリプトを準備しました。




gistee5bb0e9d9ad24f3d6c61d4af5b3f85d


ここは説明不要で、publicで宣言した関数を書いているだけです。


1-2. Unityでビルド

前回ブログの内容を再掲します。

ビルド設定は下記の通りです。

f:id:Takyu:20160702142237p:plain

まず、Switch PlatformでWindows Storeにします。続いて、

SDK Windows 10
UWP Build Type XAML
Build and Run on Local Machine
Unity C# Projects チェックをつける

と設定します。


その後、UnityからBuildを実行し、ビルド結果の保存先をAPPフォルダにします。



[補足1]

Build TypeはXAMLにしてください。D3Dにすると、その後の設定でCortanaの制御ができなくなります。

[補足2]

Build TypeをBuild and Run onには、Windows Phoneというオプションもあります。しかし、Local Machineにしておいても、あとでWindows 10 MobileにDeployできました。

[補足3]

HoloLensの場合、Virtual Reality Supportedにチェックを入れると、全天周のアプリになります。VR系アプリを作っている方は想像しやすいと思いますが、CG空間の一部だけがレンダリングされ、センサの向きによって表示される内容が変わるものです。

チェックを入れないと、普通のUWPアプリと同一の扱いになり、空間に張り付けることができます。


[補足4]

Unity5.4.0b14-HTPでVirtual Reality Supportedにチェックをつけてから作ったC#プロジェクトを、Visual StudioでWindows10 Mobile用のUWPにしたところ、問題なく動きました。

1-3. Visual StudioでVoiceSpeech.csを修正

1-3-1. VoiceSpeech.csの概要

このスクリプトは、Cortanaによる音声聞き取り、音声再生を担当しています。具体的には、
StartListeningという非同期のメソッドによって、音声受付状態になります。

また、ContinuousRecognitionSession_ResultGeneratedという非同期のメソッドによって、認識した結果をstringにします。

そして、 VoiceResponseという非同期のメソッドによって、Unity側で定義したQ&Aを元に、該当する回答分を選定してSpeakメソッドを呼びます。

Speakメソッドでは、最終的に

Media.SetSource(synthStream, synthStream.ContentType);

によって、音声を再生します。

1-3-2. 修正

まず、Unityの関数を呼ぶため、冒頭の宣言に

using UnityEngine.Windows;
using UnityPlayer;

を追加します。

すると、元のプロジェクトにはUnityEngineやUnityPlayerが入ってないのでエラーになります。

そこで、Plugin.Windows10.Speech部分を右クリックして、Add Referenceを選択します。

f:id:Takyu:20160713223150p:plain

開いたWindowのBrowseをクリックし、UnityPlayer.winmdと、UnityEngine.dllを指定します。

f:id:Takyu:20160713223332p:plain

それぞれのパスは以下の通りです。


CortanaUnityConnection\APP\CortanaUnityConnection\Unprocessed\UnityEngine.dll

CortanaUnityConnection\APP\Players\UAP\ARM\Debug\UnityPlayer.winmd

(HoloLensの場合は、UAP直下がx86になります)



その後、以下のようにソースコードを修正します。




gist8babcdb5137a437fa6e32562ae5922f9


すると、ソースコードに記載したUnityのComponentが見つからないというエラーがでます。たとえば、今回の場合、InvokedByCortanaコンポーネントを呼び出している、

 go.GetComponent<InvokedByCortana>().generateFlare();

この部分でエラーがでます。

これは、Plugin.Windows10.Speechプロジェクトが、Unity側のプロジェクトを認識できていないためです。

そこで、Plugin.Windows10.SpeechのReferenceを右クリックして、Add Referenceします。

f:id:Takyu:20160713224709p:plain

ここで、Assembly-CSharpというプロジェクトを二つとも選択してOKをクリックすれば、Unity側のプロジェクトを認識し、エラーが消えます。


1-4. Visual StudioでCortanaを使うための設定

以下は、前回のブログと同一です。2-2-5, 2-2-6, 2-2-7, 2-2-8, を参照ください。


magicbullet.hatenablog.jp

1-5. Deploy

前回のブログと同一です。


1-6. 動作確認

実機の雰囲気が伝えづらいので、Unity Editorによるスクショを紹介します。

まず、起動すると、このようにボードと球体が表示されます。
(HoloLensの場合、黒い部分は透過しています)

f:id:Takyu:20160714232715p:plain


この状態で、"Fire"と発声すると、火の玉が出ます。「ファイアー」とカタカナ英語的に発音しても出ます。

f:id:Takyu:20160714232825p:plain


続いて、"Go"と発声すると、火の玉が球体に向かって飛んでいきます。当たると音が鳴って二つとも消滅します。

f:id:Takyu:20160714232900p:plain


うまく表示や制御を工夫すると、魔法を出すような表現ができます。

HoloLensで使うと、現実と重畳できるので、これだけでも色々と可能性を感じます。


2016/7/19 追記

「NamamugiNamagomeNamatamago」を認識対象に追加してみたところ、認識してくれました!

そこで、「なまむぎなまごめなまたまご」と発声すると、このようにたまごが出てくるようにしてみました。
(サンプルプロジェクトには含まれていませんが、CortanaController.csに追加して手順通りビルドするだけで確認可能です)

f:id:Takyu:20160720000018j:plain


Cortonaの認識精度は相当高いですね。


2. 終わりに


今回、CortanaからUnityを呼ぶ原理を紹介しました。

今回の仕組みはUWPで動くので、HoloLensだけでなく、Windows10 MobileやDesktopで動きます。
(ちゃんと試してませんが、ソース側で言語設定を日本語にすれば、Windows10デスクトップでも使用可能なはずです)

VoiceSpeech.csをうまく改造すると、わりと何でもできます。認識率が高いので、呪文詠唱とか、これまでとちょっと違うゲームも作れそうですね。

UnityからCortanaの機能を使うサンプルプロジェクトを調べてみました

Unity UWP HoloLens

一通り目処がつきましたので紹介します。

以前、下記の記事でCortanaとUnityを連携させる方法を調べました。

magicbullet.hatenablog.jp

今回、ここで紹介した2種類のサンプルのうち、(1)を使う方法を解説します。

※(2)は未調査です。

続きを読む

アプリ開発者目線でHoloLensとMetaの違いを整理してみました

Meta HoloLens Unity UWP

最近MR/AR系の分野で注目を集めているのは、HoloLensとMeta2だと思います。

いずれもかぶることで、実世界に重ね合わせてCGや各種情報を見ることができます。

■HoloLensの使用イメージ

f:id:Takyu:20160624234512j:plain

■Meta2の使用イメージ

f:id:Takyu:20160625011303j:plain


イメージ画像だけを見るとできることはだいたい同じに見えます。

しかし、アプリ開発をする視点で見ると、細かいところが色々と異なっており、アプリ開発時はそれぞれの特徴を把握する必要があります。

そこで、いずれHoloLensやMeta2アプリを作る時の参考になればと思い、整理してみました。

続きを読む

Windows10 MobileのアプリをWiFi経由でデバッグする方法

UWP windows

HoloAcademyという、HoloLens用のアプリ開発チュートリアルページで見つけた方法です。

Windows 10 Mobileでもできたので、参考のため書いておきます。

手順

前提

Visual Studioで何らかのプロジェクトを開き、ビルドできる準備ができていること

確認した環境

Windows 10 Pro
Visual Studio Update2

(1) Visual Studioのアプリ実行ボタンを「Local Machine」から「Remote Machine(リモートコンピュータ))」に変更する

f:id:Takyu:20160621214445p:plain

(2) 「Remote Machine」をクリックし、Authentication Modeを「 Universal (Unencrypted Protocol) (ユニバーサル (暗号化されていないプロトコル))」に変更する。

f:id:Takyu:20160621214532p:plain

(3) 上記でWindows 10 MobileのIPアドレスを入力する

(4) Pairキーの入力画面を確認したら、Windows 10 MobileでPairキーを表示する。

Windows 10 Mobileで設定画面を開きます。下記は英語表記されてますが、もちろん日本語でも同様です。

[1]
f:id:Takyu:20160621215130j:plain

[2]
f:id:Takyu:20160621215141p:plain

[3]
f:id:Takyu:20160621215215j:plain

スライダをOnにすると、リモートでPCとペアリングする機能が有効になります。

有効にすると、「Pair」というボタンが出てくるのでタップします。

[4]
f:id:Takyu:20160621215304j:plain

このようなランダムの文字列が表示されます。これをVisual Studioに入力します。

これでDeployされるので、あとはリモートデバッグができます。



ちなみに、HoloLensもそうですが、Windows 10 MobileにはDevice Portalという機能があります。

これは、

Windows 10 Mobileの端末の状態

CPU使用率

・稼働しているプロセス一覧

・インストールされているアプリの一覧

などを、同一ネットワーク内のWebブラウザから見ることができる機能です。色々見られて便利です。

f:id:Takyu:20160621221119p:plain


使い方は簡単で、先ほどPairingの設定をした画面にあるDevice Portalのオプションを有効にするだけです。

有効にすると、ユーザ名とパスワードの入力を求められます。これはMicrosoft Accountとは別もので、任意の言葉にします。

あとは、同一ネットワークの中で、PCのWebブラウザからhttp://と入力し、先ほど作ったユーザ名とパスワードを入力すると、Windows 10 MobileのDevice Portalを開くことができます。

【解決:別記事参照】CortonaとUnityの連携方法

UWP Unity

2016/7/2 追記

(1) の動作確認ができました。
本記事はメモとして残します。別の記事で動作確認する方法を記載しましたので、以下をご確認ください。

magicbullet.hatenablog.jp

2016/6/21 追記

(1-1)を更新しました。ただし、未解決は変わらず、です。

続きを読む

Structure Sensorの新しい空間認識技術「Bridge Engine」について

StructureSensor

前回は、Structure SensorのアプリをUnityで作る方法を紹介しました。

magicbullet.hatenablog.jp

今回は、Structure Sensorの新機能「Bridge Engine」について調べた内容をまとめました。

Bridge Engineとは?

Structure Sensorの新しい空間認識技術の名称です。

Structure SensorのDeveloper サイトには、「Bridge Engine betaへの申し込みフォーム」があります。

f:id:Takyu:20160611101252j:plain

そもそも「Bridge Engine」て何だろうと思って調べたところ、より精度と追随性の高い空間認識技術であることがわかりました。

以下は2016年の1月に公開された動画です。


動画だけだと断定はできませんが、空間にあるオブジェクトを広範囲で認識しています。

Bridge Engineの特徴

6-DoF Tracking With Depth & Color

空間を三次元的に、かつ色情報ありで識別するようです。

Extension of Structure Sensor SDK

SDKXcodeのSceneKit、およびOpenGL ESベースです。(Unityについては言及ありませんでした)

βプログラムの開始と参加者

2016年3月頃から、限られた数社、または開発者にβプログラムを提供しており、彼らによっていくつかコンテンツが作られてるようです。

個人的には全部CGにも見えてしまうので、実際に作って試してみたいところです。


βプログラムに参加するには?

以下の条件を満たした上で冒頭の開発者フォーラムで連絡すると、参加できそうです。ただし、Access is limitedとあるので、関連技術があるとか自己アピールをしたほうがよさそうです。

・Structure Sensorを持っていること
・Bridge Engineを使ったアプリの案、または完成予定日を事前に提案できること
・Bridge Engineを使って作ったアプリをYou Tubeなどで公開できること
・A8チップ以上を搭載したiOSバイスを持っていること(iPad Air 2、Mini4、iPhone6sを含む)
・Bridge Engineの試用前に、NDAに署名できること

感想

冒頭の動画を見る限り、HoloLensのような空間認識が精度高く実現できそうなので、とても気になります。

ただ、HoloLensやMeta2で試したいことが増えてしまったので、Unityが使えない環境で開発をする時間が取りづらく、少し後になるかもしれません。

また情報が得られたら更新したいと思います。