Unity1Week お題「ためる」でゲームを作りました






https://unityroom.com/games/ebicochineal_unity1week202209

Unity1Week お題「ためる」

エビタワーという登山ゲームを作りました

jumpkingのようにジャンプして頂上を目指すだけのゲームです


E512TileMap

いつもと同じでE512TileMapという自作のタイルマップシステムを使いゲームを作ることにしました

このE512TileMapはUnity標準のタイルマップの開発が始まったのと同時期から作り始め

たまにいじったりだらだら作っていて

そのうちUnity標準のタイルマップシステムに乗り換えるつもりでしたが

Unityにタイルマップ機能が搭載されたのは発表から数年経っていたころでした

そのころには自作タイルマップの方もある程度使えるようになって愛着も出てきて捨てられず

今ではこのタイルマップを使ってのゲーム制作しかしていません


前回の参加の時の速度が環境によって変わるバグ

直したつもりでしたが

実際にプレイされているのを見ていないので不安でした

今回のプレイ動画を見て問題無いようでした

Update関数が自身のWebブラウザのフレームレートが60に固定されていてWebGLだとUpdateでも60固定なのだと勘違いしたのが原因でした

今回はFixedUpdateを使いKeyUpなどの入力処理はUpdateを使いました


今回作った山登りゲーム

ためてジャンプして登っていくだけなので

E512TileMap/SimpleCharacterControllerを少し修正してキャラクターコントローラーを作ってしまえば

ステージ作成だけで終わるので簡単に作れてしまいます

参加するたびに作るゲームが単純化してる感じが少しします

jumpkingはプレイしたことがありません

vtuberの配信で少し見たことがある程度の知識です


溜めすぎると真上にジャンプ

上の階の状態を確かめるのに必要そうだった

溜めるキャンセルも必要そう

溜めているときに他のボタンを押すのは少ししんどいので

真上にジャンプすれば無害だし2つ同時に解決できるのでこの方法にしました

ただそのせいで最大ジャンプが出しづらくなったので1よりも2よりも3の方がため時間が長いとかにした方が良かったかもしれない



難易度を下げるため軌道を可視化

ジャンプ軌道予測に顔から出るエビの尿だという設定を付けました

また「ためジャンプ」の以外にも「ためる」を使いたかったので

途中にオレンジジュースを配置しましたが

プレイした人にはマグマだとか油の「罠」に見えたようで上手く使ってもらえませんでした

このオレンジジュースで体にオレンジジュースを溜めると尿がオレンジ色になります

このオレンジ色の尿は背景に水色でも見ることができ

この塔の途中から壁が崩れているところがあるので飲まないと軌道が分からなくなるという感じです

体に溜めるという設定なので出しすぎると水色に戻ります

水色に戻った頃に到達していそうな階層は壁が抜けている個所も少なくなるようにしてあります

エビにライトが付いており壁と尿は光の影響をうけます

それによって尿が見えやすかったり見えづらかったりします

光りの影響をうけなくすることもできましたが遠いものが暗く見えなくなる感じも良かったので

光の影響はそのままにして壁が抜けているなら水色は最大に明るくし完全に見えないようにオレンジ色なら逆に暗くしてよく見えるようにしています


モバイルの対応

前日に余裕をもって完成しアップロードも終えスマホでも確認してみました

スマホで警告は出るもののプレイすることができ指定した解像度と違う解像度になってしまうらしく見えてほしくないとこまで見えていた

上の階が見えるとか

なのでモバイルの対応ついでにフルスクリーンの対応をすることにしました

まずレンダーテクスチャーにunityroomで指定した大きさと同じ解像度で出力してQuadオブジェクトにそれを張り付けて別カメラで映し画面サイズに応じてQuadのサイズ調整をしました

スクリプトをQuadに追加してサイズ調整します

float t = this.camera.ScreenToWorldPoint(new Vector2(0f, 0f)).x * -2f;

this.transform.localScale = new Vector3(t, t*0.5625f, 1f);

このままだと画面が横長すぎると不具合が出るので

float a = (Screen.width - (Screen.height*1.7777f))*0.5f;

float x = a > 0 ? a : 0;

float t = this.camera.ScreenToWorldPoint(new Vector2(x, 0f)).x * -2f;

this.transform.localScale = new Vector3(t, t*0.5625f, 1f);

あとは入力で画面の左側で移動と右側でためとジャンプを追加しました


バグ

エビ以外表示されないというバグがあるらしい

もしかなりの割合そうなってしまうならE512TileMapがさらにゴミになってしまうので様々な環境で試してみました

WindowsPCでブラウザ3種、UbuntuPC、Android5.0、Android9.0のChromeブラウザと知り合いにipadなどでも試してもらいましたがバグが発生しませんでした

とりあえずこれだけの環境で動くなら安心かなと思います

あとタイトルロゴで止まるのかゲーム画面なのかもよく分かりません

ゲーム画面だとしてエビが表示されるのに背景が表示されないということは

タイルマップの生成に失敗していそうなきがします

シェーダー関係もあやしいけどタイルマップとエビのシェーダーはほぼ同じなので確率は低そう


バグ2

画面のちらつき

プレイ動画を見ていたら自分のゲームだけちらつきが発生していた

おそらくモバイルに対応したときに使ったレンダーテクスチャーが原因だと思う

自分の環境や知り合いの環境では正常で再現できず

調べてもアンチエイリアシングオンだと発生するくらいしか出てこない

映像が乱れているというよりレンダーテクスチャーを張り付けたQuadが見えてない感じがした

UpdateでQuadのローカルスケールを毎回書き換えてはいるけど前フレームと同じ画面サイズなら問題ないはず






そういえば

Unity1Weekでよく使われるランキングの最大文字数の初期値が10文字なので名前が入らなくて

ランキングではebi5126を使っています


2022/09/25 マルチプレイ化

評価期間が終わったので他人の位置が分かるものをアップロードしたところセキュリティエラーが出た

unity2018なのでpun2を使用

プロトコルをWebSocket Secureにしないとダメらしい

TCP、UDPを選んでると自動てきにWebSocket SecureになるらしくてWebSocketにしてるとダメだったらしい

https://twitter.com/ebicochineal/status/1570919016813965312


コメント