Unity1週間ゲームジャム「あつめる」に参加したよ
「あつめる」
「アトラクターズ」つくりました。
— るっちょ (@ruccho_vector) 2019年7月7日
惑星を操作して、飛来する天体を衛星軌道に捕えて集めるゲームです。オンラインに行くと衛星を撃ち合う激しいバトルが始まります。https://t.co/C6nC46KoAF#unity1week pic.twitter.com/2AQ0OpW0VA
こんにちは、るっちょです。unity1weekふりかえりエントリです。
開発記録を適当にまとめます。
月曜日
月曜にはプロジェクト作成ボタンを押してました。ただ、マジでアイデアが何もなかったので、脳死でよさげな絵をつくってそこからアイデアを広げるという作戦で、まず最初に出来上がったのがこれ。
なんもおもいつかないので、とりあえず何も考えず絵を作ってそっからイメージを広げる作戦 #unity1week pic.twitter.com/ojmE52NWOz
— るっちょ (@ruccho_vector) 2019年7月1日
目論見通り、ここからアイデアが固まりました。惑星を操作して衛星を集めるという方針でいくことに。
さっそくプレイヤーの素材を描きました。
— るっちょ (@ruccho_vector) 2019年7月1日
なんにも下書きしないで描いたものですから、このアニメだけで30枚超えてました。正直アホだと思います。
素材を突っ込んで、衛星をつくって、とりあえず基本的なプレイヤーの動作を作りました。
ウーン#unity1week pic.twitter.com/n6IUkoQbbi
— るっちょ (@ruccho_vector) 2019年7月1日
水曜日
この時点だとプレイがあまりにも単調なので、何らかのストレス要因を足そうと思っていました。
そこで、前々からやってみようと思っていたオンライン化をして、対戦ゲームにすることにしました。
使ったのはPhoton Unity Networking 2 (PUN2)。無印PUNから刷新された新バージョンですが、まだあまり情報が多くないのが難点です(特に日本語の情報が)。その中でこのチュートリアルの存在に超助けられました。
(書いているのはUTJの方だそうで……!どうりで内容が充実している……!)
基本的な作法から、ちょっと中級者向けの注意事項なども載っていて、これがなかったら今回の開発は頓挫してたかもしれません。
……で、とりあえず複数プレイヤーが参加できるようになりました。
マルチプレイ対応できた#unity1week pic.twitter.com/3s2QTTn8dK
— るっちょ (@ruccho_vector) 2019年7月3日
一通りのロビーの動作なんかも作って、ここらで一回WebGLビルドをしておこうと思い立ってやってみたところ……
ウン…… pic.twitter.com/8dop3CfZ9v
— るっちょ (@ruccho_vector) 2019年7月3日
ウン……
なんか動きませんでした。
木曜日
問題は木曜日に持ち越されました。
とりあえず考えららえるところとして、
・PUN2のバージョンが古い(別プロジェクトで使ってたスクリプトを再利用したため)
・wasmかIL2CPPがなんか悪さしてる
・コードストリッピングが効いている
らへんがあったので、とりあえずPUN2のバージョン上げてコードストリッピング切ってDevelopment Buildにしてみたら、すんなり動きました。
(ここ、実際にどれが原因だったのかはわかりませんが……「なんで動かないのかわからないより、なんで動いてるのかわからない方が怖い」案件ですね)
……ひとまずひとやま超えたので、ずんずんいきます。
今日はネットワーク関連のことをととのえてた。
— るっちょ (@ruccho_vector) 2019年7月4日
天体を衛星軌道に捕まえて3週させると軌道に固定される。
あとはオンラインで衛星の数を競ったり衛星をぶつけあったりできる #unity1week pic.twitter.com/WTFaxlQX3B
UIやら、オンライン接続時の動作を整えたりなんかして、良い感じになってきました。
土曜日
ゲームバランス調整です。
あつめた天体を消費して相手に撃つ#unity1week pic.twitter.com/oQWxeIXC7i
— るっちょ (@ruccho_vector) 2019年7月6日
ただ衛星の数を競うのではマルチプレイの旨味がないので、攻撃手段を作りました。
日曜日
サウンドとかやりました。(というかここまで完全無音状態で開発してました、いっつもサウンド最後になっちゃうの、サウンドに対する意識の低さが窺えてよくない)
友人に協力してもらいテストプレイ(とTwitterに上げる用のプレイ中動画撮影)しました。
開発期間が極端に短いので致し方ありませんが、ここで初めて実際に対人で遊ぶことになりました。ゲームプレイの根幹にかかわる部分の検証がここまで後手に回ってしまうのは本当に恐ろしいことです。「ひとりではテストプレイできない」、対戦ゲーム開発の難しいところですね……
奇跡的にゲームバランスはまあ許容範囲(自己評価)に収まってたので、このままアップロードです。
おしまい!!!!!!!!!!!!!!(とりあえずバグ修正はあとまわし……)#unity1week pic.twitter.com/QY2cUc32j8
— るっちょ (@ruccho_vector) 2019年7月7日
公開!
「アトラクターズ」つくりました。
— るっちょ (@ruccho_vector) 2019年7月7日
惑星を操作して、飛来する天体を衛星軌道に捕えて集めるゲームです。オンラインに行くと衛星を撃ち合う激しいバトルが始まります。https://t.co/C6nC46KoAF#unity1week pic.twitter.com/2AQ0OpW0VA
ふりかえり(反省)
友人やunityroomのコメントでいただいたフィードバックから、いくつか問題点が浮かんできました。
・なかなかマルチプレイしてもらえない
このゲームはオンラインマルチプレイが基本のゲームですが、ひとりで遊ぶこともできるようになっています。
このゲームのオンライン機能は、誰かがゲーム内で「ルーム」を作成し、そこに別の人が参加するという形式をとっているので、unityroomに遊びに来てくれた人の多くは1人部屋を作ります。結果として、ほとんどの人はシングルプレイしか遊びません。
前述のとおり、複数人で遊ぶのを前提としてゲームバランスを考えているので、シングルプレイだとゲームの旨味が十分に伝わりません。ひとりで回遊してひたすら天体を巻き込むだけです。競争も攻撃もありません。このゲームの制限時間3分は複数人プレイを前提として設定している数字ですが、ひとりで遊ぶには長すぎるでしょう。
おそらくは、ルーム形式ではなくランダムマッチング形式であればよりマルチプレイしてもらいやすかったな、と思います。
・ゲームバランスの甘さ
このゲームでは、「天体を捕まえる」「天体に衝突しないようにかわす」「捕まえた天体を敵に撃つ」の三つのアクションが基本になっています。
開発の中盤では、ひとつ天体を捕まえると衛星の数が1増え、天体に衝突すると1減り、相手に投げつけるときは1消費する、というバランスでした。とても自然ですね。
しかし、飛来する天体を交わすのは結構難易度が高く、このバランスでは全然衛星の数が増えない、という問題がありましたし、敵への攻撃が命中した際に敵の衛星の数も自分の衛星の数も同数減少するため、攻撃アクションの旨味が薄い(=あまり撃つアクションをしてくれなくなる)のもよくない点でした。
結果として、ひとつ天体を捕まえると衛星の数が5増え、天体に衝突すると2減り、相手に投げつけるときは1消費する、という調整になりました。
……捕まえた天体は一つなのに、衛星が5増えるってちょっと意味が分かりませんね……。
遊んでいて気持ちがいいバランスはこのくらいなのですが……リアリティとゲームバランスの両立、これを解決する方法は少なくともこの開発期間中には見つけられませんでした。
結論
・対戦ゲームつくるのつらい
・ゲームバランス調整むずい
・……でも「1週間クオリティ」なのですべてが許される。unity1weekはいいぞ
(というか、毎度見た目のクオリティをそこそこ凝ってしまって、結果ゲーム性が良く分からなくなるっていうパターンで、今回も例によってそれを踏襲してしまったので、次は気を付けたい……)