今回の作成講座は前回の記事で作ったプロジェクトを使って制作を進めて行きますので、前回の記事を読んでいない方は読んでからこの記事を読んでくださいね。
前回のアクションゲームにタイトル画面が追加され、プレイヤーを方向キーで操作して赤い立方体のゴール地点まで到達するとゴール画面が表示されるようになりました。
準備
前回の講座で作ったプロジェクトを開いてください。このような状態になっていますでしょうか。
前回の記事には書いていませんでしたが、ゲーム画面のシーンをtestという名前で保存していました。
タイトル画面のシーンを作成する
ではタイトル画面を作成していきます。
タイトル画面は別のシーンとして保存しますので、新規にシーンを追加します。
手順としては
1.メニューよりFile -> New Sceneを選択し新規のシーンを追加します。
2.File -> SaveScene より新規のシーンを保存しておきましょう。
3.titleという名前で保存します。
4.Projectパネルにtitleというシーンが表示されます。
タイトル画面の作成
タイトル画面を作りましょう。
今回は適当な文字を表示しておきましょう。
メニュー GameObject->CreateOther->3D Textを選択してください。
するとHelloWorldという文字がSceneパネルに表示されると思います。
そのHelloWorldという文字をMainCameraに映る位置に移動しておきましょう。
表示されているHelloWorldという文字を変更するには3Dtextを選択した状態でInspectorパネルに表示される
TextMesh -> Textの項目を変更してください。
ここではTestActionという文字に変更しました。
ここまでできたら
メニュー File -> Save Scene (又はCtrl+S) でシーンを保存しておきましょう。
ゴール画面の作成
上記の手順を繰り返して、ゴール画面も作っておきましょう。
goalシーンを追加して、Goalという3Dテキストが表示されるようにしておきましょう。
こんな状態。
タイトル画面からゲーム画面への遷移
ではタイトル画面でボタンをおしたらゲーム画面へ画面が遷移する処理を作って行きましょう。
Projectパネルのtitleシーンをダブルクリックしてtitleシーンを開いてください。
・メニューよりGameObject -> CreateEmptyで空のゲームオブジェクトを作りMenuという名前に変更
・Projectパネルを右クリック -> Create -> JavaScript でJSを作成しTitleMenuという名前に変更
・ProjectパネルのTitleMenuをドラッグしHierarchyパネルのMenuにドロップ
の操作をそれぞれ行い空のゲームオブジェクトとスクリプトを作り、
スクリプトTitleMenuをMenuに適用しましょう
TitleMenuをダブルクリックしてスクリプトの編集画面を開いて、以下の様にスクリプトを記述してください。
#pragma strict
function OnGUI()
{
if (GUI.Button(Rect(150, 280, 100, 30), "Start"))
{
Application.LoadLevel("test");
}
}
function Start()とfunction Update()の処理が最初は書いてありますが消してしまってかまいません。
function OnGUI()
上記のOnGUI関数の中ではではカメラの位置に関係なく表示されるボタンやテキストや画像などを表示するための処理を記述することができます。
今回はこの関数内にボタンを表示し、ボタンが押されたら別のシーンを読み込む処理を記述します。
if (GUI.Button(Rect(150, 280, 100, 30), "Start"))
GUI.Button()の関数はUnityのボタンを表示するための関数です。
引数としては
第一引数に座標を指定するRect(x座標, y座標, 幅, 高さ)
第二引数にボタンに表示する文字
を指定します。
このボタンの関数がif文の条件になっていますが、ボタンが押された瞬間だけTrueが返ってくる様になっています。
なのでボタンがクリックされたら以下の
Application.LoadLevel("test");が実行されます。
Application.LoadLevel()にはシーン名を文字列として渡すとシーンを読み込んでくれます。
ではUnityの画面に戻って実行してみましょう。
ビルドセッティング
上記までの状態で実行してStartボタンを押すとエラーが表示されてしまうと思います。
Level 'test' (-1) couldn't be loaded because it has not been added to the build settings.
To add a level to the build settings use the menu File->Build Settings...
ゲームで読み込むシーンがビルドセッティングで予め登録してある必要があります。
メニュー File -> Build Settings でビルドセッティングの画面を開きましょう。
開いたら真ん中右にあるAddCurrentボタンをクリックしましょうすると現在開いているシーンがScenesInBuildの欄に追加されるとおもいます。Projectパネルのtestシーンとgoalシーンも開いてこの一覧に追加しておいてください。
ちなみにゲームを再生した場合にScenes In Buildの右端の数字が0番のシーンからゲームがスタートするので、必ずTitleシーンが0番になるようにしておきましょう。
最初に読み込まれるシーン以外の番号は特に順番が入れ替わってしまっていても問題ありません。
以上の操作が上手くできていれば、ゲームを再生して
Title画面のStartボタンを押してゲーム画面に遷移できるとおもいます。
Projectパネルの整理
Projectパネルを見てください。
goalシーンやPlayerのスクリプト、タイトル画面のスクリプトなど異なる場面の処理に使うオブジェクトが混在していて見づらいです。今後Projectパネルにはもっとオブジェクトが増えていきますので、ここで一回整理をしておきましょう。
Projectパネルで右クリックCreate->Folder を選択するとフォルダを作成することができます。
フォルダを作ったらシーンごとの名前を付け、その中に場面ごとのオブジェクトをドラッグドロップしましょう。
シーンごとにオブジェクトをまとめることができるので、Projectパネルが非常に見やすくなりました。
このフォルダを作って整理する方法は、シーンやスクリプトを一つのフォルダにまとめる方法や今回の様にシーン別にフォルダにまとめたりといろいろな方法があると思いますので、個人個人で使いやすい方法を模索していってください。
追記:
当記事で説明に使っている画像はUnity3.5のものです。
最新版のUnity4ではProjectパネルは以下の様に変更されました。

Projectパネルに新たにフォルダやその他オブジェクトを作成する場合は右側のフォルダの中身の部分を右クリックするか左上のCreateボタンを押してオブジェクトを作成してください。
当記事で説明に使っている画像はUnity3.5のものです。
最新版のUnity4ではProjectパネルは以下の様に変更されました。
Projectパネルに新たにフォルダやその他オブジェクトを作成する場合は右側のフォルダの中身の部分を右クリックするか左上のCreateボタンを押してオブジェクトを作成してください。
ゴールを作成する
では、次はゲーム画面に出てくるゴールを作って行きましょう。
Cubeを作成しGoalと名前を変えましょう。
Goalを良い感じの場所に移動、サイズを変更しましょう。
次にゴールを半透明の赤い色に変更します。
Projectパネルを右クリック Create -> Material でマテリアルを作成しGoalという名前に変更しましょう。
作成したGoalマテリアルを選択した状態でInspectorパネルのShaderドロップダウンを選択し、
Transparent -> Diffuse を選択しましょう。
Main Colorの右側の白い枠をクリックし、色の選択画面を開きましょう。
(もしこの欄が表示されていない場合はInspector左上の球をクリックすると表示できます。)
色の選択画面を操作して赤い色を選択しましょう。
半透明にするには一番下のAという欄が半透明度を表す値ですのでこの欄を変更します、ここでは150位がいいでしょう。
ではGoalマテリアルをHierarchyパネルのGoalゲームオブジェクトにドラッグドロップして適用してください。
ゴールとプレイヤーの衝突判定
次に「プレイヤーがゴールに触れた」という状況を検出する処理を作成していきます。
・ProjectパネルにGoalスクリプトを作成して、Goalゲームオブジェクトに適用してください。
・次にGoalゲームオブジェクトのInspectorパネルからBoxCollider欄のIsTriggerのチェックボックスをチェックしてください。
IsTriggerにチェックを入れることでオブジェクト同士の衝突を検出することができます。
次にGoalスクリプトをダブルクリックしてGoalスクリプトを以下の様に記述してください。
function OnTriggerEnter (other : Collider) {
if (other.name == "Player") {
Application.LoadLevel("goal");
}
}IsTriggerにチェックを入れたオブジェクトに他のオブジェクトが触れるとOnTriggerEnter関数が呼ばれます。
引数としてはCollider型の衝突の情報が格納された引数が渡されます。
if (other.name == "Player") {上記で衝突してきたオブジェクトの名前を取得し、その名前がPlayerだった場合の処理を実行します。
Application.LoadLevel("goal");衝突したゲームオブジェクトの名前がPlayerだった場合にタイトル画面のスクリプトにも登場したApplication.LoadLevel()関数でGoalシーンを呼び出します。
完成
ではUnityの画面に戻ってゲームを再生してみましょう。
Playerを操作してGoalに触れるとGoalシーンに画面が切り替われば完成です!
プレイヤーがステージから落下してしまった場合もゴールを作った時と同じように、ステージの下に衝突判定付きのゲームオブジェクトを置いておけば、プレイヤーがステージから落下してしまった場面を検出できますし。
ゴール画面にタイトル画面に戻るボタンを追加してゲームをもう一度プレイできるようにしたり。
プレイヤーがゴールに到着したらゴールのシーンではなくステージ2のシーンを読み込むようにして複数ステージに対応してみたりと、今回の内容を応用すれば様々なゲームが作ることができると思います。
今回は以上です。
<<他の記事を読む
[スポンサードリンク]
【シンプルゲーム作成講座の最新記事】


280じゃなくて100くらいじゃないとうまく表示されなかったです
スクリプトも合ってて、IsTriggerにチェックもついてるんだけどな〜^^;
後続で迷った方へのアドバイス、最新版のUnity 5.3.0f4では、ビルドセッティングのところが,AddCurrentではなく、Add Open Scenesになっていますが、同じ意味なので、クリックして問題ありません。また、Build Settingsの Scenes In Buildに直接Projectパネルの、シーンをドラッグ&ドロップで持ってきて直接追加することもできます。
ゴールを作成するのところで、バージョンが上がったため、マテリアルのShaderドロップダウンはTransparent -> Diffuseではなく、Legacy Shaders -> Diffuseから選択できます。