#前提条件
例としてSTAGE1のアバター(=黄色いボール)をゴール(青緑の長方形)に移動させると、STAGE2に遷移するシチュエーションについて考えてみます。
#Unityエディタ上での準備
1:Unity HubでUnityPlayGroundStartフォルダを読み込んだ直後の状態だ。
2:プロジェクトエリア上で右クリック→Create→Folderを選択する。
3:新規作成されたフォルダに任意のフォルダ名(=ここでは「Test」)を入力する。以後、このフォルダ内で作業を進めていく。
4:プロジェクトエリアで「Assets」→「Test」を開いた状態で、メニューから「File」→「Save As」を選択する。
5:Testフォルダ内で新たにファイル名「Stage1」を入力し、シーンファイルを作る。
6:「Stage1.unity」ファイルができたところで、もう一度同じ操作を行う。
8:図のように「Stage1」「Stage2」という、2つのシーンファイルが作成されているか確認しよう。
9:メニューから「File」→「Build Settings」を選択する。
10:Scenes In Build欄ですでに表示されているシーンファイルを右クリックして「Remove Selection」を選択し、すべて削除する。
11:プロジェクトエリアから「Stage1」「Stage2」の2つのシーンファイルを順番に「Scenes in Build」欄にドラッグ&ドロップする。順番を間違えないように注意しよう。その後、XをクリックしてBuild Settingsウィンドウを閉じる。
#Stage1の制作
1:プロジェクトエリアから「Stage1」シーンファイルを選択しよう。
2:以下の手順で設定を行う。
①プロジェクトエリアから「Assets」→「Images」→「GeometricShapes」を開き、「Square」をHierarchyにドラッグ&ドロップする。
②Inspectorでオブジェクト名を「Floor」、タグを「Ground」に設定する。
③続いてTransform」でパラメータを設定し、横に細長いブロックを作る。
④Add Componentから「Box Collider 2D」を絞り込み検索し、アタッチする。
3:プロジェクトエリアで右クリック→「Create」→「Physics Material 2D」を選択する。
4:作成された「Physics Material 2D」のオブジェクト名を「Ground」に変更し、InspectorでFrictionを「0.1」、Bounsnessを「0」にする。これらの値は操作性に直結するので、後ほど自分の好きなように調整しよう。
5:作成した「Physics Material 2D」を「Floor」オブジェクトのInspectorにある「Box Collider 2D」の「Material」スロットにドラッグ&ドロップする。「Material」スロットは「Extra Options」メニューに隠れているので注意しよう。
6:作成した「Floor」オブジェクトをプロジェクトエリアにドラッグ&ドロップしてプレファブにする。
7:以下の手順で設定を行う。
①「Floor」と同様に、プロジェクトエリアから「Assets」→「Images」→「GeometricShapes」を開き、「Circle」をHierarchyにドラッグ&ドロップする。
②Inspectorでオブジェクト名を「Player」、タグを「Player」に設定する。
③「Transform」でパラメータを設定し、図のように配置する。
④Sprite Rendererコンポーネントで「Color」スロットをクリックし、任意の色に変更する。最後にXボタンをクリックしてColorチャートウィンドウを閉じる。
8:以下の手順で設定を行う。
①「Player」と同様に、プロジェクトエリアから「Assets」→「Images」→「GeometricShapes」を開き、「Square」をHierarchyにドラッグ&ドロップする。
②Inspectorでオブジェクト名を「Goal」、タグを「Finish」に設定する(この演習ではFinishタグは使用しないが、念のため)。
③「Transform」でパラメータを設定し、図のように縦長に大きさを変更して、配置する。
④Sprite Rendererコンポーネントで「Color」スロットをクリックし、任意の色に変更する。最後にXボタンをクリックしてColorチャートウィンドウを閉じる。
9:「Player」オブジェクトにCircle Collider 2Dをはじめ、必要なスクリプトをアタッチしていく。必要なスクリプトとパラメータの設定例は以下の通りだ。
①Circle Collider 2D(円形の当たり判定を加える)
②Rigidbody 2D(オブジェクトに力を加えて移動できるようにする/ConstrainsでFreeze Rotationをオンにする)
③Move With Arrows(左右キーで移動/Movement TypeをOnly Horizontalに変更する)
④Jump(スペースキーを押したときに上向きの力を加える)
⑤Auto Move(常に下向きに力を加える)
10:Hierarchyの「Player」オブジェクトをプロジェクトエリアにドラッグ&ドロップし、プレハブにする。
11:同じように「Goal」オブジェクトにも必要なスクリプト(以下参照)をアタッチして設定する。
①Box Collider 2D(四角形の当たり判定をつける/Is Triggerをオンにする)
②Condition Area(オブジェクト同士の重なりを判定する/Filter by Tagをオンにして、Tag to Check forをPlayerにする)
12:Condition AreaのGameplay Actions欄にある+ボタンをクリックし、メニューから「LoadLevelAction」を選択する。
13:Load Levelコンポーネントの「Scene to Load」メニューから「Stage2」を選ぶ。
14:Hierarchyから「Goal」オブジェクトをプロジェクトエリアにドラッグ&ドロップして、プレハブにする。これでStage1は完成だ。「File」→「Save」で上書き保存しておこう。
#Stage2の制作
1:プロジェクトエリアから「Stage2」シーンファイルをダブルクリックして選択する。
2:プロジェクトエリアから「Goal」「Player」「Floor」プレハブをそれぞれHierarchyにドラッグ&ドロップする。
3:複数のFloorプレハブをドラッグ&ドロップして、大きさや位置を整えたり、Goalプレハブの場所を変えたりして、レベルデザインを行う。レベルデザインが終わったら、「File」→「Save」で上書き保存しておこう。
4:再びStage1をダブルクリックして選択し、ゲームを実行しよう。キャラクターを右に移動させてゴールに接触すると、Stage2に遷移すれば成功だ。
##ワンポイントアドバイス 遷移先の変更
Stage2のゴールに到達すると、再びStage2の初期状態に戻る。Stage2の「Goal」プレハブにアタッチされているLoadLevelから、Sccene to loadを「Stage1」にすると、ゴールに到達後にStage1に遷移させられる。このようにScene to loadの設定を変えることで、遷移先を変更できる。
#ステージのリロード
1:現状のままでは、アバターが床から落ちた時にゲームを一旦停止して、再度実行しなくてはならず、面倒だ。そこでキーボードの特定のキーをクリックすると、ステージの初期状態に戻るように設定してみよう。まず、「Stage1」シーンドライブをダブルクリックして選択し、Hierarchy上で右クリック→Create Emptyを選択する。
2:新しく作成されたGameObjetを選択し、Inspectorでオブジェクト名を任意の名前(ここではGameManager)に変更する。空の(=透明の)オブジェクトなので、場所はどこでもいい。
3:「GameManager」のInspectorでAdd Componentをクリックし、「Condition Key Press」を絞り込み検索して、アタッチしよう。
4:Condition Key Pressコンポーネントの「Key To Press」メニューを開き、任意のキー(=ここではReturn)を選択する。
5:Gameplay Ationsの+ボタンをクリックして、LoadLevelActionを選択する。
6:Scene to loadで「RELOAD LEVEL」を選択しよう。
7:ゲームを実行して、設定したキー(ここではReturn、またはEnterキー)を押すと、ステージの初期状態に戻れば成功だ。
8:GameManagerオブジェクトをプロジェクトエリアにドラッグ&ドロップしてプレハブにする。その後、「File」→「Save」で上書き保存する。
9:プロジェクトエリアで「Stage2」シーンファイルをダブルクリックして、エディタ上にStage2を表示させる。その後、作成したGameManagerプレハブをHierarchyにドラッグ&ドロップする。これでStage2でも特定のキーを推せば、そのステージの初期状態に戻るようになる。ぶじ完成したら上書き保存しておこう。
#タイトル画面を作成する
Condition Key PressとLoadLevelActionを組み合わせると、タイトル画面を作って、そこからゲームを開始させられる。タイトル画面→Stage1→Stage2→タイトル画面とループする構造を作ってみよう。
1:Stage1を表示して、「File」→「Save As」を選択する。
2:「Stage1」「Stage2」と同様に、Testフォルダ内に新しく「Title」シーンファイルを作成する。
5:以下の手順で設定を行う。
①Gameタブをクリックする
②HierarchyでCanbas→Textを選択する。
③オブジェクト名を「Title」に変更する。
④Rect Transformコンポーネントでパラメータを図のように設定する。
⑤Textコンポーネントで「Text」欄にゲームタイトルを入力する。その後、図のようにパラメータを設定する。
⑤Colorスロットをクリックして、カラーチャートを開き、フォントの色を変更する。終わったらXをクリックしてカラーチャートを閉じる。
7:以下の手順で設定を行う。
①HierarchyでCanbas→Text(新たに追加された方)を選択する。
②Rect Transformコンポーネントでパラメータを図のように設定する。
③Textコンポーネントで「Text」欄に「PUSH START」と入力する。その後、図のようにパラメータを設定する。
④Colorスロットをクリックして、カラーチャートを開き、フォントの色を変更する。終わったらXをクリックしてカラーチャートを閉じる。
8:プロジェクトエリアから「GameManager」プレハブをHierarchyにドラッグ&ドロップする。その後、「File」→「Save」で上書き保存する。
9:「File」→「Build Settings」を選択する。
10:プロジェクトエリアの「Title」シーンファイルを、「Scenes In Build」欄にドラッグ&ドロップする。このとき、図のように先頭になるように(Title、Stage1、Stage2の順)配置する。終わったらXをクリックしてウィンドウを閉じる。
11:HierarchyのGameManagerプレハブを選択し、InspectorのCondition Key PressにあるKey To Pressメニューを開いて、「Space」を選択する。
12:Load LevelコンポーネントのScene to loadメニューで「Stage1」を選択する。その後、「File」→「Save」で上書き保存する。
13:同様に「Stage2」シーンファイルをダブルクリックして開き、「Goal」プレハブを選択後、InspectorのLoad LevelコンポーネントからScene to loadメニューで「Title」を選択する。その後、「File」→「Save」で上書き保存する。これでアバターがStage2のゴールに到達すると、タイトル画面に遷移するようになる。
15:ぶじ遷移したら、ふたたびエディタ画面でSceneタブをクリックしよう。このように一般的な制作時にはSceneタブ、UIの設定時にはGameタブを切り替えると便利だ。
##注意 スコア類は保存されない
Unity PlayGroundのUIで表示される情報は、このままではシーンを遷移したときにリセットされてしまう。シーンを遷移してもスコアが保たれるようにするには、スクリプトの改造が必要で、本授業の範囲を超えてしまう。そのため本授業で複数のゲームステージを作りたい場合は、スコアなどを使用せず、Lifeも1にするといい(=触れたら即死)。スコアを使用したり、Lifeを1より多くしたい場合は、スクロールなどを活用して大きなステージを1つ作ることをオススメする。
#ゲームのビルド
「ゲームのビルド」とはゲームの実行ファイルを作成する行為を指す。ビルドすることでUnityエディタを必要とせずに、直接ゲームを実行させられる。PC、スマートフォン、ゲーム機などのデバイス上でゲームを実行する(=これを「実機上で再生する」などと呼ぶ)には、このビルドという工程が必要だ。
Unityエディタで「File」→「Build Settings」を選択する。
「Player」メニューを選び、「ProjectName」欄にゲームの名称を半角英数字で入力する。これがゲームの実行ファイル名になる。次に「Resolution and Presentation」メニューを開き、「FullScreen Mode」を「Windowed」に変更し、「Default Window Width」と「Default Window Hight」を任意の数字(ここでは1280と720)に変更する。これがゲームを起動したときの、ウィンドウの解像度になる。設定が終了したら右上のXをクリックし、Project Settingsウィンドウを閉じる。
「新しいフォルダー」をクリックし、任意のフォルダ名(ここではExe)を設定する。
Exeフォルダを開いた状態で、「フォルダーの選択」をクリックしよう。
Exeフォルダを開いて、図のようなファイルとフォルダができているか確認しよう。その後、実行ファイル(=SampleGame.exe)をダブルクリックして、ゲームが起動すればOKだ。
タイトル画面でスペースキーを押し、STAGE1からSTAGE2、そしてタイトル画面へとシーンが遷移するか確認しよう。
他人にゲームを配布する時は、ExeフォルダをUSBメモリなどにコピーして直接わたすとスマートだ。このとき、フォルダを右クリック→圧縮→Zipを選び、Zip形式で圧縮すると、より手軽にコピーできる。
Exe.zipが完成した状態。これをコピーするなどして配布しよう。
##ワンポイントアドバイス
ゲームをビルドすると、図のようなエラーが出ることがある。
その場合、Unityエディタで「Edit」→「Project Settings」→「Input Manager」→右上の歯車を右クリック→「Reset」をクリックするとエラーが修正される。最後に✕アイコンをクリックしてProject Settingsウィンドウを閉じればOKだ。