こたつにっき

Unityで遊びつつメモとか書きます

GoogleHomeに買い物メモを印刷してもらう

社畜までのカウントダウンに震える今日この頃、

久々に"GoogleHome欲"が出てきたのでGoogleHomeを弄ろうと思います。

家から離れたくないでござる

 

作るもの

 買い物に行く際に買わなきゃいけない買い物メモ、どうやって覚えてますか?

メモ帳や手のひらにペンで書いたり、今時はスマホのリマインダーに入れたりと色々やり方があると思います。

一人ならまだ当人が買うものをリストに残しておけばいいですが、家庭単位で見るとみんな欲しがってるものがバラバラで共有し難いです。

さらに、買い物に行く人も変わるので

出かけようとする家族に向かって「〇〇買ってきて!」と声をかけることも多いですよね。

 

そこで、全部GoogleHomeにメモを取ってもらおう!

と言うのが今回やる事です。

f:id:kotatu99:20180325223859p:plain

利用イメージとしてはこんな感じです。

各々GoogleHomeに向かって欲しいものを喋ります。

すると、プリンターで買い物メモを印刷、買い物に行く人がそのメモを持って行けば家族全員の買い物が1度に済むという訳ですね。

デモ見たい人はこちら

youtu.be

GIFver

f:id:kotatu99:20180326003249g:plain

作ろう

もうちょっとシステムの中身を考えましょう。

今回は普通のプリンターだとメモのたびに1枚ごとに印刷されてしまうので、レジのレシートのような印刷ができるサーマルプリンターを使います。

僕は既に持っているサーマルプリンターを使いました(↓これ)。

f:id:kotatu99:20180325230128p:plain

このタイプはシリアル通信しかできないので、USBで接続できるのが買えればそちらが楽だと思います(現在は売り切れでした)。

ではこのプリンターへメモを送ることを最終目標…つまりプリンターとシリアル接続してるラズベリーパイまでメモの文字列を遅れたらミッションクリア!

道筋はこんな感じになりました。

f:id:kotatu99:20180325225618p:plain

大抵ここを通してぶち込んでおけばなんとかなるIFTTTさんと、

僕は今回初めて使うBeebotteでラズパイまでデータを届けます。

BeebotteはラズベリーパイがIoT向けのプロトコルMQTTによってデータを購読(Subscribe)しに行くため、データのブローカーとなるらしいです。

まるで意味がわからんぞ

uniRxとかもPublish/Subscribe型のモデルを使ってましたね(確か)

だからなんだって話ですけど。

kotatu99.hateblo.jp今までだと買い物リストとかのデータはFirebaseとかGoogleスプレッドシートに入れていたので今回もそっちで行くかな〜とか思ってたんですが、Beebotteが結構簡単で良かったです。

印刷

 ネットワークで色々やる前にまずサーマルプリンターのセッティングをしていきます。

ラズベリーパイへサーマルプリンターをプリンターとして認識させる部分はこちら

https://learn.adafruit.com/networked-thermal-printer-using-cups-and-raspberry-pi

Raspberry Pi 3はUSB接続じゃないとダメだよみたいなことが書いてあって(今回使用してるのはPi3)肝を冷やしましたが普通にシリアル接続でいけました。

ここまでで、英字と画像印刷はできます…が、日本語は文字列渡してはい印刷!という訳には行かず文字化けするので

文字列の画像化をしましょう。

指定のフォントファイルを使って描画した文字列を画像ファイルに保存 - 強火で進め

python3に書き換えて、フォントをNotoSansCKJPにしたものがこちら。フォントファイルはスクリプトと同階層に置いてください。

gist8e0e6fdb94d4dac4732c5d4ef32c2276

日本語が無事印刷できたら後はGoogleHomeがIFTTTでBeebotteに送信したメモを読みに行くだけです。

メモの送信・取得

GoogleHomeからBeebotteへのメモの送信はこんな感じ。

 

f:id:kotatu99:20180325234328p:plain

これで

OK Google, 買い物メモ じゃがいも!

と言えば

買い物メモにじゃがいもを登録しました。

とGoogleHomeが返してくれます。

ではBeebotteとラズベリーパイの通信を組み合わせましょう。

MQTTの部分はこちら参考にしました。

qiita.com

gist6f93333441ab569076f8b96c5eac79d4 

完成!

youtu.be

 

話しかけると…

f:id:kotatu99:20180326003249g:plain
印刷完了!

f:id:kotatu99:20180326003446j:plain

これで買い物に行けばバッチリだぜ!

 

GoogleAssistantを経由してるので、スマホのAssistantアプリからでも買い物メモが印刷可能です。

という訳で、スマートハウスとかに比べハイテクではないですが、身近に役立つんじゃないかなあと思うGoogleHome活用法でした。

サーマルプリンターが身近じゃない?知らんな…

最近はスマートスピーカーブーム?も落ち着いて来た気がしますが、まだまだGoogleHomeで遊んでいきたいと思います!

それでは!

Unity1Week 「当てる」に参加しました

2018年初のUnity1Week、参加しました。

Unity 1週間ゲームジャム | 無料ゲーム投稿サイト unityroom - Unityのゲームをアップロードして公開しよう

 

作ったゲームはこちらです。

当ててんのよ悩殺ステルスアクションゲーム | 無料ゲーム投稿サイト unityroom - Unityのゲームをアップロードして公開しよう

だいたいこんなゲームです。

当ててんのよ悩殺ステルスアクションゲーム

 

イデア出し

お題は「当てる」という事で

お題が発表されてからモンハンをやりつつモンハンをしていたら水曜日でした。

これはマズイ。モンハンをやりながら思いついたアイデアを見返します。

f:id:kotatu99:20180304154434p:plain

(ほぼダジャレじゃねえか)

色々考えたんですがまあ「当ててんのよ」しか無いですよね。

他の参加者の方も「当ててんのよ」に言及はしているものの、作ってる気配はないんですよ。

照れてるんですか?

これはもう僕が作るしかないという使命感に駆られたので「当ててんのよ」で行きます。

一時期シャレオツにしたいとか言ってましたが本能に従うまでです。

当ててんのよへの道

当ててんのよを知らない方に説明すると、

あててんのよ (あててんのよ)とは【ピクシブ百科事典】

あててんのよとは (アテテンノヨとは) [単語記事] - ニコニコ大百科

あててんのよ」とは、主に女性が胸を男性の背中に押し付けつつ言い放つ台詞の一つである。 

 はい。そういう感じです。

ひらがな表記が正しいみたいですが(実際元の漫画でも「あててんのよ」だし)

今回はお題とも合わせて「当ててんのよ」で表記します。

当ててんのよに必要なもの

  • 当ててんのよキャラ

そういうわけで「当てる」キャラが必要だ!

ゲームジャムで皆さんお世話になるお馴染みUnityちゃんをインポートしてみます。

f:id:kotatu99:20180304160053p:plain

ふむ。

 

ちょっと足りないかな…?

 

いや、何がとは言いませんが、大まかな方針は「当ててんのよ」で敵を倒していくというもので行こうと思ってるので

「当ててんのよ」が「映える」必要があるんですよね…。

他に使えるキャラクターはいないかな…?

 

ImagineGirls – シンギュラリティ娘!

ImagineGirlsの3Dモデルシリーズ は自由に遊んでいただけるほか、一般向けからアダルト向けまでのVRアプリの制作にもお使いいただけます。ぜひご活用ください。

お?

f:id:kotatu99:20180304160655g:plain

おお…?

 

早速このVienneさんをインポートしてみます。

f:id:kotatu99:20180304160921p:plain

これは・・・・・

 

合格!!!

 

別にUnityちゃんでは物足りないとかそういう意味ではなく好きだしただゲーム内容的に少しアダルトになる可能性があるのでライセンス条項的にもアダルト可のモデルを利用した方が良いのではないかと考えた結果であり決してUnityちゃんが物足りないという事じゃないのでそこは何卒ご容赦頂きたく

 

  • 当ててんのよモーション

自力でモーションを作る前にMixamoで使えそうなモーションがないか探してみました。

見つけた「Kiss」のモーションを入れた結果がこちら。

f:id:kotatu99:20180304161825g:plain

100点!!!

 

もうこれ眺めるだけのゲームで良い気がしてきたのですが、

この前作ったゲームでメタルギアチックな要素を入れてたのもあり、

ステルスゲーを作りたくなりました。

ちょうどステルスゲームのアセットが出ていたのをUnity AssetStoreまとめさんで見かけていたのでベースはこちらを使います。

The Great Fleece

Unityの新機能Cinemachineをまだ使っていなかったので横スクロールでCinemachineのドリーカメラ(路線?台車?カメラ、100メートル走とかで選手の横で走ってるアレ)

を使って行こうと決定。

 

こんな感じになりました。 

 ちなみに敵の捜索範囲はこんな感じです。

ガバガバです。横すり抜けられます。

f:id:kotatu99:20180304163842p:plain

でも良いんです。

このゲームは「当ててんのよ」をして欲しくて作ったので。

気持ちよく当ててんのよするために余計なストレスは要らない────

探索システムが面倒だったからだよ

感想

まず反省点

  • キャラクターコントローラーの自作は無謀

今回アセットのTPSコントローラーやCharacterControllerを使わずに作りました。

しんどかったです。敵キャラの挙動に手が回らなかったのはこのせいでもあります…GameJamでは使えるものは使った方が良いですね…

  • 色々と雑

チュートリアルやら画面表示が雑!中身や絵作りに関しては退化してるだろ!

という感じでゲームループを作りきるのが遅かったですね。反省です。

 

ですがまあリビドーを発散できたので楽しかったです。自己満足感は高いです。

 

当ててんのよ悩殺ステルスアクションゲーム | 無料ゲーム投稿サイト unityroom - Unityのゲームをアップロードして公開しよう

以上当ててんのよ悩殺ステルスアクションゲームを作った振り返りでした。

シャレオツなゲームを作れる日は来るのか。

実質無料でバーチャルユーチューバーになる方法

バーチャルユーチューバーを見ていたらバーチャルユーチューバーになりたくなるのが

必然ですが、

如何せんモーションキャプチャやらVRヘッドセットやら

何やらかんやら揃える余裕がない。

 

そんな貴方へ送る記事です。

 こんなのを作ります。

f:id:kotatu99:20180304153959g:plain

キラッ☆(アイキャッチ)

バーチャルユーチューバーになるには

まずバーチャルユーチューバーに必要なものを考えてみます。

  • 表情がつく
  • 口が動く

最低限必要な部分はここだと思います。

Live2DとかFaceRigを使っている人達の部分ですね。

  • 手が動く
  • 全身が動く

3Dモデルの人達がやっている部分、ここを実現しようとするとVRヘッドセットやモーションキャプチャを使ってる人が多く、まあ予算15万〜ぐらいでしょうか。

 

が、僕はお金がないので無料でやろうと思います。

作り方

用意するもの

機材は私物なので実質無料です。皆さんのご家庭にもあると思います。

今回やることは

表情→Webカメラからの画像認識

手→Leapmotionでの操作

この2点です。

というか、もうやってる人います。

FaceRig無しでも中の人(二次元)になりたい!【Unity × OpenCV × Dlib × Live2D】 - Qiita

mswim2000189.hatenablog.com

 

ここ見てやればいいです。

では無くて、

皆さんUnityのアセット

OpenCV for Unity - Asset Store :$95

Dlib FaceLandmark Detector - Asset Store :$40

この2点を買われて作っているのですが、

計$135!

そんな金はねえ!無料でやってやるぜ!という記事です(ここが本題)

作ったものをTwitterにあげた所、アセットですか?という質問がちょこちょこあったので…

無料です!

DlibもOpenCVもそのまま使うなら誰でも使えますからね。

お金の無い僕は何とかして無料で済む方法を探しました。

 

ではまず顔認識の為にDlibとOpenCVを入れます。

Dlibの高性能な顔器官検出をMacでさくっと試す - Qiita

入れました。

こちらの顔認識プログラムを使うとWebカメラから顔の特徴点座標の位置を取れます。

qiita.com

次に今回は顔の向きも調整したいので

Head Pose Estimation using OpenCV and Dlib | Learn OpenCV

こちらの顔向き推定のプログラムを借ります。

f:id:kotatu99:20180304143740j:plain

そうするとこちらの画像のように

鼻先から向いてる方向へ線が伸びます。

この線の端点の取得と、顔の特徴点座標、座標から判断した瞬き中か否かを判定してくれるプログラムがこちら。

dlib_webcam_face.cpp · GitHub

Unityへ情報を送る

dlib_webcam_face.cpp · GitHub

このプログラムでは顔認識した情報をUDPでUnityへ送っています。

JSON形式ですね。picojsonを使っています。

このデータをUnity側で受け取れればアセットを買う必要がないという事ですね。

gist1bd9860794434f35d2725f83b82e9987

 受け取りのスクリプトはこちら。

ここのparameterにJSONが垂れ流されるので、デシリアライズして情報を取り出せば

Unityで動かし放題!

 

(ヘーベルハウスって言われたけど確かに似てる) 

顔向きの鼻先から伸びていた端点が球体の位置で、その向きに顔(箱)が向くようにしています。

次にせっかくなので腕も導入します。

最新のOrionMacで使えないので(使わせて…)、v2.3系が最新?だと思います。

Release Leap Motion Core Assets v2.3.0 · leapmotion/LeapMotionCoreAssets · GitHub

サンプルをそのままぶち込みます。

 やっつけだな

 

後はOBS等のキャプチャソフトでウィンドウやらゲーム画面と重ね合わせれば完成。

 出来ました。

 

まとめ

アセットすら買わずにバーチャルユーチューバーになる方法をお伝えしました。

アセット買えばいいだろという方じゃあ金くれよもいると思います。

もちろんアセットを買えばUnity単体で完結するので、WebGLやアプリ化がそのまま出来るメリットがあるのですが、

自分のPCでバーチャルユーチューバーになるだけならPC(+Leapmotion)のみで実質無料(顔のキャプチャだけなら本当にノートPCのみで可能)で出来るよというお話でした。

 

ちなみにバーチャルユーチューバーになる方法とか書いてますが別に活動する予定はありません

美少女モデルが出来るかヘーベルハウスからお話が来るか僕が美少女ボイスになったら考えようと思います。無料でVtuberになりたい人の参考になったら幸いです。

 

ちなみに僕は電脳少女シロちゃんが好きです。

それでは。

www.youtube.com

 

電脳少女シロちゃんのTPSゲームを作った話 - こたつにっき

www.youtube.com

 

電脳少女シロちゃんのTPSゲームを作った話

明けましておめでとうございます。(3月だよ)

 

巷ではバーチャルユーチューバーなるものが話題沸騰ですが

僕のお気に入りは何と言っても電脳少女シロちゃんです。

www.youtube.com

 

彼女の魅力を語るのは他の方にお任せするとして、

このシロちゃんにはある特徴があるんですね。

 

それが

エコーロケーション🐬

 

 何の事か分からないかと思いますが、イルカみたいな鳴き声を出すんですね。

youtu.be

僕も初めてイルカの声を出すって聞いたときは???でしたが動画見れば分かります。

それで、エコーロケーションとかソナー音とか言われているんですが

もう一つシロちゃんはAKM(アサルトライフル)好きという一面もあって、

www.youtube.com

 

じゃあもうこれは

エコーロケーション×AKM

でゲーム作るしかないだろうとなった訳です。

丁度モデル配布も始まっていたところなので。

 

エコーロケーションというか、ソナー探査はMGSVのアクティブ・ソナー

www.youtube.com

とかアーマードコアVのスキャンモードみたいなイメージで(なぜか両方ともV…)

隠れた敵をスキャンしてぱいーん!(銃撃音feat:シロ)行くゲームという方針に決まりました。

 

さて、要のスキャンの実装ですがこれはShaderの神(と僕が勝手に呼んでいる)

keijiro氏のSonarFxを使いました。ありがとうございます。

github.com

 

 

エフェクト自体はそのまま使ってます。

波が進んだ地点まではスキャン済みとして、ターゲットのShaderを障害物があっても透けて見えるShaderに入れ替える事で壁越しで確認ができるようになりました。

入れ替え後のShaderはこちら参照。

qiita.com

これでもう"売り"のギミックが出来たので後はオーソドックスなTPSを組み上げるだけ!

Assetバンバン使うぜ!

 

TPSコントローラー!そのまま!使いやすい!AIMモードのカメラも付いてくる!

assetstore.unity.com

街!シロちゃんの配布モデルがアラビアン?な感じだったので雰囲気合ってそうな物をチョイス!

余談ですがサンプルシーンそのまま使おうとしたらTerrainが5個ぐらい重なってて激重でした。軽量化が必要かも。

assetstore.unity.com

AKM!こいつがなきゃ始まらねえぜ!

assetstore.unity.com

銃のマズルフラッシュ!着弾のエフェクトも!ドンパチ系はこれ1個あれば十分なぐらいの詰め合わせです。オススメ。

assetstore.unity.com

敵!タレット!

WCE - Turret - Asset Store

 

これを混ぜ合わせてぽいぽーいと完成……の予定だったのですが、

丁度作ってる最中にライセンス規約が公開されました。

「電脳少女YouTuberシロ」ライセンス規約

その中に「暴力的な表現」へ使わないようにとの文言が有ります。

 

暴力的な表現…AKMで動くもの全てを撃ちまくるのは暴力的か否か…

迷った挙句方向性を修正することにしました。

シロちゃんには同僚?先輩?のバーチャルユーチューバー「ばあちゃる」が居るのですが、彼を救出するという目的に変更しました。

www.youtube.com

これでAKMをぶっ放すのも問題ない…はず。

 

こうしてシロちゃんのゲーム「アサシンキュイード」は出来上がりました。

www.youtube.com


自分の詰め込みたいものを詰め込めて面白かったです。

動画も多くの人に見て貰えて嬉しい!

開発ではちょっとShaderも触って、難しさと可能性を色々感じました…。

 

(何故か?)シロちゃんにはゲーム作ってる人が沢山集まっているのでそこも目が離せません!

シロちゃんゲームリスト↓(もっとあるかも)

電脳少女シロのゲームを作ってみた - ニコニコ動画

電脳少女シロちゃんのシューティングゲームを作ってみる 第1回 - ニコニコ動画

https://twitter.com/hrl_ds/status/966413655557357568

 

世界一AKMの似合うバーチャルユーチューバーシロちゃんをよろしくお願いいたします。

f:id:kotatu99:20180304171804p:plain

Google HomeでDiscordBotを操作してみる

この記事は

Kogakuin Univ Advent Calendar 2017 - Adventar

5日目の記事です。

 

さて、GooleHomeを買ってからしばらく経ちましたが皆さん如何お過ごしでしょうか。

kotatu99.hateblo.jp

 

最近はAmazon Echoが予約始まったり予約したのに注文できなかったり色々あるそうですね。

そんな流行りのスマートスピーカーでまた遊んでいきたいと思います。

作るもの

突然ですがDiscordって知ってますか?

discordapp.com

グループ版Skype、Slack知って居る人ならばボイス版Slackというかまあそんな感じの

グループチャットアプリです。

ちなみにDiscordアドベントカレンダーもあるよ。見てね。

 

僕はニンテンドースイッチを買ってからというもの、

口の悪い人達とDiscordでボイスチャットしたりしているのですが

このDiscordにはBotという機能があるんですね。

 

LINEのりんなちゃんとかSlack使ってる人はそのままSlackのBotみたいなものを想像して頂ければ大丈夫なんですが、

要するにグループ内にお手伝いロボを設置できるんです。

定番なのは音楽Botですかね。

f:id:kotatu99:20171205192849p:plain

こんな感じでチャット欄Botへの指示を打ち込むと(今回は「!play 〇〇(流してほしいBGM)」)、

Youtubeやニコニコで検索して流してくれます。

 

ん?

 

チャット欄に指示を打ち込む…?

そうなんです。ボイスチャットアプリなのに、

Botへの指示はテキストでやらないといけないんですよね。

 

Discord使ってる時って大体がゲーム中🎮だしコントローラー握ってるしでキーボード打つのが難しいんですよ。

かといって音声認識をDiscord内で行うってのも無理があるし仕方ないですよね。

こんな時にBotへの指示を代行してくれるアシスタントがいたらなあ…

 

f:id:kotatu99:20171012173919j:plain

あっ!!!

 

f:id:kotatu99:20171205193507p:plain<ココニイルヨ!

 

いました。では作りましょう。

 

出来上がったものはこちらです。せっかちさんはこれ見て下さい↓


DiscordBotへGoogleHomeで指示

DiscordBotの作成

先ほど音楽Botを例に挙げたのですが今回はBotも自作します。

作るのはスプラトゥーンランダム武器Botです。

またスプラトゥーンかよ

 

どういうものかと言いますと、

スプラトゥーンでは友達同士で試合が出来る「プライベートマッチ」

という機能があるのですがそこで使える「Aさんはこのブキ!Bさんはこのブキ!」

とランダムに武器の振り分けをしてくれるBotです。

同じ武器ばっかじゃ飽きますからね。

 

今回はDiscord用Rubyライブラリのdiscordrbを使いました。

qiita.com

他にPythonのライブラリもあります。こっちを選んだのは何となくです。

Ruby使ったことのない僕にも使えたのでDiscordBot作るだけならRuby知らなくても大丈夫だと思います。

 

導入は色々記事があるのでそちらを見て貰うとして、

ソースコードをドン

gistc32956bad75c48f0916fd4e8c9d91d9d

読み込むcsvの中身はこんな感じ。カンマ無いのにcsvとは

f:id:kotatu99:20171205195938p:plain

後はRubyファイルを走らせると

f:id:kotatu99:20171205195835p:plain

f:id:kotatu99:20171205200130p:plain

Botくんが出てきます。

この時点でもうチャット欄にコマンドを打てば…

f:id:kotatu99:20171205215943p:plain

コマンドを打った人と同じチャンネルに居る人へブキを配布してくれます。

これでBot部分は完成!

次はこのコマンドを音声入力でGoogleHomeにやってもらいましょう。

IFTTTの作成

みんな大好きIFTTTでDiscordにコマンドを打つ…んですが、

IFTTTがまだDiscordと連携していないので、webhook経由でDiscordと繋ぎましょう。

nta8blog.blogspot.jp

こちらはTwitter投稿→Didcordへ投稿ですが、

Twitter部分をGoogleHomeのGoogleAssistantへ変えればOKです。

チャンネルを右クリックし、チャンネルの編集

f:id:kotatu99:20171205202521p:plain

f:id:kotatu99:20171205202525p:plain

webhooksからwebhookを作成。

 

ここからIFTTTの作業になります。

NewAppletからIfGoogleAssistantの"Say a simple phrase"でDiscordBotを呼び出しするフレーズを設定します。今回は「ディスコード 武器」にしました。

他にも「discord 武器」「ディスコード ぶき」などを設定しておいて認識ズレを減らしておきます。

Thatwebhookを選択します。

 

f:id:kotatu99:20171205202426p:plain

Bodycontentがチャットに書き込まれる内容なので、

ここでBot呼び出しのコマンドを設定します。

完成!

以上でセッティングは完了!早速呼び出してみましょう。

OK,Google

f:id:kotatu99:20171205220522j:plain

ディスコード、ぶき!

f:id:kotatu99:20171205213652j:plain

ディスコードに投稿しました」と返してくれます。f:id:kotatu99:20171205213700j:plain

IFTTTが発火!

 

Discordに来ました!(動画のキャプ荒くてすいません)

f:id:kotatu99:20171205214208j:plain

チャンネル内に居る人へ

f:id:kotatu99:20171205214220j:plain

f:id:kotatu99:20171205214038p:plain

botがブキを指定してくれました!

 

動画はこちら


DiscordBotへGoogleHomeで指示

 

これでまた一層スプラトゥーンが楽しくなるのではないでしょうか!

Discordの技術的な記事が中々無いので僕も頑張っていきたい所ですね。

盛り上がれ盛り上がれ…

 

 

ではまた!

アドベントカレンダーはまだまだ続く…

Kogakuin Univ Advent Calendar 2017 - Adventar

(スマートスピーカーアドカレは埋まってました)

スマートスピーカー Advent Calendar 2017 - Qiita

Unity1週間ゲームジャム「Space」に参加しました

Unity1Weekのおかげで何とか1ヶ月に1個記事が書けています。

こたつの守(かみ)です。

 

今回もunityroomさんの1週間ゲームジャム、Unity1weekに参加したので

どんな感じだったか書いていきます。

 1週間ゲームジャムとは月曜に発表されたお題からゲームを作り、

日曜の夜までに完成させるというとても楽しい(苦行)イベントです。

 

僕が作ったゲームはこんな感じです。

相手の太陽に向けてを撃ち出し、先に破壊した方が勝ち!(何故かデモプレイで負けてる…)

f:id:kotatu99:20171122193727g:plain

SpaceStarShooter | 無料ゲーム投稿サイト unityroom - Unityのゲームをアップロードして公開しよう

プレイしてね!

 

過去のUnity1week参加レポはこちら

それでは開発の足跡を辿ります。

イデア出し

お題発表が14日だった訳ですが、僕は前日の日曜日デジゲー博を観に行ってお疲れでした。

なので月曜日の進捗はありません。ついでに火曜日も進捗はありません。

CoDの新作をやっていた気がする…

 

お題の「Space」をぼんやり頭に入れて気がつけば水曜日です。

今回、僕にはある目標がありまして、ちょくちょくゲームジャムの感想で書いたりしてるんですが

それはゲームの画面を(この文字がもうダサい)すること!

 

何でこう思うようになったかと言いますと、まずこちらのゲーム画面見て下さい。

f:id:kotatu99:20171122200532p:plain

夏の花火 彗星の夜 | 無料ゲーム投稿サイト unityroom - Unityのゲームをアップロードして公開しよう

 

青木ととさんが前々回Unity1weekで作られたゲームなんですが、

ですよね?

何ならもうApp Storeのトップ画面に出てくるような雰囲気出てますよね?

 

で、続いて僕が作ってたゲーム

f:id:kotatu99:20170627173418p:plain

積み将棋 | 無料ゲーム投稿サイト unityroom - Unityのゲームをアップロードして公開しよう

 

はあ・・・

 

ため息しか出ませんよ。

いや、ゲームの中身はそこそこ面白いんですけどね?(自画自賛)

3:7ぐらいで面白さに関しては負けてますが、

グラフイックに関しては3:700ぐらいの差がついてしまいました。

 

 そういう理由で今回は青木ととさんのエモグラフイックに近づけるよう試行錯誤をしていました。 

実際やったのはご本人の記事を参考にしただけなんですけどね。

qiita.com

 

このPost Processing Stackという神アセットを使えばいい感じになるそうです。

実際いい感じになりました。神。

assetstore.unity.com

 

お題の「Space」要素として引力を導入し、

星を飛ばすプロトタイプを作りました。

f:id:kotatu99:20171122201834g:plain

この星のブラー(発光)分かりますか?コレが欲しかったんです。

f:id:kotatu99:20171122202217p:plain

 青木ととさんのゲームと似てる気がしないでもないですが、(花火を星に変えただけでは…)

これはリスペクトです。

ネットワーク要素

次に以前からやりたいやりたいと思って中々面倒で手を出せなかった

ネットワーク要素をついに実装します!

 と、言ってもリアルタイムで対戦とかそういうものではないのですが…

 

今回は1対1で星を設置し、目標に向かって射出するゲームとしました。

なので、敵側の配置を同じプレイヤーの配置から選出されるようにします。

 

自分の星: 敵の星:

f:id:kotatu99:20171122204425p:plain

 射出コース設定

f:id:kotatu99:20171122204753p:plain

この自分の配置とコースの設定が、

どこかでこのゲームをプレイするプレーヤーの敵として出てくる訳です。

NCMBの設定

最初はGoogleのデータベース、firebaseを利用しようと思ったのですが、

iOSAndroidしかUnitySDKが無く、webGLで出来なさそうだったので(出来るのかな?誰か教えて下さい…)

 

調べてみると、ニフティクラウドなら出来るらしい!

そういえば昔OSCでニフクラの人にUnityで使えると教えてもらったな…

みたいな事を考えながらNCMB(ニフティクラウド mobile backend)の採用を決定!

 

ランキングの例があったので、そちらを弄って…

[Unity]NCMB REST APIを叩くぞ!(WebGL向け)|杏z 学習帳

github.com

 

こんな感じのデータがリアルタイムで来るようになりました。

posx,yがプレイヤーの設置した星の位置、vecx,yが射出方向(ベクトル)です。

f:id:kotatu99:20171122205955p:plain

ただ、データの構造を例えば

StarListの中にstar1{pos_x,pos_y,vec_x,vec_y}みたいな形にしたかったんですがデータは1次元配列しか出来ない…?

みたいなので星全部のx座標の配列,星全部のy座標の配列...みたいになっています。 

UniRX導入

もう一つの新しい試みとして、いいぞいいぞとは噂に聞いていた

UniRXを使ってみました。

assetstore.unity.com

 

難しいかな〜と思ってましたが大体ドキュメントととりすーぷさんの記事を見ながらやれば大丈夫でした。

qiita.com

 

使って見た感じ、いいですね!

今まで状態に応じてUpdateの処理変えるときは当然Updateの中に分岐を書いてたんですが、

それを別々に書いたり、あるいはゲームマネージャーの中のStateをUniRXで見ておいて、

変更時に何か処理をしたりと言った事が出来るのでいいです!

 

先日配信された「どうぶつの森 ポケットキャンプ」に採用されるだけありますね!(宣伝)

 

ただ、複数人チームでのゲームジャムとかだと処理が混乱するかも知れませんね…

中々全員が使えるとは思えませんし…布教しておけば大丈夫かな!?

 

完成

学園祭と期間が被っていた事もあり(言い訳)最終日締め切り1時間前に駆け込み提出しました!セーフ!

タイトルも3秒で考えました。「SpaceShooter」だと絶対被るだろ!と思ってたら案の定被ってたので

「SpaceStarShooter」とSを一個追加しておいて良かったです。略称はS3です。

f:id:kotatu99:20171122193727g:plain

SpaceStarShooter | 無料ゲーム投稿サイト unityroom - Unityのゲームをアップロードして公開しよう

 

プレイしてね!

 

感想

とにかくラスト2日での追い込みで完成まで漕ぎ着けたので、

ボリュームが足りないわチュートリアル無いわタイトルロゴないわと散々なんですが、不思議と満足感があります。

それは映像がちょっといい感じだから。

 

そろそろ一発当てたい欲も湧いてきたので、

今までのUnity1weekでの成長の成果を見せていきたいですね。

 

今までに作ったゲームはこちらから↓

kotatu_km | 無料ゲーム投稿サイト unityroom - Unityのゲームをアップロードして公開しよう

 

それではまた!

次はアドベントカレンダーかな?

Google Homeをスプラトゥーンアシスタント化する

f:id:kotatu99:20171012120639j:plain

Google Home買いました

 

遊んでいきます。

 

 **追記**

パート2をqiitaに書きました

qiita.com

何を作る?

正直Google Homeが提供しているリマインダーやら「」とかは

外に出ない僕には関係がないので僕に役立つアシスタントに改造して行きます。

 

ところで、音声入力が必要な場面っていつだと思いますか?

当然手が使えない時ですよね。

つまりゲーム中こそ最もGoogle Homeが役に立つ時

 

ゲームといえば

f:id:kotatu99:20171012121343j:plain

スプラトゥーン2 | Nintendo Switch | 任天堂

 

当然イカです。

という訳でスプラトゥーンアシスタントに改造して行きます。

 

 

勝敗の登録

まず、お手軽にIFTTTを使ってGoogleスプレッドシートへ勝敗を入力します。

GoogleAssistant → spreadsheetのIFTTTを作ります。

 

f:id:kotatu99:20171012122946p:plain

 

IFTTTの使い方はQiitaにいっぱいあるのでそちらを参考に

qiita.com

 

 同様に負けた時用のApletも作ります。

これで

勝利 スプラシューター」「負けた キャンピングシェルター」等と話せば自動的にGoogleDriveのスプレッドシートに勝敗が記入されるようになりました。

登録されると「イカ登録完了」とGoogle Home(以下ほめちゃん)が喋ります。

 

f:id:kotatu99:20171012123447p:plain

 

これで勝敗の登録は完了です。

 

勝率の呼び出し

次に、Googleスプレッドシートで計算した武器毎の勝率を呼び出してもらいます。

目標とする実装↓

 

僕「勝率 〇〇(武器名)」

 

ほめちゃん「〇〇の勝率は××パーセントです」

 

この機能はGoogleAssistant+IFTTTでは賄えないので、

スプラトゥーンアシスタントAIをDialogflow(2日前に名前がAPI.aiから変わったらしい)で作ります。

 

dialogflow.com

 

 

これを使って入力を解析(と言ってもブキ名を取得するだけ)し、webhookで外部へ流します。

そこでスプレッドシートの内容を取得し、JSONレスポンスでAI(Bot)へ戻せばBotが受け取った情報を元に喋ってくれるという仕組みです。

 

こんな流れです。

f:id:kotatu99:20171012130549p:plain

 

Dialogflowのセッティング

エージェントの登録等はこちら参照。

tokibito.hatenablog.com

 

"Intents"で入力の受け取りや失敗した際の返答を登録します。

今回はユーザーの発言が「勝率」「成績」だった場合にBotが反応し、

勝率の後に続く部分を"weapon_name"として入力で受け取ります。

f:id:kotatu99:20171012131826p:plain

 

入力として受け取る単語は"Entities"から登録しましょう。

都市名や日時はデフォルトでシステム側が用意してくれていますが、

残念ながらスプラトゥーンのブキデータベースは無いそうです。

f:id:kotatu99:20171012132128p:plain

 

"Fulfillment"でwebhookの送信先を設定します。

今回はherokuを利用しました。

f:id:kotatu99:20171012132542p:plain

"Intents" の "Use webhook"に忘れずチェックを入れておきましょう。

ついでにDefaultの返答には検索が失敗した際の文章を入れておきます。

f:id:kotatu99:20171012133200p:plain

webhookを作る

いよいよAIから受け取った"weapon_name"を元に勝率を返すwebhookを作れば終了です。

ai-kenkyujo.com

こちらの中で使われている

天気をyahooのAPIから取ってくるwebhookを参考に。

以下(イカだけに)がgspreadを使ってスプレッドシートの情報を取得しJSONで返すサーバーです。

gist3a0b28daaa8187c52e306d3ff0f39ef9

 

gspreadの使い方はこちらから

 

書けたらテストしてみます。

コンソール右側に入力すればテキストでテストが可能です。

f:id:kotatu99:20171012135115p:plain

「勝率 スプラシューター」と入力すると…

 

f:id:kotatu99:20171012134832p:plain

勝率が出てきました!

 

ちなみにJSONはこんな感じになります。

f:id:kotatu99:20171012135239p:plain

 

 

完成

youtu.be

 動作はこちらの通りです。

とりあえず自分がほしい機能は実装できました!

 

現在、GoogleAssistantからDialogflowで作ったアプリを呼び出さなければいけないので、登録と呼び出しが別なのですが

次はこれをDialogflowで一括にまとめようかなと思ってます。

 

まだまだGoogle Homeで遊んでみたいですね。

ちなみにGoogle Homeは定価14000円がビックカメラで買うと2台2万円なので割り勘して買いました。お得です。

 

みんな買おう!

f:id:kotatu99:20171012173919j:plain

 

良きスプラトゥーンライフを!