はじめに
4/29~5/29の1ヶ月間に部内で行われたチームでの共同開発競争「Random Marathon」において、弾幕シューティングゲームを制作しました。
超有名同人作品の弾幕STGの影響を受けています。
タイトルの「Floral Difussion」は花の拡散といった意味で、自機の「わた」(温帯のタンポポ)を操作して、他の各気候の植物を倒していくというお話。
メンバーはATsU、ハニワ、Ryo、Tan_wave、もり、べーこんの6人で制作しました!
ATsU
この作品でコーディングをHANIWA氏と担当しました。主に弾幕生成のスクリプトやA,D,E面の敵等を作りました。弾幕シューティングの案を出したのは私なんですけど、案ないとマラソンできんやんって軽く出しただけなので仕様は話し合って決めました。
ところで弾幕ってどう作ってるんでしょう?特にボス戦。オブジェクト指向に則ったつもりで考えると弾1つのオブジェクト(プレハブ)で速度や角度を制御し、弾を発射し続けるオブジェクトを敵にくっつけるのがいいと思いました。そこで今回は以下のような3クラスをそれぞれ継承させて弾1つの制御、弾1種類の制御、弾幕パターンの制御をさせることにしました。
これのいい点はプロパティが複雑でなければ使いまわしがきいて、(主に道中で)スクリプトのリソース削減ができることなんです。しかし道中を作る時間はありませんでした...そしてこの欠点は、モチーフ弾幕が作りづらいことですかね。特徴的な形の弾幕を作りたい場合、BulletクラスやBarrage_generatorクラスのプロパティをその上位クラスで編集しないと大変。でも結局これだとクラス分けしてる意味が薄い上、プロパティ編集のため互換性がなくなってしまうなどあったのでもっと良い手法があったのかなぁ
改善案はC面作る、別の難易度作る、弾幕パターン増やす等のコンテンツの充実はもちろんですが、コンセプトから某方のオマージュなのでそこを変えないと大きなクオリティの向上には繋がらないのかなと思ってます。あと、特にE面は理不尽でなく難しくしようと思ったら嫌がらせだらけになりました。大変申し訳ございませんでした。きれいな弾幕は思いつきませんでした
最後に、このゲームを遊んでくださった方々、チームのみんな、本当にありがとうございました。ここまで形になって皆に遊んでもらえて私は幸せです。まあ一人ひとりがつよつよで色々任せっきりだったんですけどね。なお、私はD面がクリアでき魔閃、課題が落ち着いたらやろうかなぁ。
HANIWA
上でATsU氏が言ってくださっているとおり、ATsU氏とこの作品のコーディングを担当しました。また、スコアやUI関連のコーディングはRyo氏が担当してくれました。
僕が実装した部分はゾーンBの弾幕の実装とタイトル、プレイヤー部分です。敵弾幕部分の実装はATsU氏が言っているように実装しました。Unity特有の親子関係の仕様のせいで弾から弾を出すのに少し詰まりましたが、ATsU氏の助けがありちゃんと弾幕を実装することができました。
プレイヤーの実装に関して、1番苦労したのはボムの実装です。基底クラスは敵弾幕と同様のものを用いたのですが、この基底クラスで作る弾の軌道はATsU氏が書いてくださっているとおり、進む角度と速度を決めることで動いています。しかし、ボムの軌道はそのような手法では難しく、実装がなかなかできません。では、どうすれば実装できるのかというと、極座標(原点からの長さと角度で座標を決める手法)を用いることで簡単に実装できます。他にも今回は用いていませんx,yの関数で座標上を動かすこと様々な軌道を実装することもできます。このように、様々な手法で軌道を実装できるため、それぞれに応じた基底クラス、あるいは基底クラス内に関数を作っとくと弾幕の幅が広がりそうです。次、弾幕を作るときはそれらも実装してみようと思います。
タイトルに関しては音量設定のところが初めてで少し時間がかかりましたが、それ以外のところはすんなり実装することができました。ところで毎回僕は矢印にどこを指しているのかを変数を持たせ、それによってスイッチ分などで決定ボタンを押した処理をかいているのですが、結構べた書きな感じがするのでいい方法があれば教えていただきたいです。
難易度に関しては初心者がやるには酷なものであるかと思いますが、なれると楽しくこの弾幕はそこまで難しくないと思えるようになるので、諦めずに挑戦しましょう!また、この作品に慣れたら他の弾幕ゲームをやってみるのも良いと思います。
今回合作をしてみて思ったことは、何か実装をするに当たり、そのソフトに応じたライブラリの使い方を学ぶことも大切ですが、やっぱり基礎的なプログラミング力も重要であると思います。特に合作となれば自分の書いたコードだけでなく、人の書いたコードも読んで理解しなければならないことが多くあるのでますます重要になってきます。なので、プログラミングをしてゲームか何かを作ろうとしている人には競技プログラミングをおすすめします。興味がある人は調べてみて、様々なコンテストに参加していきましょう。
最後にこのゲームの開発に参加してくださった皆さん、ありがとうございました!
Ryo
主にUI周りの処理やフリーBGMの収集、スコアバランスの調整などを担当しました。
RMが開始するまではUnity未経験者だったので、1週目は2DのSTG制作チュートリアルでUnity本体やC#スクリプト、Unityを用いたSTG制作の基礎の基礎を学びました。Unityを1から始めたという意味でも、このチュートリアルで学べたものは大いにあったと感じます。GitHubも触ったことがなかったので色々調べたりして、少しずつですが慣れていくことができました。
中でもUI制作について。各項目の表示方法やレイアウトは皆で話し合って決め、それをもとに私がフォントや細かい表示位置などを考えました。表示がちょっとでもズレていたりすると気になって仕方がない、ややこだわり強め&几帳面なタチなので、良い感じの等幅フォントを探す旅に出たり、何度も再調整を繰り返したりして全体が概ねバランス良く見えるUI配置を目指しました。スコアや評価の表示演出(振動、一定間隔の表示、スコアのなめらかな増加など)も、どれもシンプルなものですが思うように実装することができて一安心でした。
BGMの選定やスコアバランスの調整などについても、私の考えや好みを基に行いました。これらに関しては特に語ることはありません。余裕があれば弾幕制作もやってみたかったのですが、今回は時間的&技術的にも難しそうだったので、またの機会にって感じです。
そして最後に、他の方も言っておられますが、本ゲームを完成させることができたのは、やはりメンバーの皆さんのおかげです。技術的に私にはまだ作れないような、美しい弾幕や基盤システム実現のために力を尽くしてくれたスクリプト班、本ゲームになくてはならないオリジナル性を大幅に高めてくれたグラフィック&ドット班、世界観などを意識した素材を集めてくれた素材班と(兼任や、途中良い意味で役割の線引きが曖昧になったりしつつも)各班の人数が概ね適正で、しっかり役割分担できたゆえの成功といえるはずです。制作期間中も他のメンバーが作ってくれた弾幕やグラフィック、動くゲーム画面を見て何度感動したことか。改めて、この場を借りてメンバーの皆さんへお礼と感謝を申し上げます。本当にありがとうございました!
Tan_wave
私は主にフリー効果音と背景の収集および加工を担当しました。
効果音については、イメージに合う音がなかなか見つからないというのが難しい点でした。例えば、魔法を放つ音とか、重火器をぶっ放す音といったそういう「派手な音」は割と見つかるのですが、自機の通常ショットに使うような「地味な音」はなかなか見つからず苦労しました。結果的には、システムUI用としてアップロードされていたものをショットの効果音にしています。かなり探し回っただけあり、派手でないながらも「弾を打った」感のある効果音になっていると思います。
背景としては、D面・E面を担当しました。フリーの写真素材を加工して使用したのですが、こちらもイメージに合う写真を探すのが大変で方々のサイトをサーフィンしまくることとなりました。地上から見上げる視点で撮られている写真は多いのですが、俯瞰視点の写真となると数が減るのですよね。
もちろんイメージに完璧に合致するような都合のいい写真は存在しないため、ある程度加工を加えています。
これはD面の背景なのですが、これはpixabayから拾った画像をドット絵こんばーたで減色加工をし、色を明るめのものに差し替えたものです。
E面の背景と元画像もあげておきます。
正直ゲームプレイ中は背景を見ている余裕はないと思うので、この機会に背景とその元画像様を見て頂ければと思います。
ゲームが完成してプレイしたときに、自分が探した効果音や背景が使われているのを見て達成感を得ることができました。そしてその達成感はチームの他の方々、そして何より良質な効果音・写真をフリー素材としてアップロードしてくださったフリー素材サイトやその投稿者様によるものです。この場を借りて感謝申し上げます。
今後はゲームのプログラムをしっかり書けるようになりたいですね。夏休みあたりに1つゲームを作りたいなと思ってはいますがどう転がるでしょうか。某年代記とかも作りたいと言い続けて数年経っていますし、そもそも与えられた時間に対してしたいことが多すぎるんですよ。まあそれが幸せなのかもしれないですが。
もり
キャラクターや世界観などの最低限の設定、タイトルやゲーム中のイラスト、キャラクターのドットを担当しました。
ゲーム内に補完説明などは一切ありませんでしたが、この作品は主人公であるタンポポの妖精「わた」が他の気候の植物の妖精たちを倒していくという物語です。温帯であるゾーンCがないのはタンポポが温帯の植物だからです。(本当はCも別の相手を作るつもりだったが、時間の関係上厳しかった)
テーマに各気候の植物を取り入れたことは弾幕のモチーフのしやすさと噛み合ってうまく落とし込めたと思います。
キャラクターのデザインも最初は軽い気持ちで取り組みましたが、割とかわいくできたようなのでよかったです。 植物のモチーフは熱帯のゾーンAがハイビスカス、乾燥帯のゾーンBがエキノカクタス(サボテン)、冷帯のゾーンDがモミの木、寒帯のゾーンEがコケ類となっています。 モチーフとなる植物を探して、それっぽくキャラデザを行うのは楽しかったです。ドット絵にしてシルエットがクリスマスツリーっぽく見せられたDが自信作。
画力もちょっとは向上したかな……? やっぱり毎日少しでもいいから目標を決めて試行錯誤して絵を描くことに向き合わないと上達しないですね…… あと遅筆なところは直したいので、今後デッサンやクロッキーにも取り組んで描くスピードを上げていきたいです。(イラスト一枚に付き5時間~かかっている)
キャラクターのドット絵も今回初挑戦だったのですが、ゲームで動かすにあたって遜色ない出来にはなったと思います。瞬きさせたり色々こだわりました。ドットのアニメーションに関してはあまり触れられていないけど非常に奥が深そうなので今後も探求していきたいです。キャラクター以外の弾やUIに関するドットは後輩のべーこん君に任せたのですが、驚異的に成長を続けていて明日の我が身が危ないです()べーこんはワシが育てた。
今回、コード類を一切担当していなかったので製作中そのことを気にしまくっていました。(役割分担は綺麗にできていたのだろうけど……) 特にRVW前日にさるお方のある過去作品のビルドを任されたのですが、そのときUnityを全く触れていなかったのでヤバかったです。(他の人の協力も合って無事にビルドは出来ました) 今後のゲーム制作でもキャラデザやasset作りをやっていきたいですが、コードを書かないままプログラミングに向き合えないといろいろ心配です。 というわけでこれからはイラストだけでなく競プロに向き合いましょうか…… Unity? GitHub? (ナニモワカラナイ)
ちなみに私はゾーンBを突破するのがやっとです。 誰がこんなに難しくしろと言った
べーこん
敵弾などの小道具担当、べーこんです。
Asepriteというドット絵描画ツールを使ってお絵描きしました。
ドット絵といっても意外に奥が深くて、限られたピクセル数の中にイラストを収めないといけないのでただディティールを凝ればいいというものでもなく、いかにシンプルに、いかにキャッチーにイラストが描けるかの勝負になります。自分はロクに絵が描ける人間ではないのですが、いろいろ工夫しながらドット絵を描くのはまるでレゴを組み立てていくようでとても楽しかったです。ですがやはり、この1ヶ月ほど神絵師の腕が食べたいと思ったことはありません。妥協ばかりで辛かった……画力ください……(泣)
(画像は諸事情により日の目を浴びることのなかったドット絵くん達です。南無。)
あと一部の背景も担当しました。
さすがに神絵師の右腕は手に入らず(腕だけに)、一朝一夕には背景を描くほどの知識や技術を得られる訳もないのでpixabay様から画像を拝借してドット絵化しました。なかなか世界観に合うような素材が見つからず、正直ここが一番しんどかったまであります。(いいえ)
それとこれはここだけの話ですが、実は背景に敵の名前と主人公ちゃんの名前が隠れています。よかったら探してみてください。(嘘です。これくらいの遊び心は入れておけばよかったなあ……)
末筆ながら、FloralDiffusionを遊んで頂きありがとうございました。この身で言うのもなんですが改善の余地はあれどとてもいいゲームができたと思っています。僕自身、まともにPCを触るのも、ましてや何かの制作に携わるのも、このRMが初めてのことだったのでとても新鮮で楽しい毎日でした。始めは見学でちょっと覗くだけのつもりでしたが参加して本当に良かったと思います。
快く迎え入れてくださった先輩方に感謝です。
おわりに
私達6人も殆ど共同開発を行った経験がなく、チームで役割分担をして一つの作品を作り上げるいい機会になったと思われます。
1ヶ月のほぼ毎日通話を行って集中して制作していたのですが、結局最後ぎりぎりになって妥協した部分も多いです。 ゲームづくりって大変ですね……
多くの人に遊んでもらい、最終面のクリア報告も見受けられて制作チーム一同感謝感激でございます。Thank you for playing!!
RVWはもうちょっとだけ公開されているので、他のゲームも含めて良かったら遊んでみてください。
https://virtual.ch-random.net/
ここまで見ていただき、ありがとうございました!