非同期処理

Go Walk!のフリーズ問題で、起動時処理を計測したらそれほどでも無かったが、そもStart()が走る前でフリーズしてんじゃね?と、試しにシーンのオブジェクトを非表示にしたら(多少引っかかりはあるものの)さっくりと(スカイボックスだけのシーンを)表示した。めんどくさがらずにひとつひとつちゃんとビルドして検証しよう。

で、シーン表示後にオブジェクトを表示したら、フリーズ現象発生。そうか。んじゃあ、オブジェクトを分割して小出しにしていけばいいんじゃないか?そういやゲームとかでも開始時に地形や建物が順繰りで出てきたりするのがあるもんなあ。にしても読み込むオブジェクト数とか分かるんだからOS側でいい感じにしてくれりゃあいいのになあ。

ということで、非同期処理をお勉強しないといけない。こちとらビジネスアプリしか作ってきてないから、非同期処理とかWebアプリのフロントエンドでサーバ問い合わせするくらいしか書いたことないし、その辺の知識が全く無い。なのでググって色々読んでこうとするが、脳がイヤイヤ期に入ってしもうた。(;´Д`)

なんか歳取ってから、単純に新しい事をやるのは楽しめるが、新しい知識の習得が必要になると、脳がいやがる傾向が強くなってきた。そうしてイヤイヤ期に入ったら、もう文章を読もうがビデオで見ようが、頭に何にも入ってこない。おいー。

ちょっとでもとっかかりがあれば無理繰り広げていけたりもするけど、UnityでC#で非同期とか、指先すらも引っかかるとこが無いからなあ。うーむ。

そうしてチラチラ見ながらようやくちょっといけそうになったんで、こっから頑張ろう。ってもう8月かー。後2ヶ月で1年かー。

Affinity Designer、ようやく慣れた

Adobe CCを解約して、ビデオはDavinci Resolveですっかり用を足せてて、というかDavinciの方が機能十分な上にサックサクで分かりやすく、結果的に変えて良かった。今後4Kとかも扱うなら有償版を買えばいいし、マジ助かる。

イラレもフォトショも無くなってみたら、日常的には細々したツールで保管できる程度しか作業が無く、いざというときはAffinityでカバーできて、特に困らず。操作性が全く違うんでややこしい処理の時は調べる面倒があるが、逆にイラレやフォトショには無い機能に助けられたりして大変よろしい。

そんな感じで、これまでAffinityはあまりがっつりとは使ってこなかったが、アプリ作成で資料をまとめてかないと追っつかなくなってきたんで、ここ最近はAffinity Designerを使い込んでた(資料は昔からイラレで作ってたん)。それしかなければまだ体は覚えてくれるもんで、基本操作はすっかり慣れた。

Unity用のメモ

機能的にはAdobe CCの十分代替どころか、こっちのがサックサクで、M1ネイティブやし、Mac版も買っておけば良かったと思うほど(保有ユーザー向けにでも、また半額セールやってくれんやろか)やが、Adobe CCユーザーには、設計思想が違いすぎて学習コスパが超絶悪いし、ワークフローに適合させるのは至難の業やろし、イラレファイル読めるけど文字組がオリジナルすぎて使いもんにならないんで、あまりお薦めできない残念感。

Web用や、ちょっとした印刷用のベクターアプリとしてはほんまお薦め。コスパ最強。

IBM Plex Sans JP

先日、IBMからオープンソースフォント「Plex」の、ゴシック体のファミリーフォント「IBM Plex Sans JP」が公開された。

WinとMacでドキュメントを共有してから、いまいちしっくり来るものが無いままに、最近は源ノ角ゴシックを使ってたが、欧文がパラけてて落ち着かない。いっそWin用にヒラギノとか買うかーとも思ったが、コスパ悪過ぎんよなあ。

で、ファミリーのフリーフォントは毎度のことでお試ししてみたら、ごっつ良かった。字形が源ノ角ゴシックに似てるがこっちのがすっきりと抜けてて読みやすい。そして欧文がスマート。

これはありがたい!と思ってWinにも入れたら、Onenoteでリストに出ない。Mac側で指定すると、表示はされるんで、リストアップされないだけっぽいが、指定できないのは困る。

しかし、ありがたくもTrueTypeフォントもあって、こちらを入れるとリストにも無事出てきて使えた。

クリッピングした記事とか、Win系の書体はどれも読むのにあんま適してないが、このフォントはしっかり読めるし、ファミリーで見出しからキャプションまで使い分けれて非常に良い。助かる。

Go Walk!の申請結果

再提出が5日だったか。審査に23日かー。どっかに4週間とか書いてたが、人員増やした分で5日ほど短縮されたか。

結果は赤と黄が1点ずつで順当にリジェクト。(;´Д`)

64bitコンパイルが通らんかったんで32bitで出したのが黄色の指摘で、とりあえずこれはスルー。間違いなくアウトの赤は「起動後、フリーズするから直せ」と。

起動時のブラックアウトが長いんで、ローダーのシーンを作って、そっから非同期でシーン読み込みするようにしたが、シーンの読み込み中にローダーのシーンがフリーズする。その後ちゃんと開くから、まっいっかー、とそのまま出したが、「エクスペリエンスを阻害すんな」やと。

ローダー止めたとしても画面が黒いままでフリーズしてるんやろなあ。

めんどくさくてちょっと2日ほど見なかった事にしてたが、ようやっとで重い腰を上げて、長大な初期設定をコルーチンも使わずやってるのが原因だろうと計測したら、言うほどでも無かった。って事は原因はシーンがデカすぎるからか。もう今更軽量化も無いからなあ。まるっぽ作り直しになるしかないのか。

Go Walk!開発日誌

前回の続き

フリーウォーク版のロジック改修

ロジック改変がちょーめんどくさそうなんで、すっかりやる気が出ない所に4連休になったんで、週明けの今日月曜まで結局何もせずにダラダラと過ごした。

ダラダラしてると脳みそが勝手に改修場所の検討や、ドラフトでロジック仮組みとかをやってくれて、そうして荒組みのロジックとオリジナルのソースとのDiffを(脳が勝手に)比較してる時に「ピーン!」と来た。あれ?ロジックそのまんまでいけんじゃね?

改修概要

オリジナルは加減速処理をした値をコースのトレーサーのspeedパラメータに突っ込んでるから、AddForce()で加速した速度magnitudeをspeedと比較してVerocityの値変えたったらいいんじゃねーの?と思った。それならこないだ書いた停止処理はそのままで、加速処理してるとこだけ変えればいいやん。

答えが出たんでプロジェクトを開いてソースを修正。改修は固定値でAddForce()したらパラメータに応じて速度調節って内容で、10行未満(!)の変更。ちょっと書きながら「これでいいんか?」と疑心暗鬼に囚われつつ、コンパイルエラーが出ないんでそのまま実行。PCVRでかぶると・・・ええ感じやがな!

画面キャプチャを見たら、PCVRのせいか、ステップのブレが激しかった。それでも実際やってるときは全くブレを感じないのは実際歩いたり走ったりする時と同じ。

シーンにTerraWorldで作成した京都某所を使ったが、設定がVR用じゃ無かったんで、オクルージョンカリングがおかしい。きっちり作ったシーンを歩き回りたい。

しかし、フィーリングはかなり自然。その辺をうろうろしてる感すげえw。結局スピードコントロール的にはオリジナルと全く同じなんやけど、移動が自由なだけで印象が全然違うなあ。

そして発見。オリジナルは向きを変えずに勝手に方向が変わるんで、個人的には足踏みよりスクワットの方がしっくり来てた。でも、フリーウォーク版は向いた方向に歩くんで、断然足踏みの方がいいし、自然。歩いてうろついてる感がすごい。おもしれえ。

ということでさっくりチューニングが出ちゃったんで、これを使った何かを考えよう。単純にうろついてた時に、向こうの方で怪獣とかがうろついてて、見つかって追いかけられたりしたらちょーおもろ怖いやろうなあ!と思ったんで、AI仕込んだ怪獣とかうろつかせて、どうやって逃げる/倒すかを思索する方向でちょっと考えてみよう。

太って若返る

親が特に目立った副反応も無く2回目のコロナワクチンの接種を無事に終えたっていうんで、じゃあ久しぶりに飯でも食いに行こうと。

しかし相変わらずのこのご時世。というか緊急事態宣言開けでまた感染者が増加するというパターン。ワクチン接種しても感染はするし、こちとら1回目の接種すらまだなんで、用心で家で食う事にして、手料理を振る舞った。

それでちょっと久しぶりにがっつりと食ったら、1日で2kgも太った。(;´Д`)マジカー

最近寄る年波でさらに増加しようとする体重を、なんとか均衡状態に抑え込んでたのになあ。

使ってる体重計はスマホで受けて体組成を色々表示するやつで、最後に年齢が表示されるが、2kg増えた年齢は、今までで一番若かった。

太って若返るか、痩せて老化するか。やな選択だなあ。

Go Walk!開発日誌

もろもろうまく行かず

Go Walk!のエベレスト版を破棄にして、ちょっと宙ぶらりんになった。Go Walk! Fantasy Islandの申請の返事もまだ無い。

なので、Quest版をデチューンしてGo版にしよう。重いところが分かったんで、Go版でも現状のQuest版がそれなりに動く気がする。

新規プロジェクトをGo環境に設えて、Quest版から必要なファイルをコピー。各種調整してビルドするが、どうにも動かない。スクリプトを外すと動くんで、どっかが引っかかってんだろうけど、なんせUnity上では何の問題もなく動く。いちいちビルドしては実機で動かしてダメーを繰り返して、途中で折れた。めんどくせー。

フリーウォーク版の開発

しょーがないんでペンディングにして、Fantasy Islandで全ての生き物が出てから後の仕掛けを仕込んでおこうかと思ったが、ふと、フリーウォーク版をやってみようと思ってたのを思い出した。

そもGo Walk!は、運動不足解消の為の日々のルーチンなので、普通にウォーキングやランニングするのと同じくで、決まったコースを回るのがいいと思ってる。目的がはっきりして分かりやすいし、達成感と成長が実感できるだろうと。

でもこの「ステップで移動する」っていうのが意外とスマートで、途中であれこれ考えた、RPG風やFPS風のアイディア(コースを走るには逸脱が大きすぎて止めた)を、そのまんまRPGやFPSでやればいいんじゃねえの?と思ってたんで、実際やってみようと。

新しいプロジェクトに適当なシーンアセットとGo Walk!システムを入れて、とりあえずGo Walk!システムから、コースを走る為のパーツを全て取っ払って、AddForce()で動き回る様に変更。

AddForce()使うのが久しぶりすぎて、すっかりコツも何もかも忘れてて、えらく苦戦した。落ちていくからシーンアセットのプレファブにコライダーが無いんだと思ったら、単に自分のコライダーをdisにしてたり(表示があるから気付かんかった)、どこまでも飛んでいくなあと思ったらForceMode.Impulseにしてなかったり、やったのにまだ飛んでいくなあと思ったら、パラメータ未設定でunknownでエラーになってて落ちてたり(見かけ上は動いてるんで分かりにくい)。いちいちビルドして試しては「あれ?」ってなる繰り返しめんどい。

いやまあ、Quest使ってデバッグすればいいものをってなもんなんで、そもそもをめんどくさがってさらにめんどくさくなってるという。

まあそうしてなんとか動かすと、あーやっぱこれは面白いわ。手を使う仕組みをちゃんと実装するともっと分かり易いなあと衝動に駆られるが、進むチューニングを先にやろう。それにはアセットのデモシーンはかなり狭すぎたんで、10km四方くらいのシーンを作成。そうしてチューニングするも、あまりフィーリングが合わない。むずかしい。

なるほど、FoceMode.Impulseじゃあダメな。進む速度をロジカルにコントロールしなくっちゃあこれは無理だわ。うーん、これはこれでボリュームが増していくなあ。

エベレストは破棄

エベレスト版のGo Walk!は、結局新しいシーンでビルドしても起動できんかった。あれ?もしかしてUnity 2020かXR PluginだとGo Walk!システム動かんのか?と思って、めんどくさいが新規でプロジェクト作って適当なシーンのアセットで組み込んでみたら、動いた。よかった。

POLYGON Adventure – Low Poly 3D Art by Synty

そうか、もうこのEverestのプロジェクトは、どっかしら壊れてもーたんやな。動かん原因を探ったら新たな知見を得られるやろけど、そういう知見が活かされる機会はまあほぼなかったりするwんで、もうこのプロジェクトは破棄ーっ。

ここ最近エベレスト登山の動画や写真を漁りまくってたら、結構岩やら雪やらがゴツゴツしてるし、なんなら一番近いゴラクって村(?)からエベレストまでが、デカい氷河伝いに行くダイナミックなトレッキングコースで、そうした一連のコースをしっかり作り込んだ方がより楽しそうなんで、また改めて挑むことにしよう。

まあでも単純にバカでかい山に登るというのはすごく楽しいというのは分かった。

PCVRでは動くんで3回くらい登った
遠景はパノラマ

いっそ検証用に作ったプロジェクトで次のやつ作ろうかな。

エベレストあかんな

修正したビルドの再申請も無事済んで、Quest上で更新されたアプリの実行も問題なし。後は結果を待つだけなんで、Go Walk! エベレストを再開した。が、相変わらずQuest 2本体では実行できない。

とりあえず、PCVRでは実行できたが、Quest 2ではほんの一瞬メニューが表示されるだけで、どうやっても落ちる。うーん。

地形がでかすぎるからなあ、とオクルージョンカリングをかける。が、しばらく枠が生成された後、落ちた。(;´Д`) そうしてから、オクルージョンカリングを何度かけてもエラーが出る。

とりあえずと、オクルージョンカリングの消去を実行したら、Unityが落ちた。(;´Д`)キャー

うーん。訳分からん。何回か試すも変わらずでどーしようもない。とりあえず前回歩いた時に地面にめり込みまくってたんで、コースを修正する。そしてまたビルドして実行するが、同じように落ちる。うーん。

オクルージョンカリングのエラーでググると、まさに同じ議論が。メモリが64GBのマシンでもあかんかったとか無理やーん、と思いながら見ていくと、最後に「Occlusion Areaコンポーネント使うたらええで」と。

どう使うんや?と思ったが、とりあえずでオブジェクトにセットしたら、サイズを入れるだけっぽい。数値を入れるとオブジェクトに枠が付いてるので収まるように入力。そして焼くと、無事焼けた!なるほどー。小さいのは適当にしてくれるけど、でかいのは範囲を指定せんとなんかー。

でかい範囲をオクルージョンカリングで焼く場合は、
Occlusion Areaコンポーネントで範囲を指定するといいぞ。

しかし、エベレストだけでもこれで、周辺地形は更に広い。これは無理やん。なのでパノラマに焼こうと、いくつかのパノラマキャプチャアセットを試したが、今回Unity 2020にしちゃったせいで、どれも対応せず。orz 尽く手詰まり。_ノ乙(、ン、)_

Occulus Integrationに付いてるキャプチャは動くが、範囲が狭すぎて(いや、対象がでかすぎるだけか)使いもんにならず。

なので、2019で開いてキャプチャしようかと、プロジェクトをコピーしたが、かなり時間がかかりそうなんで放置して、そのまま忘れて翌朝気付いたら、まだコピーが終わってない!見たら、ファイル数が200万オーバー!コピーをキャンセルして見ていくと、Occlusioinとかいうフォルダに200万オーバーのファイル。なるほどオクルージョンカリングを最初に焼いて失敗したファイルがゴミで残ってたんか。数十分がかりやったがなんとか削除した。再度焼くためにオクルージョンカリングの消去を実行すると、今回は無事完了。ベイクを100/5でやってたんで、10/5で実行し直すと、時間はかかったが無事成功。

じゃあこれでオッケーか、とビルドして実行するも、変わらず落ちる。_ノ乙(、ン、)_

とりあえず実行だけでもできんと心が折れそうなんで、地形を全て非表示にしてビルド。さあこれでできるだろうと実行すると、メニューも何も出ないまま点滅が続く。

もうだめかも分からんね。

申請、再送信。

Oculus Quest/Quest 2「ステップ」用VRアプリ「Go Walk! Fantasy Island」の、申請後発覚した不具合を修正した。

水のマテリアルやシェーダーは色々持ってるけど、元のイメージに近い奴は、全部が全部URPのみ対応。いや、URPに変えればいいし、変更できるかの検証は済んでるけど、どーもURPの細かい部分の絵作りが好きになれない。なので結局、スタンダードシェーダーで水っぽくしたやつを作って差し替えた。残念。

んで、App Labの申請の返事が全然来ないんで、新たにビルドをアップして差し替えたり出来んのかなあ、と管理画面を見ると、「申請」ボタンが「申請をキャンセル」ボタンになってた!なんや管理画面からキャンセルできるんかー、と速攻キャンセルして、新たなビルドで再申請。

しかし、8日経っても返答無しって・・・いつまでかかんねんな・・・_ノ乙(、ン、)_