←(1)概要・プロジェクトの作成・オブジェクトの作成(2015.1改訂版)
(3)登場するオブジェクトの動かし方(2015.1改訂版)→
今回のブロック崩しでは、以下のようなシーン(Scene)を用意する。
- タイトル
- ゲーム
- ゲームオーバー
詳細はあとで考えるとして、先にシーンを準備して、シーン間の遷移を実装しよう。ゲームに関連するシーンを先に用意しておくと、このあとの開発が楽になる。例えば、ミスの判定を実装する時に、ゲームオーバーシーンがすでに実装されていれば、判定後にシーンを移行させればすぐに効果が確認できる。
ここでは以下のようなものを簡単に実装しておく。
- 画面にシーン名を表示。
- 【Jump】ボタンが押されたら、シーンを切り替える。
ゲームシーンは画面レイアウトを作成した時に実装済みなので、残りの「タイトル」と「ゲームオーバー」シーンを実装しよう。
タイトルシーンの追加
新しいシーンを作成して、それをタイトル用にする。
- メニューから、【File】→【New Scene】を選択。ここで以前までのシーンの保存の確認が表示されたら【Yes】で保存する。
- 新しいシーン(Scene)が表示される。
- [Ctrl]キー+[S]キーを押す。
- ファイル名を「Title」として保存する。【プロジェクト(Project)】ビューに「Title」というシーンが追加される。
シーンをプロジェクト上でまとめておくために、シーンをフォルダにまとめておく。
- 【プロジェクト(Project)】ビューで、余白をクリックして何も選択されていない状態にする。
- 【Create】ボタンを押して、【Folder】を選ぶ。
- 【プロジェクト(Project)】ビューに新しいフォルダが作成されるので、名前を「Scenes」に変更する。
- 「Game」シーンと「Title」シーンを、作成した「Scenes」フォルダにドラッグ&ドロップする。
画面の左上に「タイトル」と表示する
タイトル画面用のスクリプトを用意して、画面の左上に「タイトル」と表示しよう。スクリプトをこれからいくつか作っていくので、まとめておくためのフォルダを作成しておこう。
- 【プロジェクト(Project)】ビューで、余白をクリックして何も選択されていない状態にする。
- 【Create】ボタンを押して【Folder】を選択。
- 作られたフォルダ名を「Scripts」に変更する。
フォルダが作成できたら、そのフォルダ内にスクリプトを新規作成する。
Unity4.6では日本語用の文字コード変更は不要になったので、そのまま作業を継続する。
画面の左上に「タイトル」と表示する。
- 【プロジェクト(Project)】ビューから「CTitle」をダブルクリックする。【MonoDevelop】が開くまでしばらく時間がかかるので待つ。
- 【MonoDevelop】が開いたら、クラス名がファイル名と一致しているかを確認する。「public class」の後ろが「NewBehaviourScript」だった場合、C#ではファイル名とクラス名を一致させる必要があるので「CTitle」に修正する。
public class NewBehaviourScript : MonoBehaviour {
以上のようであったら、以下のように修正する。最初から以下のようになっていたら何もしなくてよい。
public class CTitle : MonoBehaviour {
- ファイルの一番最後の「}」を見つけて、その上の行に、以下のスクリプトを追加する。
// GUI描画 void OnGUI() { GUI.Label(new Rect(0,0,100,20),"タイトル"); }
- [Ctrl]キー+[S]キーを押して上書き保存する。
記述したのが、画面上に文字を描画する方法の一つである。「void OnGUI()」という関数は、グラフィカルユーザーインターフェース(GUI)を描画する命令を書いておくための関数である。これを自力で追加して、中にGUI関連の命令を書いておくと、毎フレーム、指定のGUIを画面上に描画してくれる。
ここで書いたのはGUIのLabelという文字を描画するためのパーツを使って、(0,0)から幅(100,20)の範囲に、"タイトル"という文字を描画する命令である。
スクリプトが出来上がったら、それが動くように登録する必要がある。【MonoDevelop】を最小化などして【Unity】に戻って以下の作業をしよう。
タイトル画面を制御するスクリプトを処理するためのゲームオブジェクト(GameObject)を作成する。
- 【階層(Hierarchy)】ビューの【Create】→【Create Empty】を選択して、空の「GameObject」を追加する。
- 追加した「GameObject」の名前を「Title」に変更する。
- 【プロジェクト(Project)】ビューの「CTitle」スクリプトをドラッグして、【階層(Hierarchy)】ビューに作成した「Title」オブジェクトにドロップする。
以上で作業は完了である。
実行ボタンを押して、ゲーム画面が以下のようになることを確認しよう。
動作が確認できたらもう一度実行ボタンを押して実行を停止する。Unityは、実行したままにしておくと、変更を加えても状態が元に戻されてしまう。動作を確認したら、必ず実行を停止するようにしよう。
[Ctrl]キー+[S]キーで保存する。
ゲームオーバーシーンの作成
タイトルシーンを作成した手順を振り返りながら、ゲームオーバーシーンを作成してみよう。
- 【プロジェクト(Project)】ビューの余白をクリックして、何も選択されていない状態にする。
- メニューで【File】→【New Scene】を選択して、新しいシーンを作成する。
- 保存のダイアログが表示されたら保存する。
- [Ctrl]キー+[S]キーを押して、保存画面を呼び出す。
- [Scenes]フォルダを開き、「GameOver」のファイル名で保存する。
【プロジェクト(Project)】ビューの「Scenes」フォルダ内に「GameOver」シーンが追加されれば完了。あとはタイトルと同じ方法で、画面の左上に「ゲームオーバー」と表示されるシーンにしよう。
シーンの切り替えを実装する。
タイトル→ゲーム、ゲームオーバー→タイトルへの移行を実装しよう(ゲーム→ゲームオーバーの処理はゲーム中に行うので、ここでは実装しない)。
シーンの切り替え方法
「Applicatoin.LoadLevel("シーン名")」というコードを実行することでシーンを移行できる。ただし、シーンをプロジェクトに組み込んでおく必要がある。
どこに記載するか
各シーン用のスクリプトの「Update()」関数内に記載する。「Update()」は、1フレームにつき1回自動的に呼び出される関数で、ゲームを制御するプログラムの大半はこの中に記載することになる。
ボタンの判定はどうやるか?
- キーが押されたり、マウスの入力を確認するのは「Input」オブジェクトを利用する。
- ゲームに使うボタンはユーザーが好きに設定できるようにした方が便利なので、編集した操作を参照する「Input.GetButtonDown("ボタン名")」関数を使う。
- ボタン名は、メニューから【Edit】→【Project Settings】→【Input】で開く画面の【Axes】内に定義されているものが指定できる。
- 今回はキーボードのスペースキーが設定されている「Jump」を使う。
以上が、シーンの切り替えに必要な情報である。早速実装してみよう。
実装
シーンをプロジェクトに追加する。
- メニューの【File】→【Build Settings】を選ぶ。
- 【プロジェクト(Project)】ビューの[Scenes]フォルダ内の[Game][GameOver][Title]の3つのシーンを選択して、ドラッグして、[Scenes In Build]欄にドロップする。
- シーンの順番がTitle→Game→GameOverの順になっていない場合は、ドラッグ&ドロップしてその順番に変更する。
- 追加が出来たら【Build Settings】ウィンドウの×ボタンを押して閉じる。
タイトルで【Jump】ボタンを押したらゲームに切り替わるようにする。
- 【プロジェクト(Project)】ビューで、「Title」シーンをダブルクリックしてシーンを切り替える。
- 【プロジェクト(Project)】ビューの「Scripts」フォルダ内の「CTitle」をダブルクリックして、スクリプトを開く。
- 「void Update() {」となっている行を探して、「{」と「}」の間の行に以下のプログラムを記載する。
if(Input.GetButtonDown("Jump")) { Application.LoadLevel("Game"); }
- [Ctrl]キー+[S]キーを押して保存する。
- 【Unity】に戻って、実行して、[space]キーを押してゲーム画面に切り替わるかを確認してみよう。
以上で、タイトルからゲームを開始する処理が実装できる。
同様の方法で、シーンを「GameOver」に切り替えて、「CGameOver」の「Update」関数内に「Title」シーンへ移行するプログラムを追加してみよう。ゲームからゲームオーバーへの移行は、ゲーム処理時に実装するので、ここでは実装しなくてよい。
←(1)概要・プロジェクトの作成・オブジェクトの作成(2015.1改訂版)
(3)登場するオブジェクトの動かし方(2015.1改訂版)→