この記事はUEC Advent Calendar 2022 の 20 日目の記事です。(遅刻しました、すみません。)
昨日は random さんの「内部シラバスを Web APP にして見る話」でした。
大学のシラバス、検索機能弱いし、色々読みづらいし、目的のもの(classroom のコード)見つけにくいので、いい感じの WebApp あると嬉しいですね。random さんのとても良さそうです。公開されたら使ってみたいです。
Unity1Week(Unity1 週間ゲームジャム)というイベントが現在開催中です。これはその参加記です。
Unity1Week とは
(以下 Unity1Week を u1w と略します)
Unity を使って 1 週間でゲームを作るイベントです。
Unity がインストールされた PC とインターネット環境があればどなたでも参加可能です。
月曜 0 時にお題が発表されます。日曜 20 時までにゲームを作って投稿しましょう。
お題については多少こじつけでも大丈夫。ゲーム作りを楽しむことを心がけてください。
ブラウザで遊べる WebGL 形式でビルドし、unityroom に投稿します。
簡単にいうと、「指定されたお題に沿って 1 週間でゲーム作ろう!」というイベントです。おそらく、多くの参加者が個人開発であり、プログラミング初心者からゲーム開発者まで幅広い層が参加してます。
今回のお題は「Re」でした。12/12 にこのお題が発表され、12/18 に開発期間が終了し、現在(~1/1 まで)評価期間中です。
評価期間といっても、審査員が評価するわけではなく、u1w に参加した他の開発者同士でゲームを遊びあって評価する、という感じです。
また、u1w の開発に参加してなくても twitter アカウントがあれば評価できます。300 程度のゲームが投稿されてると思うので、気が向いたら遊んで評価していただけると嬉しいです。
作ったもの
「RepeatableCube」というゲームを作りました。(タイトルは適当)
https://unityroom.com/games/repeatablecube
ついさっき投稿しました(遅刻しました...)
面白いか、と言われると、うーん、まあ僕なりに頑張りはしました。他の面白いゲーム遊んだ後、暇だったら遊んでくれると嬉しいです。
ソースコードだけ Giuhub に公開しました。(Assets/Scripts
下を公開してます)
とてもスパゲッティな コードになってます。
使用したアセットは「DoTweenPro」「UniRx」「UniTask」「VContainer」です
ソースコードを公開しようかと思ってたんですが、予想以上にひどいコードを書いてるので現時点では公開しません。何日かしたら公開するかもしれません。
開発の流れ
今回の開発の流れを時系列順に書いていきます。
月〜水曜日
何もアイデアが出てこなくて、にゃーんってなってた。
Re って難しくないですか?
まあ、何もやらないのは... ってことで、ShaderGtaph とか Blender とかをごにょごにょしてました。
木曜日
ふんわりとアイデアが浮かんできます。
この日は基本セットアップとかして終わりです。
僕は「u1w では何か 1 つでも今まで使ったことないものを使う」を目標の 1 つにしてるので、今回は「ShaderGraph」と「VContainer」を初めて使うことにしました。(VContainer は 1 年以上前にチュートリアル的なことだけはやったことありますが)
金、土曜日
作る、躓く、ググる、を n 回繰り返しました。
TimeMachine(MacOS のディスクフルバックアップ機能)にもお世話になりました。
日曜日
夜になってやっとゲームロジックと一部主要アニメーションがほぼ完成しました。
12/8 の Unity アドカレ Unity Cinemachine VirtualCamera を知らない人向けだけの紹介で、Cinemachine VirtualCamera 簡単で良さそうだな、ってなってたのを思い出したので、VirtualCamera を使ったカメラアニメーションも実装してみました。(初めて Cinemachine 使いました)
提出締め切り日ですが、この日の段階では UI・フォントは全て Unity デフォルトのもの、サウンドなし、ライト・ポストエフェクト未設定な状況でした。
月曜日
UI の作成、フォントの設定、ライト・ポストエフェクトの設定が終わりました。残すはサウンドだけかと思ったら操作説明(遊び方)を書いてなかったことに気が付きます...
火曜日
今日です。(昨日になってしまいました。)
22 時ごろに、致命的なバグを見つけてしまい、それを解決しようとしてたのですが出来ませんでした。現在 1 部機能を取り除いた形で公開してます。
実装
主に自分の反省用としてここに書いておきます。
ひらく
完全に他の人に読ませる用の文章ではありません。多分何言ってるかわからないと思います...
C#部分
まず、今回導入した VContainer、これは僕の u1w レベルでは必要ないと思う。DI コンテナはミニゲームにはオーバーキルに感じた。Register 漏れとかであれーって言ってるんだったら普通に参照すればいい気がした。規模が小さいので全く問題にならない。
それと、今回今まで行ってきた MVP な実装から外れてイベントベースに書いてみる試みをしたわけだけど、これはちょっときつかったな、という感想。VContainer あるし、Inject 使えばいい感じにできるだろう、という考えが間違ってた。MonoBehaviour と injection の相性がそこまで良くない、コンストラクタインジェクションができないからメソッドインジェクションになるわけで、恩恵が Inject される変数のスコープが小さくなる、という何とも言えないものになちゃう。嬉しいけど、injection の恩恵ってそうじゃないだろって。
まあ、途中まではいい感じに実装できてたんだけど、後半になるにつれてダメになった。今回の方法は結局 Singleton なクラスで Enum で状態・イベント管理をしてるようなものであった。StateMachine に近しい何かしらのものつくったほうが絶対よかった。
おそらく、DI コンテナや State 管理について僕がもっと知識と理解があればちゃんと作れたのかもしれない。
今回の C#実装はかなり悪いものになってしまった。
その他
UI は毎度のことながら、よくないなーと感じてる、自分なりにいいものを考えてるつもりだけど、おそらくもっといいものがある。
ポストエフェクト周りは、まだ使い方がちゃんとよくわかってない、雰囲気で適当にパラメータ弄って、やっている。それでもちょっとずつできるようになってるので良いと思ってる。
オブジェクトの色とか発光、環境光とかは完全に適当。どうにかしたいとずっと思ってる。思ってるだけ。他の人の見て色々知識を溜めていくしかないのかなー。
感想
今回気がつけば u1w は 7 回目の参加。初参加は高校 1 年の春休みだったようです(当時プログラミング歴 1 年弱)。
ろくに企画・設計もせず慌ただしく開発してるのは今も変わらなし、Unity 力もあんまり向上してないような...
何はともあれ、楽しく開発できたのはよかったです。実装面では色々学びと反省がありました。
まだ u1w の評価期間は続いてます。他の人の作品遊んで、色々学んでいきたいです。