今回はフランスで開発してる時に「ぐえっ」ってなったUnityの外部リソース読み込みの話をしたいと思います。
フランスで開発している際にフランス語の音声とテキストデータを現地で調達しようという話になって、そのために外部ファイルからリソースを読み込むように設計する必要がありました。
そのため、テキストデータはC#のSystem.IOを使ってCSVファイルを読み込み、音声データはResources.Loadを使用して読み込んでいました。
この時点で何が起きたか分かる方は分かると思うのですが、ビルドして_DataフォルダにResouecesフォルダを作って音声ファイルを放り込んでも再生してくれませんでした。
しかもそのことに気付いたのが展示中で「フランス語版音声再生されないよ!?どうするの!?」となり、急遽ユニティエディターを立ち上げてなんとか対処しました。
原因として以下の2つの理由が挙げられます。
1つ目のファイルの中身が同じだったというのは確認作業の時に音再生できているしいいだろうとなってしまい、どのフォルダからロードしているのかを確認をしていませんでした。
2つ目の「Resoueces.Loadはビルドインデータからしか読み込まない」は、公式に記述されていて驚きました。
調べてみたら対処法として、バイナリデータとして読み込むやWWWクラスを使うが候補として出てきました。
バイナリーデータを扱うのは難しそうだったので今回はWWWを使用して実装しました。
[sourcecode language=”csharp”]
//WWW===================================
www = new WWW("file:///" + Application.dataPath + "/Resources/Japan_/" + count.ToString() + ".wav");
while (!www.isDone)//ロードが完了するまで次に進んでほしくないため
{
Debug.Log("チョットマッテネ");
}
Narration[count] = www.audioClip;
Debug.Log(count+" : "+www.isDone);
/*======================================
//Resources.Load************************
Narration[count] = Resources.Load("Japan_/" + count.ToString());
if (Narration[count] == null)
{
Debug.Log("ぬるりJ" + count);
}
//**************************************
*/
[/sourcecode]
一応比較としてResources.Loadでの実装も並べておきます。
WWWのほうのWhile文はロードが終わっていないのに再生しようとしていたので、ロードが完了するまで処理を止めるようにしています。
こんな感じで実装することができました。もうこんな危ない橋を渡ることが無いと思うので、使う機会はないと信じたいですね…
]]>パリにいる間はルーブル美術館に行ったりマルシェに行ったり(ハコスコで)凱旋門に行ったり(ハコスコで)エッフェル塔に行ったりしました。
というのも実はLavalVirtualでの展示用の実装が終わってなくて凱旋門とエッフェル塔に行く余裕が無く、メンバーにThetaSを渡して「これで写真を撮ってきてくれ! したら俺も観光にいける!」なんてバカなことをやりながら生活しました。
凱旋門とエッフェル塔にいけなかったのでRexさんにお土産のコインを貰いました。とてもうれしかったのですが、一緒に来ているのにお土産を貰うなんて「あれ?」ってなりました。料理も自分たちで作ったりして色々あったけど楽しい5日間でした。Monoprix様ばんざ~い!
Lavalに来てからは毎日のように食事会があってまったく気が休まりませんでした。
基本的に内向的なので他人との食事は落ち着かず味もよく覚えていないみたいな事がほとんどなのでなかなかに辛かったです。
そんでもってまだ展示用の機能追加が終わってなかったりしていて胃へのダメージが半端なかったです。
ただ、シーフードタワーはおいしかったです。
展示の方はなかなかに盛況で黒山の人だかり状態(髪の色が黒だけではないので黒山ではない)になっていました。
展示中に実行ファイルをUnityエディターからexe切り替えたり、フランス語のローカライズ版を作成したりなど今考えると頭おかしいこともしていました。
休憩中は他の展示を見ずに外の公園でヤギを見たりベンチで寝たりとまったりしていました。ちょっと勿体無い気もしましたが、へとへとだったのでこれはこれでよかったと思います。
あとACM SIGGRAPH賞を受賞しました。次の海外は7月末からロサンゼルスで展示です。行くかどうかは未定ですが…
レンヌに行ってからはどたばたしながらモン・サン=ミシェルに行きました。
ここではドラクエよろしくマッピングしながらThetaSを使ってバシバシ写真を撮りました。が、時間が無く全部を見て回ることはできませんでした…悲しみ…
帰国してからどれぐらい写真を撮ったのか見てみたのですが150枚しか撮ってませんでした。こんなんじゃVR作れないよ…と思っていたらThetaS君の中から写真が続々と出てきてなんだかんだで600枚近く撮ってました。これを整理してハコスコで見れるようなアプリケーションを作りたいですね!
全体を通して英語がかなり通じたのでそこまで苦労することが無く、フランス人の方もみんな優しくて特に不便なところも無く、色々ありましたが快適で楽しいフランス旅行でした。
ベイビーチームもひと段落着いてそれぞれが別の方向へと歩いていくと思います。が、まだ終わりではないのでこれからも応援の方よろしくお願いします。
]]>次に多重化のWeb化の引継ぎを行いました。PlayCanvasを使って実装するのですが、PlayCanvasというかJavaScriptが思っていた以上に曲者でだいぶ苦戦しました。あと初めてシェーダーを書いたのですが思っていたよりも簡単でした。過去にOpenGLという名のシェーダーっぽい何かを授業でやったのですが、その授業よりは遥かにわかりやすかったです。JSも授業でやってはいるのですが相変わらずちんぷんかんぷんでした。
あと意外だったのは多重化の実装は割と少ないコードで動いていることです。研究を引き継がなかったとしても実装はできるようにしておきたいですね。
多重化成功!
次にゲークリの個人製作最終課題ですね。ゲークリは授業とチーム開発の2つがあってこれは授業のほうにあたります。授業ではUnityについてやっていました。ただ結構マニアックな内容が多く去年の授業とはまた違った勉強をすることができて非常に良かったです。
で、この授業の最終制作がTPSゲームを作るというものなのですが、課題の提出2日前からの時間が非常に有意義というか効率的だったのでメモとして残しておこうと思います。
まず2日前の時点での状態がこんな感じになっています。
驚きの白さ!
この時点でできていることは
ぐらいでした。
これをあと2日でゲームにもっていくために行ったことは
こんな感じで作ったものがこちらになります。
正直な感想としては「よく間に合ったな」ですね。戦略を練るのとタスクを細かく細かく分けていく事の重要性を再認識しました。というか本来であればこうならないようにこつこつとやっていけって話ですよね。
公開するかどうかは未定ですがちょっとづつ手直ししていけたらなと思います。
最後にゲークリチーム開発の闇ですね。今回僕はサポートチームとしての参加で、開発にはがっつリ参加していないのですが、先生の要望で集中制作期間にマネージャーみたいな感じで参加することになりました。第三者としての参戦なので客観的にゲークリを観察できてなかなか面白い体験でした。
この1年で結構成長したなぁ…
文章が長くなってしまったので今回はこのへんにして、この件はまた別の記事にまとめたいと思っているのでそこでがっつり書きたいと思います。
Untiyの基本的なこと
C,C++,Javaの基本的なこと
できるけどできればやりたくないこと
Arduino
センサープログラミング
できないけどやりたいこと
モデリング
絵を描く
Raspberry Pi
Unityを使ったネットワーク対戦
Androidゲーム制作
AR開発
できないこと
視覚デザイン
という感じです。結構移り気が激しいのでやりたいことがどんどん出てきて手が足りない!なんて事がよく起こります。しかも余り長続きしないので性質が悪い。
今まではベイビーチームとして居候みたいな形で勝手に占拠していて肩身が狭い(物理的にも)と感じていたのですが、これからは研究室を広々と使えますね。やったぜ!
ブログ名の由来ですがベイビーチームで物事を理解した時に使われていたネタをそのまま使いました。ドラクエのステータス上昇みたいな感じで成長しているのが読み取れていいんじゃないでしょうか。
まあでもアホ丸出しのタイトルなのでもしかしたら変更するかもしれないです。
このブログは研究のこととかUnityのこととか技術的なことを書いていければなと思います。
研究テーマはまだほとんど決まっていないのですがARをやりたいという希望をうっすらと抱いています。
しかし、セミナーやベイビーの時と違って記事のタイトルを考えるのがめんどくさいですね…
まぁどうにかこうにかがんばっていこうと思いますのでお付き合いのほどよろしくお願いします。