のしメモ アプリ開発ブログ

Unityアプリとかロボットとか作ってるときに困ったこととかメモ

Cross Platform Native PluginsでXcodeのエラーが出た時の対処メモ

Cross Platform Native Pluginsを使っている状態のUnity5.6でiOSビルド後にXcodeでエラーがでるみたいです。

エラー内容
Implicit declaration of function 'ConvertToNSString' is invalid in C99 CPNPCloudServicesBinding.m.
Implicit delcation of function 'FromJson' is invalid in C99 CPNPCloudServicesBinding.m
Implicit delcation of function 'CStringcopy' is invalid in C99 CPNPCloudServicesBinding.m
Implicit delcation of function 'ToJsonCString' is invalid in C99 CPNPCloudServicesBinding.m
Implicit delcation of function 'NotifyEventListener' is invalid in C99 CPNPCloudServicesBinding.m

参考リンク

解決方法がCross Platform Native Pluginsのフォーラムに記載されてあります。
http://www.voxelbusters.com/products/native-plugins/forum/index.php?p=/discussion/946/unity-5-6-compile-errors-in-xcode

手順

1. 下記からPostProcessBuild.csをダウンロード

https://drive.google.com/file/d/0Bx892xLNWQ7sbmJDbktzTXhEYnM/view

2. 対象のプロジェクトのファイルを置き換え

Standard Assets/VoxelBusters/NativePlugins/Editor/PostProcessBuild.csをダウンロードしたファイルに置き換え

3. ビルドし直す

ビルドし直すとエラーがなくなります。

Actions on Googleを始める

Actions on Google

音声を使用した会話形式のアプリが作れるツールです。
Google Homeのアプリもシミュレータで確認しながら作れるみたいなので試してみました。

サンプルではAPI.AIのNode.jsを使ったアプリで、Firebaseを使ってデプロイできるようになっています。
今回は公式のGetStartedをやりながら手順をメモしたものになります。

参考資料について

公式のGet startedを参考に進めていきます。公式マニュアルを読みながらの方が、最新で細かいところも書いているのでおすすめです。
https://developers.google.com/actions/get-started/


実行手順

1. ActionsのプロジェクトとAPI.AIエージェントを作成

(1) サンプルアプリケーションを導入

https://github.com/actions-on-google/apiai-facts-about-google-nodejs
サンプルのフォルダを作成します。(今回は`SampleAction`というフォルダ名とする)
`SampleAction/FactsAboutGoogle.zip`
`SampleAction/functions/index.js`
というディレクトリ階層になるように配置します。

(2) Activity controlsから権限を編集

Chromeの下記の権限を有効に設定します。
・ウェブとアプリのアクティビティ
・音声アクティビティ
・端末情報
編集はこちらから。
https://myaccount.google.com/activitycontrols?pli=1
f:id:noshipu:20170717025103p:plain

(3) プロジェクトとAgentを作成する

a. Actions on Google Developer Consoleに移動します
b. `Add Project`から`FactsApp`を選択しプロジェクト名をSampleActionと入力、regionをJapanに設定し、`Create Project`を選択します。
c. `Use API.AI`から`CREATE ACTIONS ON API.AI`を選択しActionsをビルドします。
d. API.AIコンソールが立ち上がり、Agentの画面でそのままSaveを押して情報を保存します。

(4) FactsAppのAgentにサンプルプロジェクトを復元

a. 左側のナビゲーションバーにある、Agent名の右にある歯車アイコンを押します。

f:id:noshipu:20170717141911p:plain

b. `Export and Import`タブを選択します。
c. `RESTORE FROM ZIP`を押し、先ほど配置した`SampleAction/FactsAboutGoogle.zip`を選択します。
d. RESTOREとテキストボックスに入力し、`RESTORE`ボタンを押し、その後`DONE`ボタンを押します。

2. fulfillmentをデプロイ

firebaseを使用してデプロイします

(1) Node.jsをインストールする

後述しますが、v6以上のインストールが必要です。
※Node.jsのインストール手順説明は飛ばします。

(2) firebaseクライアントソフトをインストー

npm install -g firebase-tools

(3) Googleアカウントでログイン

下記を実行しGoogleにログイン

firebase login

(4) firebaseをActionsのプロジェクトに紐付けます

a. {PROJECT_ID}を確認する

`firebase list`を叩くと先ほど作ったプロジェクトのIDを確認することが可能です。
先ほどの管理ページからも確認することが可能です。

b. プロジェクトに紐付ける
cd SampleAction/functions
firebase use {PROJECT_ID}

`Now using project {PROJECT_ID}`と表示されたら成功です。

(5) デプロイ開始

下記コマンドを実行します

cd SampleAction/functions
npm install
firebase deploy --only functions

=================実行時にエラーが起きた場合=================
実行時にNode.jsのバージョンが古く、下記のメッセージが表示されたのでアップデート。

Error: There was an unknown problem while trying to parse function triggers. Please ensure you are using Node.js v6 or greater.

Node v8.0.0だと下記のエラーが

TypeError: Cannot read property 'pipesCount' of undefined

v8.1.4にあげて再度実行すると成功しました。
=================実行時にエラーが起きた場合ここまで=================

デプロイに成功するとこのようなメッセージが表示されます。

✔  Deploy complete!

Project Console: {PROJECT CONSOLE URL}
Function URL (factsAboutGoogle): {FUNCTION URL}

{FUNCTION URL}をコピーしておく

(6) URLを設定

a. API.AIのページに戻る
b. 左側のナビゲーションバーから`Fulfillment`を選択し`ENABLED`にする
c. URLの入力を求められるので{FUNCTION URL}を入力し`SAVE`を押す

f:id:noshipu:20170717152129p:plain
Basic認証を設定することも可能です。ローカル開発機を使いたい場合はngrok等のツールを使えば可能だが、脆弱性に気をつける必要があるとのことです。

3. シミュレータを動かす

(1) API.AIのページの左側のナビゲーションバーから`Integrations`を選択

(2) Actions on GoogleのカードがOnになっていることを確認

f:id:noshipu:20170717153312p:plain

(3) そのままカードをクリック

(4) そのままカードをクリックして`TEST`ボタンをクリック

`TEST`ボタンが存在しない場合は`AUTHORIZE`ボタンを押してから`TEST`をクリックします。
`TEST`を押すとAgentがアップロードされてシミュレータでテストできるようになります。

(5) `Test your Assistant app`の項目の`VIEW`をクリック

(6) シミュレータのWebページが開くので、`START`をクリック

(7) シミュレータのチャットのテキストボックスに入力

`talk to my test app`を入力するとこんな形でメッセージが返ってきたらサンプルの実行成功です。

Welcome to Facts about Google! Do you want to hear about Google's history or do you want to hear about its headquarters?

(8) アプリを使ってみる

下記のメッセージを送るとIntentを呼び出して試せます。
`talk to Facts about Google about cats`
`talk to Facts about Google`
`talk to Facts about Google about Google"s history`

日本語の設定ができたりもするので、Zip内の設定ファイルを編集して色々試してみようと思います。

何か間違いや、問題があればお気軽にコメント等ください。

GoogleTangoアプリ「Makebox AR」をリリースしました

GoogleのAR技術Tangoを利用したARアプリをリリースしました。

無料です!
play.google.com


アプリの内容はこんな感じ

簡単に3Dモデルを作って、UnityとかUE4にモデルデータを持ってくることが可能です。

実装について

アプリ自体はUnityとTangoSDK(Unity版)で作られています。

ラッキング周り等もあまり意識せずに実装できました。
ラーニングして読み込ませて等をやるとちょっとめんどくさそうですが、簡易的なARならカメラのPrefabを置くだけレベルでさくっと実装ができる感じです。

UnityでのシンプルAR実装方法はこちらから - Unity How-to Guide: Simple Augmented Reality
https://developers.google.com/tango/apis/unity/unity-simple-ar


Unityでスマホ開発したことある人であればuGUIの操作や、Raycastを飛ばして~など、変わらない形なので、簡単にTangoアプリが作れると思いますので、是非作ってみてください!

GooglePlayでTango対応端末にだけリリースする

Tangoの機能が使えるかの判定をアプリ内で行うことができるので、そちらで確認し処理を分岐することも可能ですが、
今回は、Tango端末にのみ配布できる設定をする方法を紹介します。
手動で制御もできなくもないですが、今後の端末追加等を考えると今回の設定をしておいたほうがよさそうです。

やり方

Manifestファイルに1行追加するだけで対応端末が自動で絞ることが可能です。
AndroidManifest.xmlを編集
"application"に"user-library"を1つ追加するだけ

    <application ...>
        ...
        ...

        <uses-library android:name="com.projecttango.libtango_device2" android:required="true" />
    </application>
</manifest>

ビルドしたapkをアップロードすると...

サポートされている端末が3つになります。(2017/06/20現在)
f:id:noshipu:20170620193248p:plain


逆に言えば、この設定をしてしまうと、Tango搭載端末にしか配布できないので、Tangoが使えない場合の処理を入れたapkを配布したい場合はこの設定は外してしまって問題ないです。