Unityでのアプリ開発 – Playgramができるまで
このブログ記事は、朝日中高生新聞2021年4月25日号の連載「プログラミングでかわる!?私たちのミライ」第6回と合わせてお読みください。朝日中高生新聞に掲載された記事全文はこちら(転載許可取得済み)。
私たちPreferred Networksが開発するプログラミング教材「Playgram」は、Unity(ユニティ)というゲームエンジンを使って作られています。Unityは個人では無料でダウンロード・利用することができます。
Unityには物理エンジンやレンダリングといった、3D/2Dのゲームづくりに必要な基本的な機能がそろっていて、初心者からプロまで、幅広い人たちがゲーム作成をすることができます。

Unityでゲームが作れることはわかりました。では、実際にアプリやゲームを開発するときには、どんな手順で作るのでしょう?
今回はUnityでPlaygramがどのように作られているのか、その裏側を少しのぞいてみましょう。
1. プロジェクト(Project)を作る
プロジェクトというのは、必要な設定ファイルやプログラム、3Dモデルや画像や音楽など、ゲーム作成に使われる全てのファイルをまとめたものです。ゲームに使われる3Dモデルや画像などの素材のことを「アセット: Asset」と呼びます。
まずは新しいプロジェクトを作ったり、既にあるプロジェクトを開いたりするところから始めます。
2. シーン(Scene)を作る
「シーン: Scene」という言葉は、映画などでも使われますね。日本語だと「場面」と訳すのが良いでしょう。Unityのシーンも同じような意味で、一つの画面を指すと思ってください。
Playgramでは、「タイトル画面」「ホーム画面(ハカセの研究所)」「ステージ」などのたくさんのシーンがあります。このシーンの中に3Dの「もの」(オブジェクト)を配置していくことで、見た目を作り上げていきます。ゲームの中で、複数のシーンの間を行き来することもできます。
3. 3Dモデルをインポートする
「3Dモデル: Model」は、ロボットやハカセ、研究所本体など、Playgramの中に出てくるあらゆる立体の形を定義しています。
でも、形だけでは色がついていません。「テクスチャ: Texture」と呼ばれる画像を用意して、立体の形に沿って貼り付けます。ふつう、テクスチャは3Dモデルを切り開いたようなイラストの集合です。パーツそれぞれに画像ファイルを作るのではなく、ファイル容量の節約のためにいくつかのパーツをまとめて一枚の画像にすることが多いです。

これを形状の表面に沿って貼り付けることで、カラフルな3Dモデルになります。
また、金属はプラスチックと違って光を強く反射したり、逆にガラスは反射せずに光を通したりします。こういった光の当たり方の違いや見え方をシミュレーションするのが「レンダリング: Rendering」という手順です。「マテリアル: Material」と呼ばれる設定や、「シェーダ: Shader」と呼ばれるレンダリングのアルゴリズムなどを選ぶことで、リアルな見え方やアニメ風の見え方などをコントロールできます。これも自分で一から作ることはあまりなく、だいたい必要なものは最初からUnityに入っています。
3Dモデル自体はどのように作られているのでしょう?簡単なものならUnityで作ることもできますが、多くの場合はBlender(無料)やMaya(有料)と呼ばれる、モデリングソフトを使います。
3Dモデルの中でも、人のように「アニメーション: Animation」が必要なものがあります。「ボーン」と呼ばれる骨格を定義して、動き(モーション: Motion)をつけてあげます。
3Dモデルはフリーのものもたくさん公開されているので、自分で作らなくても開発を始めることができます。「アセットストア(https://assetstore.unity.com/)」では、無料で使えるアセットもたくさん配信されています。
4. パーツを配置する
シーンの中に、3Dモデルや画面などのパーツを「ゲームオブジェクト: GameObject」として配置していきます。
映画撮影のようにカメラやライトを配置したり、角度を変えることで、どのように見えるかを調整していきます。

ただし、ものを置いただけでは何も出来ません。
「物と物がぶつかる」や、「ボタンが押される」などの処理はどうすればいいのでしょう?
5. プログラミングをして、スクリプトをつける
ここで、ようやくプログラミングの登場です。Unityでは、それぞれのゲームオブジェクトに「スクリプト: Script」を「つける」ことで、ゲームオブエジェクトの挙動を変えることができます。スクリプトとプログラムは同じような意味です。

3Dオブジェクトだけでなく、ボタンなどもプログラムできる「ゲームオブジェクト」です。
Unityのスクリプトでは、Playgramで出てくる「イベント処理」のように、例えば「開始時」「ボタンが押されたとき」「〜とぶつかったとき」「一定周期で実行」のような「イベント」に対してプログラムを書いていきます。
UnityではC#というプログラミング言語を使います。
順次処理や繰り返し、条件分岐など、あらゆるプログラミングの技を駆使して、ゲームオブジェクトの動き方を定義したり、他のゲームオブジェクトに別の影響を与えたりしていきます。
6. テストプレイをする
Unityには、実際にアプリにした時にどのように動くのかを試すことができる機能が入っています。ここで試しながら、少しずつアプリを開発していきます。
時にはバグを見つけて直したり、実行に時間がかかって動きが遅くなる処理をチューニングしたりといったことも必要になります。
7. アプリにビルド(Build)する
最後に、プロジェクトをアプリとして「ビルド: Build」します。これは、実際にダブルクリックして開けるPCアプリや、スマホアプリとして配信するための準備です。
Unityは「クロスプラットフォーム」と呼ばれる、WindowsやMac、スマホアプリやブラウザアプリなど色々な端末が読み込める形式に出力できる機能を持っているので、アプリをどこで使うかをあまり意識する必要がないのもいいところです。
Unityで作られているゲームには、皆さんがよく知っているものもたくさんあります。こういったゲームも、基本的には同じようにして作られているはずです。
まとめ
記事で触れられていたように、Unityでのアプリ開発では、開発者が物理エンジンやカメラなど、色々なアプリ・ゲームに共通する部分がすでに用意されています。必要に応じて難しい事もできるようになっているので、初心者からプロまで幅広いユーザーが扱えるのが魅力です。
Playgram自身もUnityで作られていますし、またPlaygramで学ぶことのできるイベント処理などのプログラミングの概念はUnityにも共通するものです。
最初に書いたように、Unityは個人では無料でダウンロード・利用できます。ゲームづくりって、難しそうに見えて、実はできそう?だと思ったら、プログラミングやUnityについて勉強してみるといいでしょう。
チュートリアルもたくさん用意されています。多くは英語ですが、日本語のチュートリアルもあります。
ゴールデンウィークにチャレンジしてみるのはどうでしょうか?