【Unity】ゲームに使えるシーン切り替えを実装する手順(2D)


「一つのシーンで今まで色々やってきたけど、もうちょっとゲームらしさを出したい」と思ったことはありませんか?

私自身Unityをしばらく触って動かしているうちに、ゲームらしい感じにしてみたいという欲が湧いてきたという過去があります。

その時、最初にやってみたのが複数のシーンを使ったシーン切り替えをやってみるということでした。

そこで本記事では、ゲームらしくする第一歩としてシーン切り替えに焦点を絞って、

  • シーン切り替えとはどういうものか
  • シーン切り替えの基本的な使い方
  • 簡易的なゲームを作成してのシーン切り替えの実装

の順でご紹介いたします。

5分くらいで読めますし、ゲームを作る第一歩となるかと思いますので、ぜひご一読ください^^

※本記事の操作キャラクターには「Unity-Chan(ユニティちゃん)」を使用しています。

© Unity Technologies Japan/UCL
参考ページ)ユニティちゃん公式サイト

【導入編】Unityにおけるシーンの切り替えとは

シーンの切り替えってどんなもの?

2Dアクションゲームを例にとって考えてみると、下記の流れでゲームが構築されていることがあります。

 

一般的なゲーム画面の遷移

 

このタイトル画面からゲーム画面への移り変わるような画面の切り替わりをシーン切り替えと呼んでいます。

それではUnityにおいて、シーン切り替えはどのように行えばいいのでしょうか。

シーン切り替え方法

シーン切り替えは、必要とする複数の画面と管理するオブジェクトを用意し、管理するオブジェクトから切り替えの指示を出すことで切り替えが行われます。

 

シーン切り替えのイメージ図

Unityにはこの指示にあたるシーンを切り替えるための関数が用意されているので、それを利用することで簡単にシーンの切り替えの実装ができます。

タイトル画面からゲーム画面へのシーン切り替えを実装

それでは、実際にタイトル画面からゲーム画面へのシーン切り替えを実装していきます。

実装の流れとしては下記になります。

  1. タイトル画面とゲーム画面の2つのシーンを作成
  2. シーン移動をさせるスクリプトを適用するための空オブジェクトを作成
  3. シーン切り替えをするスクリプトを作成
  4. シーン切り替えで読み込みを行うシーンをBuild Settingsで設定

今回使用した環境は下記になります。

  • モデル:MacBook(Ratina,12inch,2017)
  • OS:macOS Mojave 10.14.3
  • CPU:Intel Core i7
  • GPU:Intel HD Graphics  615
  • Unityのバージョン:Unity 2018.3.6

また、キャラクターなどのデータは、「ユニティちゃん 2Dデータ」を使用しています。

ユニティちゃん 2Dデータ

スタート画面とゲーム画面の作成

新規プロジェクトを立ち上げ、初期の画面をタイトル画面とし「Scene_Title」、メニューバーのFile>New Sceneで作成した画面を「Scene_Game」と名前をつけます。

下記の画像のように画面上にアセットデータ内の素材とテキストを配置し、簡単なタイトル画面とゲーム画面を作成します。

タイトル画面

 

ゲーム画面

テキストを配置するやり方については下記の記事を参考にしてみてください。

参考記事→)【Unity uGUI】テキスト(Text)を使いこなす基本設定の方法

空のオブジェクトの作成

タイトル画面のシーンファイルで、シーン移動のスクリプトを適用する空のGame Objectを作成します。

ヒエラルキーウィンドウでCreate>Create Emptyと選択していくことで作成することができます。

空のオブジェクト追加方法

シーン切り替えのスクリプトの作成

シーンを変更するためのスクリプトファイルの作成します。

タイトル画面のシーンファイルを開き、プロジェクトウィンドウでCreate>C# Scriptと選択してファイルを作成し、名前を「SceneChange」としておきます。

スクリプトの編集画面を開き、下記のコードを記述します。

コード内に記述しているUnityEngine.SceneManagementとLoadSceneを使用することでシーンの切り替えが可能です。

LoadSceneModeは、Single(デフォルト)とAdditiveがあり、それぞれ現在のシーンをアンロードする/しないに対応しています。

後者のAdditiveは、マルチシーン・エディティングを活用した開発の際に使われます。

コードの記述が終わったらスクリプトファイルを、空のゲームオブジェクトにアタッチしておきます。

今回のコードでは、キーボードの”s”キーを押すことでタイトル画面からゲーム画面にシーン切り替えするようにしています。

読み込ませるシーンの設定

メニューバーのFile>Build Settingsをクリックし、出てくるウィンドウのScenes in Buildに作成したスタート画面、ゲーム画面の2つのシーンファイルをドラッグ&ドロップします。

ビルドセッティング

ここまで設定できたら実行してみましょう。

正しく設定できていれば下記のような動作になります。

タイトル画面からゲーム画面への遷移

【応用編】簡易的な2Dゲームでシーン切り替えを実装してみよう

シーン切り替えの使い方がわかったところで、シーン切り替えをする簡易的なゲームを作成してみます。

今回作ってみるゲームの仕様は下記になります。

  1. タイトル画面→ゲーム画面→クリア画面の3つの画面の遷移を行う
  2. 障害物を越えて、ゴールを目指す
  3. 穴に落ちたらスタート位置から再開

3つの画面の作成

タイトル画面は作成済みなので、ゲーム画面の拡張とクリア画面の作成を行います。

ゲーム画面は、アセットの素材を使用して下記の画像のように作ってみます。

ゲーム画面の全景

障害物として各所にブロックや穴を配置しています。

クリアのゴールフラグ用のキャラクターを最後に配置しています。

クリア画面は、タイトル画面同様背景とクリアメッセージだけの簡単な作りにしています。

クリア画面

キャラクター制御などの設定

ユニティちゃんを動かすために、ユニティちゃんと床、ブロックなどにコンポーネントの追加とスクリプトの適用を行います。

設定の仕方は下記の記事のPlayerControllerのスクリプトを参考にしてみてください。

参考記事→)【Unity】2Dと3Dのジャンプ移動やアニメーションの実装方法を解説

次に、移動するユニティちゃんの動きに合わせてカメラもついていく必要があるのでカメラコントロール用のスクリプトを作成します。

プロジェクトウィンドウのCreate>C#Scriptを選択し、「CameraController」と名前をつけます。

コードは下記のようになります。

プレイヤーの位置を入れる変数playerPosを用意し、transform.positionで追従するようにしています。

左右の向きだけに追従するように、X座標のみplayerPosを入れています。

実行結果は下記のようになります。

CameraControllerの動作

穴に落下した時の判定の設定

穴に落下した際の当たり判定を設定します。

空のオブジェクトを生成し「Hole」と名前をつけます。

先ほど名前をつけた「Hole」オブジェクトに対し、Box Collider 2DとHoleのタグを作って設定します。

穴のあたり判定

 

落下のあたり判定のタグ

今回は穴に落ちた時に、ゲームの最初に戻るようにゲーム画面のシーンを呼び出すことでスタート位置に戻るようにしています。

 

実行結果は下記のようになります。

 

穴に落ちた時の動作

ゴールについた時の判定の設定

ゴールについた時の判定のあたり判定を設定します。

ゴールにいるキャラクターに対し、Box Collider 2DとClearのタグを作って設定します。

ゴールのオブジェクトのあたり判定

 

ゴールのオブジェクトのタグ

 

クリア画面に遷移させるコードは下記のようになります。

ゴールにいるキャラクターに接触したら、クリア画面を呼び出すよう設定をしています。

 

 

実行結果は下記のようになります。

クリア判定の動作

スクリプトの適用

最終的なゲーム画面のスクリプトは下記のようになります。

 

クリア画面のスクリプトは下記のようになります。

タイトル画面とほぼ一緒ですが、押すキーを”r”としています。

 

 

タイトル画面からクリア画面までの実行した際の動きは下記のようになります。

ゲームの一連の動作

まとめ

いかがでしたでしょうか。

今回はシーン切り替えについて解説していきました。

ゲームらしさを出すためにシーン切り替えは重要な要素になりますので、実際に色々試しながら実装をしてみてくださいね!

この記事が、Unityを学んでいる人の参考になれば幸いです。

合わせて読んでおきたいUnityの関連記事)


この記事はいかがでしたか?
もし「参考になった」「面白かった」という場合は、応援シェアお願いします!