「勉強会に行ってみた!」第12回「Unity勉強会」
event

「勉強会に行ってみた!」
第12回「Unity勉強会」

2015.05.14

ent102_img01.jpg

最近各地でよく開かれているIT勉強会。あなたは参加したことはありますか?
一口に勉強会といっても、企業によるセミナー形式のものから有志による輪講形式のものなど様々ありますし、「行く価値があるのかな?」とか、逆に「自分だとレベルが追いつかないんじゃないか?」みたいに考えてしまって、二の足を踏むことも多いんじゃないかと思います。また、勉強会のテーマについては事前に分かっても、具体的にどんな雰囲気までは分からないことがほとんどです。
そこで実際に勉強会にお邪魔して、こんな雰囲気でしたよ!と紹介するのがこの記事の目的です。「こんな感じなら行ってみようかな」みたいに思ってもらえたらうれしいです。
三土たつお

今回は Unity の勉強会にお邪魔しました。ざっくり言うと、Unityとはゲームを作ってPCのブラウザーやスマホのアプリとして見られるようにできる製品です。今回はハンズオン形式といって、参加者がその場で製品に触りながら進めていく形でした。

会場は代々木。

ent102_img02.jpg

こんな感じで、後ろには「日々是決戦」とか書いてあります。じつはここ、昼間は代々木ゼミナールの教室としても使ってる場所なんだそうです。

ent102_img03.jpg

最初に、イベントを運営する八反田さんから挨拶。「TechBuzz」という勉強会のシリーズを2010年から続けているそうです。「今回は、以前やって評判のよかった内容の再演になります。二回目ということでより分かりやすくなっているんじゃないかと思います」とのことで、期待が高まります。

講師は、株式会社キッズスターの森さん。

ent102_img04.jpg

テーマは「Unity2Dでスカッシュゲームを作る」。対象は超初心者となっています。Unity は、名前はよく聞くんですが実際に触ったことはなかったので、こういう初心者向けの勉強会はありがたいです。スカッシュゲームを1から作るという内容なら分かりもよさそうです。

「今日はウグイの話をします」という森さん。そのときのスライドはこんなふうでした。

ent102_img05.jpg

なんだ?と思っていると次のスライドが。

ent102_img06.jpg

Unity でゲームを作るためのユーザーインターフェースのことをuGUIというらしく、それとウグイとをかけた森さんの渾身のギャグだったのですが、会場はまったくの無反応。

「こんな感じでだだ滑りが通常運転です」という森さんの言葉に、こんどは会場から笑いが漏れました。なるほど。いい感じの雰囲気ですね。

■ いよいよハンズオン

「今日作るのはスカッシュゲームです!」と言いながら、いまから作るものの完成系のデモを実演します。

ent102_img07.jpg

たしかにスカッシュが動いてます。黄色い丸がボールで、これを下の青い人の持つ緑のラケットで跳ね返します。いっけん単純に見えますがこの中には、

・壁やボール、ラケットなどのオブジェクトを配置する
・それらを動かす
・当たり判定をして跳ね返らせる
・カーソルキーの入力によってラケットを動かす

といった、ゲームを作るにあたって欠かせない要素が一通り含まれています。

いきなり手を動かして作る前に、まずは用語の説明から始まりました。Unityの画面を見てそこにボタンとかメニューがあっても、そのボタンがどういう枠組みの中で何をするのかが分からなければ、前に進めませんからね。

ent102_img08.jpg

Asset, AssetStore, GameObject, Component, Scene, Game, Project, Hierarchy, Inspector, Console などの重要な用語を説明した後、いよいよUnity を起動してスカッシュゲームを作り始めます。

■ オブジェクトを配置する

スカッシュゲームに登場するものは、壁、ボール、人とラケット、のだいたい3つです。まずはこれをゲームの中に配置しましょう。ここでは壁の作り方だけを抜粋します。気持ちとしては、白い長方形の画像を作り、それの大きさと位置を調整する感じです。

ent102_img09.jpg

まず、メニューから GameObject > UI > Image を選びます。するとシーンの左下に何か白いものができます。

ent102_img10.jpg

これの大きさや位置を、画面右側のInspector から変えてやります。

ent102_img11.jpg

すると、壁がひとつできました。

ent102_img12.jpg

これをコピーして、位置やサイズを変えることを3回繰り返して残りの壁を作ります。また、ボールについても基本的には同じようにしてシーン内に配置すると、こんなふうになります。

配置しただけですけど、ちょっとそれっぽくなりましたね。Unity ではゲームはいくつかのシーンに分かれ、その中にゲームオブジェクトが配置されるという枠組みになっています。今回は1つのシーンしか使わないので、配置はこれでおしまいです。

■ それらを動かす

ではいよいよボールを動かしましょう。ものが動くと急にゲームっぽくなるし、嬉しくなります。ではどうやって動かすか?

Unityには物理エンジンが搭載されています。ここではボールに重力に従って落ちてもらいましょう。ここで鍵になるのは「コンポーネント」という考え方です。コンポーネントとはゲームオブジェクトの振る舞いを制御するための要素で、それを個別のオブジェクトに割り当てることによって、それらが動くということになります。

なので、ボールに「重力に従う」というコンポーネントを割り当てましょう。ボールを選択した状態で、画面右のInspector から

Add Component > Physics 2D > Rigidbody 2D

を選びます。これでゲームを実行すると

ent102_img13.jpg

でも、ボールが床を突き抜けてます。当たり前です、まだ当たり判定を入れてないからですね。

■ 当たり判定をして跳ね返らせる

今度はボールが床や壁に当たったら跳ね返らせたい。どうするか?
ここでも鍵はコンポーネント(振る舞い)です。「衝突する」という振る舞いを、ボールと壁の両方に割り当ててやればいいんです。まずはボールの Inspector から

Add Component > Physics 2D > Circle Collider 2D

を選んで、「丸く衝突する」という振る舞いをボールに与えてやります。次に当たり判定の範囲をボールの半径にちょうど一致させるために、当たり判定のRadius(半径)の欄を調整します。

次に壁については

Add Component > Physics 2D > Box Collider 2D

から「四角く衝突する」という振る舞いを追加します。同様に当たり判定の範囲を Size の欄で調整します。これでゲームを動かすとどうなるか・・。

ent102_img14.jpg

ボールと壁があたって、くっついたままになりました。デフォルトだと反発しないんですね。反発させるためには、ボールが反発する素材(マテリアル)でできているという要素を追加しないといけません。

メニューから

Asset > Create > Physics2d Material

を選んで、Bounciness(反発係数)を1にして、「Ball」という名前で保存します。次にこれをボールに追加したコンポーネントの Circle Collider 2D の Material の欄にドラッグ&ドロップします。これでボールがちゃんと跳ね返るようになりました。

■ カーソルキーの入力によってラケットを動かす

いよいよ大詰めです。ラケットを動かしてよりゲームっぽくしたいですね。まずはラケットと人をシーン内に配置します。

ent102_img15.jpg

配置する手順はこれまでと一緒です。一つ新しい点は、ラケットをプレイヤーの子要素として追加することです。これでプレイヤーとラケットが一緒に動くようになります。

ラケットはボールを打ち返すものなので、そのための振る舞いも追加します。手順は壁に当たり判定を入れたときと同じです。

それから、カーソルキーの入力によってプレイヤーとラケットを動かすようにしたい。これはさすがに今までのように既存の振る舞いを追加することでは叶いません。スクリプトの出番です。いくつかの言語が使えますが、ここでは C# を使います。

ent102_img16.jpg

これはコードの抜粋ですが、見ればなんとなく推測できると思います。Start() はオブジェクトが作られたときに1回だけ呼ばれるもの。Update()は毎フレーム呼ばれるものですね。

if( Input.GetKey( KeyCode.RightArrow ) ) {
????position.x += 5;
}

の辺りは、カーソルの右キーが押されたらx座標を5足すんだなっていう感じが伝わります。こうして作った新しい振る舞いを、プレイヤーに新しく割り当てます。そしてゲームを実行すると・・。

ent102_img17.jpg

写真だと伝わりづらいですが、この場合だとカーソルキーの入力に応じてプレイヤーが上に動いています。

この後、
・ボールが床にふれたらゲームオーバーとする
・ボールがラケットの右側にあたったら右のほうに跳ね返らせる
とかすることでよりゲーム性が高まりますが、今回はひとまずここまで。無事スカッシュゲームができました。

■ 参加した人の感想は「本で読むよりずっと分かりやすいし、進みも早い」

参加された方の一人に感想を伺いました。Unity については本で独学しているそうなんですが、
「2週間かかってようやく本の半分が読めた。今日は2時間で本の内容を追い越した部分もある」
と言っていました。とくに、これはこういうものという世界観の説明がとても分かりやすかったそうです。ぼくも実際に聞いていて、ステップバイステップの、しかもつまづきそうなところを先回りして補足しながらの説明は分かりやすいと思いました。

■ 主催のHatchUp八反田さんは「勉強会の継続開催を通じてコミュニティを運営している」

最後に、主催者であるHatchUpの八反田さんに、勉強会を開催する上で気をつけていることを伺いました。

ent102_img18.jpg

1つは、勉強会を単発で終わらせないということだそうです。勉強会を通じてコミュニティを運営するという面があるとのこと。
もう1つは「講師と参加者がフラットになるようにしている」ということです。外部から全然関係ない講師を呼んでくるのではなく、参加者がいつか講師になるようにする。そうやって勉強会とコミュニティを育てるということをしているんだそうです。

■ まとめ

ハンズオン形式の勉強会には初めて参加しました。講師の操作する画面を見ながら、自分の手元でも同じように操作するっていうのはとても分かりやすいです。何かを習得するときに一番いいのは、自分より分かってる人にそばについてもらって一緒にやることですよね。疑問があればその場で聞けるし。今回も森さんの他に二人の補助講師が会場を歩いて、随時質問を受け付けていました。

あとは、その場でどんどん形になって動いていくのが嬉しかったですね。ああ、ものを作ってる!という感動がありました。

今回参加した勉強会:
【#TechBuzz】第7回 Unityハンズオン勉強会【テーマ:「Unity 2D (uGUI) でスカッシュゲームをつくる」(再演)】
https://atnd.org/events/64084

三土たつお。1976年生まれ。プログラマー、ライター。プログラマーとしてはふだんPHPを書いてます。
ライターとしてはニフティのデイリーポータルZとかで書いてます。
http://mitsuchi.net/

この記事はどうでしたか?

おすすめの記事

キャリアを考える

BACK TO TOP ∧

FOLLOW