CLOSE

ゲームロジックからデザインまで完全オリジナルの押し相撲ゲーム「オシマル」の紹介(全1記事)

UnityとC#でゼロからゲーム開発 小学生エンジニアが得た知見

2019年7月6日、株式会社サイバーエージェントが主催するイベント「Battle Conference U30」が開催されました。30歳以下のエンジニアによる30歳以下のエンジニアのための技術カンファレンスである本イベントには、さまざまな領域で活躍する若手が登壇。企業の枠を超えて、自身の技術・事業・キャリアに関する知見を発表しました。「ゲームロジックからデザインまで完全オリジナルの押し相撲ゲーム『オシマル』の紹介」に登壇したのは、Tech Kids School生徒・宮城采生氏。

小学生エンジニアの開発エピソード

宮城采生氏:小学生開発者の宮城采生です。よろしくお願いします。

(会場拍手)

僕は2年前から「ふうセン」「オシマル」の2つのゲームアプリを作ってきました。運良く両方とも大会で優勝しています。開発環境はMacでUnityとC#を使っています。昨年末から4ヶ月ほど「Kids Creator's Studio SEASON2」(KCS)に参加しました。

プレゼン前半はPV動画を使い「オシマル」の紹介になります。後半はスライドにてRaycastまわり、自分なりのコードルールや工夫をお話します。ではさっそくPVを見てください。

この動画はKCSで作りました。

簡単なストーリーを考え、絵コンテを作成しました。このとき初めて絵コンテについて学びました。Premiere Proはフェード、カメラムーブ、音声を付けました。Illustratorでは構図やパースを取りました。

Photoshopで絵を描きました。また、レイヤーで画像エフェクトを作りました。スマートオブジェクトでエレベーターの動きも付けました。レイヤーの前後処理で動物が箱に入るところを表現しました。このシーンはUnityのカメラアニメーションで作りました。ゲーム説明はこの動画を見てください。

このアップデートはKCSの期間中に行いました。マルチモードは対面式にしました。マッチングはお客さんがたくさんいないと見つけられないので、この方法にしました。今回はプロのPVを見てグリーンバック合成でやることにしました。緑の布は、近所で買った普通の布です。

また、KCSのメンターさんから自分を登場させたほうが良いというアドバイスがあったのもきっかけです。「オシマル」はおもしろいのでダウンロードしてください。

Raycast()への道のり

プレゼン後半の内容はこの2つです。

「オシマル」ではブロックの重なりや塗りこみのバグの対処に苦労しました。重なるといっても、この図のようにいろいろあります。このエピソードで未熟な小学生の頑張りを感じてもらえたらと思っています。

1作目の「ふうセン」ではバッチ処理をゲームに反映するのにOnTriggerを使っていました。僕のこのときの方法は、細長いコライダで串刺しをするので重なったオブジェクトの判定に弱いです。

Raycastは引数の理解が難しいのですが、「オシマル」ではこれを使う必要がありました。触った表面の情報がほしい場合、Raycastですべきで、最終的にはスケーリングも併用し問題を解決しました。

次はここにたどり着くまでの経緯です。プロトタイプからあったこのバグはタッチパネルの実装時に目立ちました。ゲームを固めるのを優先し終盤にやっと着手しました。

いざ調べ出すとコリジョンの設定やフィジクスレイヤーを見直しても問題なし。いろいろ考えても原因がわからず家族に相談したところ「上から見ていてもわからない」と言われました。いろいろな角度から見る姿勢が大事ですね。

UnityEditorでカメラを動かして確認をしたら、なんとコリジョンがすり抜けていたのではなくブロック生成時にY軸上に重なっていたんですね。プログラム以前の問題でしたね。想像より簡単な問題で、ちょっとズッコケました。

Raycastはよく使われる手法ですが、パッと見は難しそうなんです。すぐにこれを使えばよかったのですが、使いなれない方法は想定外の不安があり勇気が必要です。しかし、臆病になって「もっと簡単な方法を試そうかな」と考えてしまい、新しいバグを作ることになりました。

iOSだけブロックが氷のように滑ったのでXcodeのプリントで座標を確認するとブロックが少し浮いていて「PCとiOSでなぜ違うの?」と悩みましたが、もう少し考えてみるとそもそも重力が働いていないのが問題と気付きました。

実は数日前にY軸上に積みあがらないよう、生成時のPosYと物理演算のPosYをフリーズしていました。これが残っていたのがバグの原因です。

この対処が多すぎてゲームの調整がしにくいので止めました。夢中でいると迷路にハマりますね。この他にもいろいろ試して遠回りしました。時間もアイディアもなくなり、決心してRaycastを使いました。大会に間に合うには運も必要でしたね。

自分なりのコードルール

僕のコードルールを紹介します。

メンバ変数とローカル変数で先頭の文字を使い分けます。パッと見てわかるのが大事です。変数や関数の名前はどうしても開発中に変えたくなるので、あまり悩まないようにしています。

Unityではインスペクタが最高に便利です。秒間数十回も値が変わる変数も動いているのが見えます。そのためにはpublicとSerializeです。

この画像はステージの配置用データリストです。ファイルを使うほうがスマートですが、まずはインスペクタを利用するのが一番だと思います。

ゲームは型の種類が多いので、覚えるためや見やすさのためにも僕は型を書くようにしています。

Visual Studioのおかげでスペルミスは少ないのですが、計算順や比較演算子のミスはとりあえず動くので、見落としがちです。ですが、絡み合うと解決が難しいですね。簡単な間違いこそ見つけにくく、また、見つけるとへこみます。

VSは強力でも画面上では見つけにくい場合は紙にプリントして確認しました。

難しい関数などは、あまり間違えません。使い方の勘違いはありますが、パターンがだいたい決まっていて使いながらわかってくるので大丈夫です。

慣れてくると少し難しい処理や一気にたくさんのコードを書きたくなります。失敗しやすいので細かくエラーチェックをすべきですが、一発でうまくいくと快感です。

でも、勢いで書いたコードは全部書き直しになることも少なくありません。「恋は盲目」とシェイクスピアはそう言っています。僕のプログラムはそんな感じです。アプリ開発は超楽しいです!

ご清聴ありがとうございました!

(会場拍手)

続きを読むには会員登録
(無料)が必要です。

会員登録していただくと、すべての記事が制限なく閲覧でき、
著者フォローや記事の保存機能など、便利な機能がご利用いただけます。

無料会員登録

会員の方はこちら

関連タグ:

この記事のスピーカー

同じログの記事

コミュニティ情報

Brand Topics

Brand Topics

  • 今までとこれからで、エンジニアに求められる「スキル」の違い AI時代のエンジニアの未来と生存戦略のカギとは

人気の記事

新着イベント

ログミーBusinessに
記事掲載しませんか?

イベント・インタビュー・対談 etc.

“編集しない編集”で、
スピーカーの「意図をそのまま」お届け!