
unity1week「ない」に参加、『サキュバストーコの暴走キックボード』【備忘録】
unity1weekが2024年12月23日(月) 0時〜2024年12月29日(日) 20時の間、開催されたので参加しました。今回で10回連続10回目の参加となります。
お題は「ない」でした。
今回の自分の作品は「サキュバストーコの暴走キックボード」というキックボードを暴走させて車の間を抜けていくゲームです。1プレイ3分くらいで終わりますので、よかったらプレイして下さい。
以降は今回の備忘録と反省点になります。スクリプトは別記事に書きました(途中まで無料)。
1.日ごろからアイデアを貯めておいたので助かった
自分は日ごろからゲームのアイデアを考えるようにしており、キックボードで暴走するゲームのアイデア自体は前からありました。
少し前には実験を行い、記事も書いております。
ゲームジャムは、いくつかストックしているアイデアの中で、お題に合いそうなものを作っています。最悪1つもなければ1から考えますが…。
ちなみに今回のお題「ない」ですが、電動キックボードは、モラルが「ない」利用者が目立っていますので、本作を作ることにしました。
ちなみに自分は東京都心で、スマホを見ながら電動キックボードの運転をしている人を見かけたことがあります。しかも車道の端ではなく、中央の車線でした。あれは心底びっくりしました…。
また私事ですが、unity1weekの前の週は病気で寝込んでおりました。
そのため仕事が溜まってしまい、unity1week1、2日目は仕事を片付けるためほぼ作業はできず、3日目は謎の腹痛で作業が出来る状態ではありませんでした。ですが、アイデア出しが省略できたおかげで、数時間の遅刻でなんとか投稿することができました。
2.かわいい自作VRoidが出来た
試作段階ではピエロが主人公だったのですが、「ピエロでは引きが弱すぎるし、自分のテンションがあがらない」ということで、可愛い女の子にしました。
VRoidは何回か触っていて、自作だとVRoidっぽさが抜けないことが悩みでしたが、以下の記事を参考にすると、とても可愛く出来ました。
自作VRoid、叡智なお姉さんです!
…以下がお姉さんを作った素材です…。
こだわりは肌テクスチャに鼠径部の影を描き足したことです!
現在ロマンシング サガ2 リベンジオブザセブンを絶賛プレイ中なのですが、シティシーフ(女)の鼠径部があまりに魅力的なので参考にしました!
リベンジオブザセブンはロマサガ2原作をやっていた自分も大満足の神リメイクなので、皆さんやりましょう。


腰のサイズもかなり大きめになっております!
なおVRoidの動かし方は過去記事と参考記事をを参照してください。
3.3D無限ランゲームを作ってみる
3D無限ランゲームは作ったことがなかったので、以下のサイトを参考に作りました。
個人的にこだわった点については以下の2点です。
(1)生成する地面のPrefabのY回転を0または180にした

キャラクターの前方○○m以内に地面のPrefabがない場合は生成されるという処理をしていますが、その際生成するPrefabのY回転は0、180のどちらかがランダムで生成されるようにしました。
どちらの回転のPrefabが表示されるかにより、全く違う印象になります。
(2)車が生成される位置に左右の幅を持たせた
車に関しては、3車線のうち1車線か2車線に車を生成するようにしています。しかし、常に車線の真ん中に車を生成すると、道路の端っこか車線境界線の上を走り続ければ延々と走り続けられるため、生成位置は左右に幅を持たせています。


地面も車も生成といっていますが、オブジェクトプーリングを使用しているので、実際は生成しているのはシーン開始時のみで、あとはSetActiveを切り替えています。
4.ラグドールを吹っ飛ばしてみた
ゲームオーバー時の演出ですが、ラグドールというぐたっと倒れるような状態にしてキャラを吹っ飛ばしています。

これはゲームクリエイターひろはすさんの『グルコサミン』のオマージュです。
方法ですが、以下のサイトを参考にゲームオーバーになった瞬間に、走行中に使用していたVRoidモデルを非表示にし、同じ座標からラグドール用のVRoidを生成し、吹っ飛ばしています。
ですが、以下3点引っ掛かったポイントがありました。
(1)ラグドールの頭はHeadを選ぶこと
上記の参考記事のとおりラグドールのセットアップをする際は、Rootフォルダ以下のTransformを選択してください。
Rootフォルダはボーンのデータです。
Rootフォルダ外のFaceはテクスチャの表示に関するオブジェクトで座標は(0,0,0)のまま変わらないので、このTransformを頭に設定してラグドールを作ると、上手い具合にぐたっとしてくれません。


(2)ラグドールを追うカメラを作る
ラグドールは元オブジェクトもFace等と同様に座標は(0,0,0)のまま変わりません。なので、ラグドールを追いかけるカメラを作ってもフォロー対象を元オブジェクトにすると、ラグドールの生成地点からカメラが動きません。
今作ではフォロー対象を腰のボーンにすることで、ラグドールを追うカメラの動きを実装しました。
↓以下参考記事
(3)ラグドールの表示が消えるので、しっかり表示させる
吹っ飛ばしたラグドールをカメラが追いかけると、ラグドールが消えてしまいます。しかしヒエラルキー上には残っているので、消えたというよりは非表示になっています。
これは「Skinned Mesh Render」のオフスクリーン時に更新をチェックすると無事表示されるようになりました。
デフォルトのチェックが入ってない状態だと視界外で更新を停止したり、カメラオフスクリーンになると描画が抑制されているようです(なんでや)。
Skinned Mesh RenderはVRoidの場合、FaceとBodyとHairにアタッチされていました。

5.WebGL環境での不具合
Unityエディタ上では問題なくプレイ出来ていても、WebGL環境では上手くいかないことが多々あります。今回はビルドがギリギリになってしまい、未解決になってしまった点もあります。
(1)オブジェクトが真っ白になる
URPでピンクになったオブジェクトについて、今まではマテリアルのシェーダをliltoonやMKtoonとに変えて対応していましたが、この方法ではWebGL環境で真っ白になる可能性があります。
なので無難にRender Pipeline Converterを使って変換しましょう。そうすると直りました。
今思えば、東方のアクションゲーム作ってunityroomに上げた時も、オブジェクトやキャラクターが真っ白になってました。
(2)タイムラインで効果音が鳴らない
過去記事でも一度言及していますが、2022.3環境ではWebGL環境でタイムラインの効果音が鳴りません。
なのでTimeLineにシグナルエミッターを設置し、適当なスクリプトの効果音再生用メソッドを実行して対応しました。
(3)ゲームオーバー後にリトライできない(未解決)
ゲームオーバー後にリトライをすると、なぜかタイムアウトになってしまいます。
ポーズ画面からのリトライは問題なくできるので、本当にわけが解りません。
Prefabの数を減らしたり、影をベイクしたりしてみましたが結局解決できなかったので、断念しました。まあ普通にプレイはできるし…。
もしかしたら非同期でシーンをロードすればいけたかもしれません。
今まで1度もやったことがない処理なので実装はしませんでしたが、今後は実装してみようと思います。
6.小ネタ
(1)UnityのAssetフォルダが表示されなくなる
恐ろしいことにAssetフォルダの中身が表示されなくなる現象が最近多発しています。
幸い作り始めの頃だったので、初めからプログラムを作り直していましたが、以下の記事のように対処すればよかったのでしょうか…。
(2)切れ目なくループ再生するには.oggファイル。しかしなぜか音量調節ができなかった…
キックボードが走行するシューという音を切れ目なくループさせたかったのですが、mp3ファイルではどうしても切れ目が入ってしまっていました。
以下の記事のように.oggファイルでは切れ目は目立たなくなりましたが、自分の環境では音量調節ができなかったので、結局.mp3にしました。
自作のSoundManagerクラスやAudioVolumeクラスが悪いんですかね?
7.今回実装できなかったこと
(1)Feelを使ったヒットストップ等の演出
車にぶつかった時にヒットストップして、ド派手な演出があれば、さらに面白かったかもしれませんが、そこまではいけませんでした。
(2)VRoidの表情を作る
今作のタイトル画面では、VRoidが無表情で手を振っていますが、今後VRoidをゲーム内に本格的に使っていく場合は表情を付けることは必須になります。