第1回学内ゲームジャムに参加してきたよ

学内で行われたゲームジャムに参加してきた。

ゲームジャム?

ゲームジャムとはプログラマ、プランナー、デザイナーなどの分野に別れて集中的(期間が短い)にゲームを開発すること。
ハッカソンのゲーム版。
今回参加したゲームジャムの制作期間は3日間で以下日程。

1日目:チーム発表、諸注意、制作開始
2日目:制作期間
3日目:制作期間、発表(プレゼン)、体験会

本来のゲームジャムは作るゲームから始まるが今回は作るお題が決まっていてそれに各班の要素を追加していくという感じになった。
どんなのを作っていくというのはまだ公開しては行けないらしいので一応ボールがマップを塗っていくファミリー向けゲームとだけ言っておく。

1日目…..

自分以外が他学科の人で少し焦ったが、すぐ溶けこむことができた。自分の班はプログラマー2人、デザイナー1人、プランナー1人の4人構成。プログラマーさん1人がゲームジャム参加経験ありと中々良いくじを引いたと思った。個人的にはゲームのボリューム、統合問題などからプログラマは1人にしたほうが良いと提案したが全員に却下された。(悪く無いと思ったんだけどなぁ)
メンバー曰く、プログラマーはやることが多すぎるそうだ。(痛いくらい知ってるぞ)そんなこんなで自分はプログラマ担当さんの補佐という立ち位置でサブプログラマーという役職をもらった。
1日目の自分のタスクは以下の2つ

マップ作成

自分の班にはモデリングができる人が居ないというのが問題であったのでマップをどうやって作るかプランナーを中心に話し合いをした。2時間くらい話し合っても解決策が見つからないのでテキストアセットからゲームステージを作成してみた。やったことはstring でデータ型として読み取ってforeachでchar型に1文字格納していき、if文で判定を取るだけ。肝心のマップのtxtデータはプランナーさんに投げてしまった。すまん。

スタート画面の作成

今回作るゲームはボールがマップを塗っていくという趣旨のゲームなので操作をトラックボールマウスのみに絞って作成していくことにした。

trackball

トラックボールマウス 真ん中の球を転がしてマウスを移動させる

あと、子供向けゲームなのでクリックなども使わないでボールのみの操作で統一していこうと言うな話でまとまった。まとまるとすぐにデザインの人がイメージ図を渡してくれたのでそのとおりに実装した。ボールを-x軸に移動させて画面外に出たらゲームをスタートさせるというギミックである。なぜこの様なデザインにしたのかというと、対象が子供と言う点からチュートリアルなどを設けても読まないと仮定した結果こうなった。クリア条件や、スコアなど教える必要があると考えたが、移動したら色が塗られるという最低限の事を教えれば良いという考えでまとまった。ここで実装することは

  • UIの配置
  • ボールの操作の実装
  • シーンのロード
  • タイルの色塗り
imagetaitle

渡されたイメージ図

ここでつまずいたのがタイルの色塗りとボールの操作の2つであった。タイルの色塗りって言われてもほどんどがUIで実装されてたので、どうしようかなと…..10分くらい悩んだ挙句背景と同じマテリアルをキューブオブジェクトにアタッチするというやり方で妥協した。今考えたら、panelオブジェクトのほうが良かったかも……
ボールの操作に関しては完全に知識不足でつまずいてしまった。。マウスの座標をInput.mousepositionで取っていたのが原因でこれはピクセル座標を返すということを知らなかった。(ドキュメント読もうな)
ボールがうまく移動しなくて講師に相談したらInput.GetAxis(“mouse x”)がいいよと教えてもらった。これは移動量を返してくれるとのこと。無知って罪ですな。書いてるとき気がついたんですがボールをx軸に動かしまくった時のことを考えてなかったorz

2日目……

2日目のタスクは以下のとおり。

プログラムの統合

メインプログラマーさんが作ったメインシステムを統合する作業。Git使おうと提案したんが他者が使ったことがないそうなので気合でなんとかした。8割型書き換えてしまったとは言えない…..
コメントアウトをしていたとしても他者の書いたソースコードって読みにくいですね。読んでて自分ならこうやって書くのになぁって思った。(だから書き換えてしまったんだが…..)3時間くらいで終わらせるつもりだったが、倍くらいかかってしまった。

リザルト画面の作成

これもデザインの人が決めてくれた画面配置の図を見て黙って実装していくという作業をした。
実装内容は以下のとおり。

  • メイン画面のスコアをドラムロール(上昇してる時も表示する)で表示
  • スコアから評価(まだまだ、普通、すごい!など)
  • 塗ったマップを表示
  • スコアからの評価後x秒後スタート画面へもどる

ドラムロールスコアはこんなかんじのやつ。実装方法は

private int point=0;
public int score;
public int pointspeed:

void Start(){
       point=0;
}
void Update{
      if(point<score){
             point=poitnt+pointspeed:
             debug.log(point);
}

やってることはシンプルでscoreになるまでpointを加算していくというだけ。以上のタスクを実装し終えたらゲームループができる(らしい)のでちゃっちゃと実装してループさせてみた

が……….

メイン画面のFPS落ちがやばい………..平均5fpsくらい
原因はマップを生成するために作成したcudeたち。あとで数えてみたところ2000個強あったそうだ(プランナー談)。ので追加タスク

処理落ちを何とかする

教授によると画面外のオブジェクトはレンダリングをoffにするなどすれば最適化は可能という情報を頂いので調べてみたところこちらに答えが載ってた。
注意点としてはMeshRenderをoffにするとvoid OnWillRenderObjectは呼ばれないというところです。ので少しでも軽くするために当たり判定をoffにした所20fpsまで回復しました。
他にもブロックにアタッチしてた物理演算を切る、影をなくすなどして試行錯誤したら最終的に60fpsまで回復することに成功しました。よかった。

3日目…….

3日目のタスクです。発表当日ということもあり実際の作業時間はすくないはずだった

プログラム統合

またプログラムの統合です。二度とやりたくないです。

BGM,SEの実装

メインプログラマーさんが自分がプログラムを統合している最中にBGM,SEの実装について調べてたらしく、AudioManagerというC#ファイルをつかって実装できたらしいですが、ゲームのソースコードはほとんど自分が書いてしまったため音の実装するのが大変だったぽく、コンパイルエラーもでて(実行はできる)バグが増えるということがら自分が実装することになった。(土壇場でタスクを投げられた。)やったことはAudioSourceを取得しpublicで宣言したAudipClipをPlayOneShotに突っ込むだけ。BGM系は直にアタッチした。

デバック

時間が足りなくてやってないっす。いつもそうだよなぁ……

発表

プロジェクタに移したらFPS落ちとUIレイアウトが崩れた

UIレイアウトが崩れたのは自分ミスRender ModeをScreen SpaceをCameraにしなかった。
FPS落ちはそうなるわなとしか思わなかった。

他班も似たような感じだった

他班もUIのレイアウトが崩れてたし、クオリティはどっこいって感じかなと思った。
しかしプレゼンが上手な班があってやっぱり見せ方とかによって変わってくるなと感じた。

我が班が1番じゃないかな????

マップをCudeを敷き詰めて実装するというやり方をしていたのは自分の班だけだった。
他班は特定のエリアのオブジェクトを倒すとそのエリアを取得すると言った感じ塗るとは少し違う。しかし自分たちの班は細かくぬれるという利点を活かしきれていないないと思っている。

まとめ

ゲームジャム面白いじゃないか!

いろいろ不満点もあるが完成したあとのプレゼン→他班のゲームを体験→実装の話のくだりは最高に楽しかった。これがゲームジャムの醍醐味なのかもしれない。

プランナーって重要なんだな

プランナーがいることで自分は何をすればいいのかが理解出来て自分のやることに集中することができた。プランナーさんはプラグラマー様と言ってるが自分からしたらプランナー様なんだよなぁ……

Gitは大切

言うまでもないって感じ。複数人のプログラマーがいるのならGitを導入すべきだ。
もう2度とあんな作業はしたくない。

 

正直今回のゲームジャムは技術的向上はなかったが、チーム作業で必要なものというのは学ぶことが多かった。今回学んだことをうまく活用していきたいと思う。

次は福島ゲームジャムかな……

参考サイト

Unity DOCUMENTATION Input.GetAxis

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中