5次元のカオス

南の島の学生がつらつらと日々を書き連ねます

GGJ 2014に参加してきました

GGjとは?

Global Game Jamは2009年から毎年1回行うイベントです。

ゲーム開発者・素人・学生問わず48時間で世界共通のテーマでゲームを作ります。

今回は63ヶ国の300箇所で開催!

というハッカソンのようなイベントです.

atndのリンク:GGJ2014沖縄宜野湾会場

Facebookでこのイベントを見かけて、おもしろそうだと興味を持ち,

2014 01/25(土)09:00 ~ 2014 01/26(日)18:00 までガッツリ参加してきました.

作成したゲームは以下からDLできるので、興味のある方はぜひプレイして感想をください!

(六戸屋(ROKUTOYA) | Global Game Jam

なにをやったのか?

  • 主催者からテーマが発表される(全世界共通のテーマ)
  • チーム発表
  • ゲーム開発
  • 発表
  • 試遊会

イベント流れは上記のとおりです.

イベントが始まると主催者からテーマが発表されます.

今回のGGJのテーマは

- We don't see things as they are, we see them as we are.

- 日本語訳:私達は物事をあるようには見ないで、私達が在るように見ている

というアナイス・ニン(フランスの著作家)の語録から引用されたフレーズでした.

このテーマについてチームで話し合い, ゲームを作っていく流れになっています.

ゲームを48時間以内に完成させればツール、エンジン、コード言語等は何を使ってもokとのことだったので

今回はチームでUnityを洗濯して開発することになりました.

Unity について

Unityとは、統合開発環境を内蔵し、複数のプラットホームに対応する
ユニティ・テクノロジーズが開発したゲームエンジンである。
ウェブプラグイン、デスクトッププラットフォーム、ゲーム機、携帯機器向けのコンピュータゲームを
開発するために用いられ、100万人以上の開発者が利用している[2]。
[wikipediaより引用]

ちなみに開発言語は, JScript/C#/Boo です.

Unity自体に無い機能はプラットフォームの開発言語でプラグインを書けたりと

色々なプラットフォーム上で動作させることができる なんというかすごいやつです(雑).

僕自身はunity初心者というかドットインストールで基本操作を覚えたぐらいだったのですが、

それでも十分使いやすく、調べれば色々とリファレンスが出てくるため、特に困ることもなく

使うことができました.

どんなゲームを作ったか?

僕達のチームは、テーマを過大解釈?して、"見えないもの"を取り入れたゲームを作ろうということになり

見えないもの = 目隠し = スイカ割り という謎の結論に達しました(テンションって怖いですね).

またそこからさらに紆余曲折あり、スイカを爆発させたいという結論に落ち着き?

スイカが主人公のゲームを作ることになりました(笑).

迫ってくる見えない壁を音とバイブを頼りに回避しつつゴールを目指すというシンプルな横スクロールゲームです.

以下が作ったゲームのプレイ画面です.

タイトル:Waterelon Burst

ちなみにチーム名はお昼ご飯を大戸屋で食べたことから六戸屋になりました.

右下のアイコンになってます.

f:id:pxp_ss:20140201160910p:plain

プレイ画面

スイカを転がしていき、迫り来る見えない壁をバイブとホイッスルの音を頼りに、ジャンプで避けていきます.

f:id:pxp_ss:20140201160922p:plain

爆発するスイカ

透明な壁に挟み込まれるとスイカが爆発します.(ちょっとグロ(ry. ....

f:id:pxp_ss:20140201160926p:plain

リザルト

スコアが表示されます!

f:id:pxp_ss:20140201160914p:plain

どの部分を担当したか?

主にゲーム中のプレイヤーの動きに関する部分を担当しました.

  • プレイヤーのジャンプ (2段ジャンプ)
  • ステージが進んでいる間の回転処理
  • SEの再生
  • スピードアップの処理
  • スコアの計算 / 表示
  • ゲーム部分のプログラムのマージ

ちょっとした演算処理

  • 落下運動

高さを指定するために自由落下の式を用いて高さを指定できるようにしています.

f:id:pxp_ss:20140201160824p:plain

float velocity = Mathf.Sqrt(2 * gravity * jumpHeight);

※ g = 重力加速度 = Physics.gravity.y

  • スコア計算

今回のゲームでは距離を基にスコアに反映するようにしています.

f:id:pxp_ss:20140201160809p:plain

int score +=  (int)Mathf.Log(speed * Time.deltaTime);

※ スコア調整のためにlogを使って値を調整しています.

※ 今思えば当加速度運度の式をを使った方が良かったですね...(汗)

Unityで便利だと思ったもの

Raycast を接触判定用に使用しています.

地面と接地すると、ジャンプの回数をリセットしています.

<p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/p/pxp_ss/20140201/20140201160926.png" alt="f:id:pxp_ss:20140201160926p:plain" title="f:id:pxp_ss:20140201160926p:plain" class="hatena-fotolife" itemprop="image"></span></p>

// reset jump param
float sizeY = transform.localScale.y / 2f;
if (Physics.Raycast(transform.position, Vector3.down, sizeY)){
    jumpCount = 0;
}

raycastを使ってボタン判定とかもできたりしてすごく便利だなーと思いました.

感想とか

面白そうだな〜という雰囲気だけで参加を決めたのでもっとGGJについて調べてから

参加するべきだと思いました.

最初の企画の時点で、新規性やループのためのアイデアがなにもなく勢いで作ってしまったことが

反省点だと思っています.

あとは、チームに余力があるように見えたのでもっと超大作を作れたと思うことかな...

(泊まり覚悟できたのに僕以外のメンバー11時ごろには家に帰っちゃうし, あんまりハッカソンっぽくなかった)

ただ、僕自身としてはUnity初心者にも関わらず1つのゲームをきちんと"仕上げる"ことができたので満足してます.

やっぱりこういうイベントだからか、「完成しなかった〜」と悔しがるチームもあったので、

こういうふうなゲームを作ろうと打ち合わせを行い実際にそれに近い形に仕上がったのは大きな成果だと思いたいです.

途中からプロの音楽家の方がBGMやSEを製作してくれたり、きちんと仕事しているデザイナーの方と一緒に製作できたり

普段では関わることができない珍しい人たちと関わることもできたのでGGJに参加して良かったと思いました.

参考