
ゼロからのUnity(10)
シーンの遷移とビルドを学ぼう
■シーンの遷移
今まではひとつのシーンの中で作業していましたが、ひとつのシーン内にタイトル画面・メニュー画面・プレイ画面など何でもかんでも詰め込むと収集がつかなくなってしまいます。
それを避けるためにも、表示内容が大きく変わる画面遷移がある場合はシーンを分けるのがオススメです。
(ステージクリア型のアクションゲームでは、ステージごとにシーンを分けたりもするようです。)
■タイトル画面のシーンを作成する
では、さっそくタイトル画面のシーンを作成してみましょう。
メニューから、File->New Sceneを選択し、空っぽのシーンを開きます。
タイトル画面ということで、背景画像・タイトル・ゲームスタート用のボタンを配置してみました。
ひよこちゃんのイメージで全面黄色にしましたが、目がチカチカしてきました。皆さんはぜひ別の色を使ってください。
UI作成はゼロからのUnity(6)で扱ったUnity UIを使えばサクっとできますので、トライしてみましょう。
ゼロからのUnity(6)
https://mynavi-agent.jp/it/geekroid/2015/11/unity6.html
■TitleSceneからGameSceneに遷移させる
続いて、ボタンにシーン遷移のためのスクリプトをひも付けます。
StartButton.cs
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using UnityEngine.SceneManagement;
[RequireComponent(typeof(Button))]
public class StartButton : UIBehaviour
{
protected override void Start()
{
base.Start();
// Buttonクリック時、OnClickメソッドを呼び出す
GetComponent<Button>().onClick.AddListener(OnClick);
}
void OnClick()
{
// 「GameScene」シーンに遷移する
SceneManager.LoadScene("GameScene");
}
}
ここまでの作業が完了したらシーンを保存しておきましょう。
名前は「TitleScene」とします。
余談
シーン遷移とは関係ありませんが、スクリプト内にちょっとしたテクニックを含めてみました。
GetComponent()を実行すると、対象のコンポーネントが存在しなかった場合はnullが返ります。
コンポーネントのアタッチを忘れてしまうとゲーム実行時にNullPointerExceptionが発生してしまうわけです。
そこでRequireComponent属性をうまく使うと、このスクリプトをひも付けたゲームオブジェクトに指定したコンポーネントが存在することを保証できます。
(スクリプトアタッチ時、対象のコンポーネントが存在しなければ自動で追加されます)
これを使えばコンポーネント絡みのエラーを減らすことができ、チョッピリ幸せになれます。
■GameSceneからTitleSceneに遷移させる
ついでにGameSceneからTitleSceneへの遷移も実装しておきましょう。
ひよこちゃんが落下した際に実行されるGameOver.csを下記のように書き換えます。
GameOver.cs
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using UnityEngine.SceneManagement;
public class GameOver : MonoBehaviour
{
// MessageTextゲームオブジェクト
public Text messageText;
/// <summary>
/// Box Collider 2Dの衝突判定時に呼ばれる
/// </summary>
/// <param name="other">Other.</param>
void OnTriggerEnter2D(Collider2D other)
{
// 衝突したのがひよこちゃんかどうか判定
if (null != other.GetComponent<Hiyoko>())
{
// メッセージを変更
messageText.text = "GAME OVER";
// メッセージを表示する
messageText.gameObject.SetActive(true);
// シーン遷移コルーチン開始
StartCoroutine(GoToTitleSceneCoroutine());
}
}
/// <summary>
/// TitleSceneに遷移させるコルーチン
/// </summary>
/// <returns>The to title scene coroutine.</returns>
IEnumerator GoToTitleSceneCoroutine()
{
// 5秒間待つ
yield return new WaitForSeconds(5f);
// TitleSceneに遷移
SceneManager.LoadScene("TitleScene");
}
これでゲームオーバーの5秒後、自動でTitleSceneに遷移するようになりました。
■シーンをビルド対象に追加する
さて、遷移ができたところでさっそく実行!・・・といきたいところですが、ここはグッとこらえてシーンをビルド対象に追加しておきましょう。
これをやっておかないと、ビルドしたゲームで遊ぶとき「そんなシーン無いよ!」と怒られちゃいます。
まずはFile->Build Settings...でビルド設定のダイアログを開きます。
ダイアログ上部に「Scenes In Build」があり、ここにビルド対象のシーンが一覧表示されます。
現在開いているシーンを追加する場合は「Add Open Scene」ボタンを、その他のシーンを追加する場合はProjectビューからシーンをドラッグ&ドロップすればOKです。
なお、ゲームの起動時には一覧の一番上にある0番のシーンが読み込まれます。
シーンの順番はドラッグ&ドロップで入れ替えられますので、一番上にはスプラッシュ画面やタイトル画面など、相応しいシーンを配置しておきましょう。
余談
Unityでゲームをビルドすると、ビルド対象に追加したシーンのみがゲームに含まれます。
「ビルドしないシーンなんて作る必要ないんじゃない?」と思われるかもしれませんが、デバッグ用のシーンなどはリリース版に含める必要がありません(というか含めたくないですよね)ので、この設定が生きてくるわけです。
さて、準備ができましたので実行してみましょう。
うまく画面遷移できていますね!
@動画
https://youtu.be/RQKC-KQh-N0
■ゲームをビルドする
それでは最後に、ゲームのビルド方法についてご説明します。
ゲームをビルドすると、様々なプラットフォームでのプレイが可能になります。
PC向けにSteamで販売したり、Android向けにGooglePlayでリリースしたり、はたまた身内だけで楽しんでみたり。
色々やってみたい事はあるかと思いますが、全てはビルドするところから始まります。
■ビルドを実行してみよう
ビルドは先ほどシーン追加で使用したビルド設定のダイアログから行うことができます。
ダイアログの左下にビルド対象のプラットフォーム一覧があります。
PC、Mac、Android、iOS、ちょっと下にスクロールするとPS4やXbox 360などもあります。
夢は広がりますね!
(ただし、コンシューマー機向けビルドは別途ライセンス契約が必要なようです。)
今回はMac向けのビルドをしてみますので、「PC, Mac & Linux Standarone」を選択します。
ダイアログ右側に表示されるTarget Platformで対象のプラットフォームを選択、ArchitectureでCPUのアーキテクチャを選択します。とりあえず動かすだけなので、アーキテクチャはx86(32bit)で良いでしょう。
あとはBuildボタンを押して保存先を指定すれば、Mac用のゲームのビルドがスタートします。
(AndroidやiOSなど、プラットフォームによっては細かなビルド設定が必要な場合もあります。)
ビルドが終わったら出来上がったファイルを開いてみましょう。
ゲームで遊ぶことができますよ!
■ビルドしたいプラットフォームが選択できないとき
Unity5では、Unity本体のインストール時にどのプラットフォームでビルドできるようにするか選択する形になっています。
任意のプラットフォームでビルドできない場合はビルド用コンポーネントが無い可能性がありますので、ビルド用コンポーネントを選択し直してUnityを再インストールしましょう。
(以下はUnityDownloadAssistantでのコンポーネント選択画面です。
■最後に
全10回に渡ってお送りしたゼロからのUnity、いかがでしたでしょうか。
初心者向けの連載ということでUnityの触りの部分だけご説明しましたが、ゲーム開発はとっても奥深いものです。
ゲーム開発の流れをざっくりと追ってみますと、企画・開発・レベルデザイン・テストなどの工程があり、リリースに至ります。
(個人開発ならこのへんは気の赴くままに進めても良いと思います)
リリースすると次は不具合との戦いがスタートします。
実際にユーザにプレイしてもらうと、想像していなかったような不具合が出てきます。
大規模なテストプレイを行ってからリリースできればベストですが、中々そうもいきません。
ヒマを持て余したゲーム好きの友人がたくさん居れば助かるんですけどね^^;
ただ、何だかんだ言いつつも、勢いでやっちゃえば大抵何とかなるもんです。
最初はやる気だけで良いんです。例え内容が酷くても全然良いんです。
自分が作ったゲームを見知らぬ人に遊んでもらえる、それだけで得ることが山程ありますし、フィードバックが貰えれば次へのアイデアやモチベーションもモリモリ湧いてきます。
時には辛辣なフィードバックを頂戴することもありますが、その時はその時。
夕日に向かって泣きながら「クソゲーって言うなー!」と叫んで、気分がスッキリしたらまた頑張りましょう。
いつか皆さんが作ったゲームをプレイできることを楽しみにしております!
本稿でゲーム制作に興味を持たれた方は、制作会社への転職を検討してはいかがでしょうか? 転職エージェントを利用して、あなたの適職を見つけましょう!
qnoteスマホアプリ開発チーム技術主任。PHP・Android・iOS・Unityなど複数のプラットフォームでの開発を行う。
しばしば7匹の先輩猫社員たちにイスを占領される。