2024.12.19
システムの穴を運用でカバーしようとしてミス多発… バグが大量発生、決算が合わない状態から業務効率化を実現するまで
ゲームロジックからデザインまで完全オリジナルの押し相撲ゲーム「オシマル」の紹介(全1記事)
リンクをコピー
記事をブックマーク
宮城采生氏:小学生開発者の宮城采生です。よろしくお願いします。
(会場拍手)
僕は2年前から「ふうセン」「オシマル」の2つのゲームアプリを作ってきました。運良く両方とも大会で優勝しています。開発環境はMacでUnityとC#を使っています。昨年末から4ヶ月ほど「Kids Creator's Studio SEASON2」(KCS)に参加しました。
プレゼン前半はPV動画を使い「オシマル」の紹介になります。後半はスライドにてRaycastまわり、自分なりのコードルールや工夫をお話します。ではさっそくPVを見てください。
この動画はKCSで作りました。
簡単なストーリーを考え、絵コンテを作成しました。このとき初めて絵コンテについて学びました。Premiere Proはフェード、カメラムーブ、音声を付けました。Illustratorでは構図やパースを取りました。
Photoshopで絵を描きました。また、レイヤーで画像エフェクトを作りました。スマートオブジェクトでエレベーターの動きも付けました。レイヤーの前後処理で動物が箱に入るところを表現しました。このシーンはUnityのカメラアニメーションで作りました。ゲーム説明はこの動画を見てください。
このアップデートはKCSの期間中に行いました。マルチモードは対面式にしました。マッチングはお客さんがたくさんいないと見つけられないので、この方法にしました。今回はプロのPVを見てグリーンバック合成でやることにしました。緑の布は、近所で買った普通の布です。
また、KCSのメンターさんから自分を登場させたほうが良いというアドバイスがあったのもきっかけです。「オシマル」はおもしろいのでダウンロードしてください。
プレゼン後半の内容はこの2つです。
「オシマル」ではブロックの重なりや塗りこみのバグの対処に苦労しました。重なるといっても、この図のようにいろいろあります。このエピソードで未熟な小学生の頑張りを感じてもらえたらと思っています。
1作目の「ふうセン」ではバッチ処理をゲームに反映するのにOnTriggerを使っていました。僕のこのときの方法は、細長いコライダで串刺しをするので重なったオブジェクトの判定に弱いです。
Raycastは引数の理解が難しいのですが、「オシマル」ではこれを使う必要がありました。触った表面の情報がほしい場合、Raycastですべきで、最終的にはスケーリングも併用し問題を解決しました。
次はここにたどり着くまでの経緯です。プロトタイプからあったこのバグはタッチパネルの実装時に目立ちました。ゲームを固めるのを優先し終盤にやっと着手しました。
いざ調べ出すとコリジョンの設定やフィジクスレイヤーを見直しても問題なし。いろいろ考えても原因がわからず家族に相談したところ「上から見ていてもわからない」と言われました。いろいろな角度から見る姿勢が大事ですね。
UnityEditorでカメラを動かして確認をしたら、なんとコリジョンがすり抜けていたのではなくブロック生成時にY軸上に重なっていたんですね。プログラム以前の問題でしたね。想像より簡単な問題で、ちょっとズッコケました。
Raycastはよく使われる手法ですが、パッと見は難しそうなんです。すぐにこれを使えばよかったのですが、使いなれない方法は想定外の不安があり勇気が必要です。しかし、臆病になって「もっと簡単な方法を試そうかな」と考えてしまい、新しいバグを作ることになりました。
iOSだけブロックが氷のように滑ったのでXcodeのプリントで座標を確認するとブロックが少し浮いていて「PCとiOSでなぜ違うの?」と悩みましたが、もう少し考えてみるとそもそも重力が働いていないのが問題と気付きました。
実は数日前にY軸上に積みあがらないよう、生成時のPosYと物理演算のPosYをフリーズしていました。これが残っていたのがバグの原因です。
この対処が多すぎてゲームの調整がしにくいので止めました。夢中でいると迷路にハマりますね。この他にもいろいろ試して遠回りしました。時間もアイディアもなくなり、決心してRaycastを使いました。大会に間に合うには運も必要でしたね。
僕のコードルールを紹介します。
メンバ変数とローカル変数で先頭の文字を使い分けます。パッと見てわかるのが大事です。変数や関数の名前はどうしても開発中に変えたくなるので、あまり悩まないようにしています。
Unityではインスペクタが最高に便利です。秒間数十回も値が変わる変数も動いているのが見えます。そのためにはpublicとSerializeです。
この画像はステージの配置用データリストです。ファイルを使うほうがスマートですが、まずはインスペクタを利用するのが一番だと思います。
ゲームは型の種類が多いので、覚えるためや見やすさのためにも僕は型を書くようにしています。
Visual Studioのおかげでスペルミスは少ないのですが、計算順や比較演算子のミスはとりあえず動くので、見落としがちです。ですが、絡み合うと解決が難しいですね。簡単な間違いこそ見つけにくく、また、見つけるとへこみます。
VSは強力でも画面上では見つけにくい場合は紙にプリントして確認しました。
難しい関数などは、あまり間違えません。使い方の勘違いはありますが、パターンがだいたい決まっていて使いながらわかってくるので大丈夫です。
慣れてくると少し難しい処理や一気にたくさんのコードを書きたくなります。失敗しやすいので細かくエラーチェックをすべきですが、一発でうまくいくと快感です。
でも、勢いで書いたコードは全部書き直しになることも少なくありません。「恋は盲目」とシェイクスピアはそう言っています。僕のプログラムはそんな感じです。アプリ開発は超楽しいです!
ご清聴ありがとうございました!
(会場拍手)
2024.12.20
日本の約10倍がん患者が殺到し、病院はキャパオーバー ジャパンハートが描く医療の未来と、カンボジアに新病院を作る理由
2024.12.19
12万通りの「資格の組み合わせ」の中で厳選された60の項目 532の資格を持つ林雄次氏の新刊『資格のかけ算』の見所
2024.12.16
32歳で成績最下位から1年でトップ営業になれた理由 売るテクニックよりも大事な「あり方」
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
PR | 2024.12.20
モンスター化したExcelが、ある日突然崩壊 昭和のガス工事会社を生まれ変わらせた、起死回生のノーコード活用術
2024.12.12
会議で発言しやすくなる「心理的安全性」を高めるには ファシリテーションがうまい人の3つの条件
2024.12.18
「社長以外みんな儲かる給与設計」にした理由 経営者たちが語る、優秀な人材集め・会社を発展させるためのヒント
2024.12.17
面接で「後輩を指導できなさそう」と思われる人の伝え方 歳を重ねるほど重視される経験の「ノウハウ化」
2024.12.13
ファシリテーターは「しゃべらないほうがいい」理由 入山章栄氏が語る、心理的安全性の高い場を作るポイント
2024.12.10
メールのラリー回数でわかる「評価されない人」の特徴 職場での評価を下げる行動5選
Climbers Startup JAPAN EXPO 2024 - 秋 -
2024.11.20 - 2024.11.21
『主体的なキャリア形成』を考える~資格のかけ算について〜
2024.12.07 - 2024.12.07
Startup CTO of the year 2024
2024.11.19 - 2024.11.19
社員の力を引き出す経営戦略〜ひとり一人が自ら成長する組織づくり〜
2024.11.20 - 2024.11.20
「確率思考」で未来を見通す 事業を成功に導く意思決定 ~エビデンス・ベースド・マーケティング思考の調査分析で事業に有効な予測手法とは~
2024.11.05 - 2024.11.05