人は生き方を選べないし生き方を変えることもできない
でも楽しむことはできる
環境は人を作る.
僕も様々なものに影響を受けて,その結果今の自分が居る.
過去の良い経験や嫌な経験をすべて混ぜて煮込んだ結果,僕という人間が作られる.
それには僕が望んだことも含まれるし,そうでないものも含まれている.
人は自分の望んだ通りにしか生きられないし,その望みには自分が望まざるものが過去に介入した結果が含まれている.
だから僕は,それを自分の望みだと一生錯覚して生きなければならない.
僕は生き方を選べない.
僕はどこまで行っても,この時代,この国,この世界が生んだ結果に過ぎない.
それを変える術は,僕にはない.
だからせめてもの抵抗として,楽しもうと思う.
それが僕の望みなのだ.そう死ぬまで錯覚し続ければ,きっとそれが僕の真実になる.
ぼっちソンの報告
第一回ぼっちソンは無事終了した.
これも主催者の熱意と準備,そして参加者の努力の賜物である.
ぼっちソンの結果発表として,まずは発表資料をここに記そう.
とてつもなく雑な資料だが,これでもぼっちソンの時間いっぱいを使って作った資料だ.
多少タイムオーバーこそしたものの,発表資料としてはギリギリ及第点以下の代物と言える.
まぁアウトプットのスキルについてはこれから磨いていけば良いのだ.
ぼっちソンの成り行きや成果物は資料にだいたい書いてあるが,今回はこのブログでも紹介しようと思う.
もう今日は頑張り疲れているから,とんでもなく酷い記事になるかもしれないが.
まぁ既卒ニートの就活日記なのだから,日記レベルの内容だと思って読んでいただけたら幸いと言うものだ.
Run! Gun! Jamp!
今回僕は,ラン&ジャンプゲームにシューティングの要素をプラスしたゲームを制作した.
ゲームタイトルは,僕の直感で適当につけた.
語呂が良いから,悪いタイトルではないと自負している.
ゲームの内容は至ってシンプルな代物だ.
「右に向かって走る自機をジャンプさせて障害物を乗り越え,邪魔な敵をショットで倒してゴールを目指す」
たったこれだけのゲームである.
主要なコンポーネントは次の通りだ.
- Player: 自機.SpriteとRigidBody2Dで構成されている.こいつを操作してゴールを目指すのがゲームの目的
- Floor: 地面.TilemapsにColliderを仕込んでおり,物理演算でPlayerが走れる足場となる
- Wall: 障害物.Colliderをトリガとして扱い,Playerとの接触を検知してダメージを与える
- Enemy: 基本はWallと同じだが,こちらはPlayerの攻撃で撃破することができる
- Bullet: Playerが放つ弾丸.Colliderを持ち,なにかに当たるとダメージを与えて消滅する.
- Goal: ゴール.ColliderにPlayerが接触すればクリアとなる.
このコンポーネントが動作するようスクリプトを実装すれば,ゲームの仕組みはほとんど完成する.
これらのコンポーネントは計画段階で決めていたものであり,幸いなことに実装すべきコンポーネントが後から追加で増えるということはなかった.
オブジェクト指向において,先に要素を考えておくという当たり前のアプローチはやはり偉大だなと思った.
今回,このゲームを作るにあたって技術的に難しいことは一切しておらず,Unityが提供する機能をベースに淡々と作り上げることができた.
特に物理演算のパワーは凄まじく,接触判定周りのコードを一切実装しなくても「足場の上に立つ」という処理を実現することができる.
横スクロール2Dアクションを作ろうとした人間ならだいたい分かると思うが,設置可能な地面の実装というものは,本来非常に大変な労力を要する.
それをまるまるゲームエンジンに任せられるのだから,コードを書く僕は非常に楽ができる.
もはや機械的に作業をすることすらできてしまうため,プログラマにとっては少々危険な代物かもしれないとすら感じた.
デザインの問題
実装に際して時間がかかったのは,むしろデザインの方であった.
当たり前ではあるが,ゲーム制作において最も時間とコストがかかるのはデザインの部分である.
中でもレベルデザインとグラフィックデザインは,特に負荷がかかる作業だ.
それは今回のぼっちソンにおいても同様であり,Run! Gun! Jamp!の制作にあたって最も妥協した点の一つとなっている.
レベルデザインについてだが,今回はチュートリアルに相当する1ステージしか実装できていない.
ゲームとして最低限成立するステージを用意したつもりだが,やはりこれでは「寂しい出来」と言わざるを得ないだろう.
これについては,他のステージを追加していくだけで,多少は解決が図れるだろう.
だが新たなレベルデザインを行う際に,新たな仕組み=新たなコンポーネントを実装する必要が出てくる.
レベルデザインについての今後の方針は,地下洞窟や海底,空中や宇宙といったステージテーマを決め,ステージギミックの実装と併せて制作を進めていく形を取ろうと考えている.
現在の「草原」をテーマにしたステージをいくつか作り終えたら,次は地下洞窟の実装に取り掛かってみたい.
落石や崩落などのギミックを取り入れることができたら,よりゲームとしての深みが増すことだろう.
グラフィックデザインについても,今回苦戦した箇所の一つだ.
UnityはAssetとして様々な素材が使用できるが,流通しているAssetがすべて自分のゲームに適用できるわけではない.
便利ではあるが,万能ではないのだ.
グラフィックデザインに関わる悩みをすべて一手に解決する手段はないため,自分で実装するという作業を避けて通ることはできない.
だがUnityが提供するAnimationの機能を使えば,既存の素材を動かすスクリプトを書く手間を大きく省くことができる.
今回はTilemapと背景をAssetで実装し,PlayerやEnemyといったコンポーネントは自前の素材を用意した.
Playerに使った素材は32x32のDot絵であり,3コマで歩行を表現できる.
これをUnityのAnimation機能で1ループ分の動きを実装すれば,後はゲーム実行時にそのAnimationを再生するようスクリプトを組むだけでキャラクターが動いてくれる.
その他に,スタートとゴールのオブジェクトを作る際にもAnimationを使用した.
自前の素材として魔法陣があったため,回転の動作をAnimationとして登録し,配置した.
こちらはゲームのイベントでAnimationの挙動が変わることがないため,スクリプトを組む必要すらない.
ゲームをリッチにする作業としては,かなり安価に行える追加であると言えるだろう.
ぼっちソンを経ての所感
今回このゲームを作るにあたって行った作業は,おおよそ上記の通りである.
Unityというツールを使いこなせるようになれば,おそらくは6,7時間程度で実装しきることができるのではないかという内容だ.
現役でUnityを触っているエンジニアなら,この程度のゲームなら息を吸うように作れるはずだろう.
まぁこれは振り返った結果から立てた推測に過ぎないし,僕より上手く,早く作れる人間がこの世に存在するからといって,このゲームが無価値になるわけではないし,僕の能力が役に立たないわけでもない.
何より,次はもっとうまく作れるという予感が得られただけでも,制作物としての価値は僕の中で十二分にあると言える.
このゲームをもっと良くしたいという望みも生まれたし,他のゲームも作ってみたいという気持ちも芽生えた.
世にとって目新しい何かを生み出せたわけではないが,自分の心にイノベーションの旋風を巻き起こすことには成功したのだ.
そういう意味では,今回のぼっちソンはハッカソンとして成功したと言えるだろう.
設計も実装も発表も,すべてが自己評価で100点というにはいささかクオリティ不足であるとは自分でも思う.
だが満点でなくても作りあげるというのは,きっと大切なことなのだ.
強いて言うなら,今後大幅にコンポーネントを増やす前提でスクリプトを書けばよかった.
強いて言うなら,もっと変更に強い実装をするべきだった.
強いて言うなら,資料をきちんと推敲してから発表したかった.
完璧主義は,いつでも,いつまでも僕の後ろ髪を引っ張り,落胆と不安を心の中に植え付けようとする.
だがそれは完成を先送りにするという,逃げの発想である.
それは僕がこれまでの人生で何度も繰り返してきた行為であり,後悔というものを作り出す最大の原因だ.
もしも今日の僕が昨日の僕よりも上手くRun! Gun! Jamp!を制作できるのならば,きっとそれが成長というものなのだ.
だから,不出来を愛せる自分になろうと思う.
そして不出来な自分を誇れるように,今日という日を忘れないようにしたいと,そう思う.
ぼっちソン 閉会
ぼっちソンは終わった.
だがそれはRun! Gun! Jamp!の開発の終わりを意味しない.
明日の僕は,きっとこのゲームをもっと良いゲームにすることができるだろう.
僕は「ぼっちソンの成果物」として,Run! Gun! Jamp!をポートフォリオにしようと思う.
今応募しているアルバイトの採用担当の方には,不出来なゲームを押し付ける形となる.
でも,それが今の僕の全力だ.
採用の基準に満たなかったとしても,それが僕の価値を決定するわけではない.
選考した者が僕の能力の高さを取得して「他者から見た僕の能力」を定義したというだけであって,僕の能力がそこで頭打ちだと証明したことにはならない.
僕の能力,僕の価値,僕の未来は,ConstでもなければStaticでもなく,FinalでもないしReadonlyでもない.
それらにはGetterが実装されているだけであって,定義はPrivateインスタンスとして僕自身が行っているものだ.
だから誰かに自分を変えてもらうなんてことは,本質的には出来ないのだ.
僕以外には誰も,本当の僕を知ることはできない.
僕の内包している宇宙は,僕にしか定義できない.
僕はそれを知らずに今日までを生きてきた.
だから僕は未熟なのだ.
僕はその未熟さを,愛していこうと思う.
変わっていく自分を認め,受け入れようと思う.
僕は不器用で,だから不器用な生き方しかできない.
それはきっと死ぬまで変わらない.
人は生き方を選べないし,生き方を変えることなどもっとできない.
だから僕は,不器用に生きる過程を楽しめるようになろうと思う.
不器用なことで損をするなら,それを含めて笑えるようになろうと思う.
それが僕がぼっちソンで得た,僕だけの教訓なのだ.
明日からは何をするのか
楽しんで明日を迎える覚悟が決まったのだから,明日はより良い明日にしなければいけない.
明日はより多くの企業の選考を受けるために,沢山エントリーをしてみようと思う.
脚切りされたって構わない.
選考に落ちたとしても,その過程を楽しんでみようと思う.
アルバイトの選考も,もっと受けてみたい.
明日の自分は今日の自分よりも,きっと良い自分になっているはずだ.
だから体面など気にせず,あがいてみようと思う.
エントリー時の自分が劣っていたとしても,選考時にはきっと成長した自分がそこにいてくれるはずだ.
それが1日の期間しかなくても,今日の僕のように大きな成長が待っているかもしれない.
明日が待ち遠しい.
先週の自分は,そんなことを思うことはなかっただろう.
いや,今の自分ですら,本心ではそう思っていないのかもしれない.
でも,それを言葉にして書いてみようと思う.
そしてそれを口に出してみようと思う.
僕の望みを,僕自身で定義してみようと思う.
明日は,今日よりも待ち遠しい一日であってほしい.
明日を希望と思える自分になりたい.
今日の夜は,きっと良く眠ることができるはずだ.