前回
に引き続き、ゲーム制作の手始めにオープニング、エンディング、リザルトなど複数画面を遷移させるまでをやってみようと思います。とは言ったものの、さすがにオープニングやエンディングまで用意する気力はないので、ここでは本当に画面を用意して遷移させるだけとします。
用意するもの
特にありません。お好みで画像を付け替えるならリソースは必要ですが...ここでは簡易的にしか作らないので。
作り方
まずUnityを開き、プロジェクトを作成します。
最初にシーンを2つ作成します。遷移前と遷移後ですね。次にUIを配置します。HierarchyビューでCreate→New Sceneとしてシーンを作成&Save Scenesでシーンを保存、を2回します。シーン名は例えばtitle, gameのような名前で良いでしょう。
これらのシーンはただ配置しただけではダメで、File→Build Settingsでシーン登録しておく必要があります。
ダイアログを開いたら、Assetsにある作成したシーンをドラッグドロップします。
下記、追加例です。
作成したシーンをすべて入れ替えたら、ダイアログをそのまま閉じます。ビルドは最後の最後に行う作業ですので、ここでは他に何もしません。
次に遷移元シーンを開いて(File→Open Scene)、ボタンを配置します。画面左上、Createボタン直下あたりにシーン名が表示されていますね。
ボタンはHierarchyビューからcreate→UI→Buttonを使うとします。
こんな画面になったはず(Scene名は変えているのと、ボタンの位置を調整済みです)。
名前等はInspectorで都度変えましょう。
配置出来たら、スクリプトを用意します。ProjectビューのCreate→C# Scriptをクリックし、新規スクリプトを追加してダブルクリックしましょう。ファイル名は何でも良いです。
下記のようなコードを追加します。
...
using UnityEngine;
using UnityEngine.SceneManagement;
...
public void transitionToNextPage()
{
SceneManager.LoadScene("シーン名");
}
Start()やUpdate()は使わないので削除してOKです。
上記コードを書いたら、
- Hierarchyビューでボタンを選択し、On Click()の右下+をクリックしてボタンをNone(object)へドラッグドロップ
- AssetsのスクリプトをHierarchyのボタンにドラッグドロップ
- Runtime Only横のNo Functionを、ファイル名→関数名にする(例えば下画像ではMainというファイル名のtransitionToQuizという関数名を選択したことになる)
ここまで出来たら、Gameビューにて遷移するか確認しましょう。ボタンクリック後、何もない画面が表示されたら成功です。
これで、「ボタンがクリックされたら遷移」の部分は完成です。
仕組み
Unityではゲームの各画面を、シーンという形で表現します。どの画面もこのシーン単位で作成します。つまり、画面遷移する→シーンを切り替える、ということです。当たり前ですがシーンの切り替えは動的に行うため、C#で実現します。
コードレベルで付け足すと、シーンの切り替えにはSceneManagerというライブラリが予め組み込まれており、昔のように専用のシングルトンクラスを用意したりApplication.LoadLevel(シーン名);などとする必要はありません。
==> SceneManager - Unity スクリプトリファレンス
publicをつけているのは、この関数を外から(イベント経由で)呼び出したいためです。publicなしだと内部的にしかアクセス出来ないため、カプセル化したくないならpublicにしましょう。
ボタンなどUIは予めUnityの機能として使えます。最初のうちは自前で色々用意するよりはこういう便利ツールに頼りまくって少しでも楽しましょうw
最後に
もしここにリッチな機能を追加したい、より市販のゲームらしく見せたいなら、フェードイン/アウトを組み込んでみるのも良いですね。簡単そうなゲームでも真似て作ってみると色んなテクニックが仕込まれているんだなと実感できて楽しいです。