Unity(C#)初心者・入門者向けチュートリアル ひよこのたまご

AndroidやiOS向けアプリを簡単に作れるゲーム開発環境Unity(ユニティ)の使い方を、チュートリアル方式で一緒に学びましょう!

【Unity7】BoardManagerを呼び出すGameManagerを作成する【2Dローグライク5】

Unity5.0.0f4 Personal(2015年5月)

f:id:hiyotama:20150519220636p:plain

前回の続きです〜

前回作成したBoardManagerスクリプトのSetupSceneメソッドからフィールドマップ作成は始まっていました〜ですので、今回はGameManagerスクリプトを編集し、SetupSceneメソッドを呼び出していきます〜

 

【目標】BoardManagerを呼び出しゲームを開始する

 


2D Roguelike 5 of 14 : Game Manager - YouTube

 

【課題1】GameManagerスクリプトからBoardManagerのSetupSceneを呼び出す

まずはGameManagerスクリプトを編集します〜BoardManagerに比べると大変シンプルとなっております〜以下ソースです〜

 

 

BoardManagerをGetComponentで取得した後InitGameメソッドへ移り、BoardManagerのSetupSceneを呼び出しているだけです〜今回はテストなのでlevelは3としております〜

 

【課題2】BoardManagerにプレファブを指定する

それでは開発画面へ戻り、GameManagerオブジェクトへBoardManagerスクリプトとGameManagerスクリプトを取り付けます〜

 

f:id:hiyotama:20150520172218p:plain

GameManagerオブジェクトにスクリプトを指定

 

それではBoardManagerスクリプトの各public変数に、対象のプレファブを指定していきましょう〜このままだとプレファブを選択した時にInspectorビューがGameManagerオブジェクトからプレファブに変わってしまうので、Inspectorビュー右上にあるロックボタン(鍵のマーク)を押します〜

 

f:id:hiyotama:20150520172036p:plain

鍵のマークをクリック

 

これでGameManagerのInspectorビューに固定されました〜それではまずはFloorから指定していきましょう〜まとめてドラッグ&ドロップでいけます〜

 

f:id:hiyotama:20150520172325p:plain

ドラッグ&ドロップ!

 

f:id:hiyotama:20150520172450p:plain

一括指定

 

同じ要領でWall1〜8をWall Tilesに、FoodとSodaをFood Tilesに、Enemy1,2をEnemy Tilesに、Outer Wall1〜3をOuter Wall Tiles、ExitはExitへドラッグ&ドロップして下さい〜

 

f:id:hiyotama:20150520173021p:plain

対象の全プレファブを指定

 

完了したらGameManagerのロックボタンは解除しておいて下さい〜

 

【課題3】カメラ位置の調整

このままゲームを実行すると画面がズレてしまうので、MainCameraの位置を調整します〜Position.xを3.5、Position.yを3.5にし、ついでに背景色を黒にします〜

 

f:id:hiyotama:20150520173557p:plain

 

f:id:hiyotama:20150520173639p:plain

ゲーム実行

 

【課題4】シングルトン機能を付ける

シングルトンとは、対象のオブジェクトが1つのSceneに必ず1つ存在することをプログラムによって保証することです〜

 

先ほど編集したGameManagerスクリプトにシングルトンを追記します〜

 

 

static変数は、そのゲーム内で唯一存在するユニークな変数を表します〜オブジェクトに属さずクラスに属す変数なので、例えばプレファブを利用してたくさんのオブジェクトを作った場合でも、それぞれのプレファブが別々の変数を持つのではなく、1つのstatic変数を共有します〜また、シーンを移動した時も変数情報を保持するので、今回のシングルトンではinstanceという名前のstatic変数を使っていきます〜

 

ゲーム開始時や何かの間違いでGameManagerを削除してしまった時などGameManagerが存在しない時のために、instanceがnullである時はthis(GameManagerオブジェクト)をinstance変数に格納します〜

 

またGameManagerオブジェクトが2つ以上になった時、this(このスクリプトが付いているほうのGameManager)を破壊します〜こうすることによって、GameManagerはゲーム内で必ず1つになることを保証します〜

 

最後にDontDestroyOnLoadメソッドによって、シーン遷移時にこのオブジェクトを受け継がせています〜

 

これでだいたいOKな感じですが、あと1つだけ付け足します〜GameManagerがそもそもHierarchy上に存在しない時に、GameManagerオブジェクトを生成するLoaderスクリプトを作成します〜

 

 

 こちらのスクリプトはMainCameraにとりつけて下さい〜

 

f:id:hiyotama:20150521101733p:plain

MainCameraにLoaderスクリプトを付ける

 

そしてGameManagerをプレファブ化し、元のGameManagerオブジェクトは削除し、Loaderスクリプトのpublic変数であるgameManager変数にGameManagerプレファブを指定して下さい〜

 

f:id:hiyotama:20150521101952p:plain

ドラッグ&ドロップ!

 

この状態でゲームを開始すると・・・

 

f:id:hiyotama:20150521102051p:plain

 

BoardManagerがしっかりと実行されています〜

 

f:id:hiyotama:20150521102209p:plain

 

Hierarchy上にもしっかりとGameManagerが生成されています〜

 

今回はここまでです〜

ありがとうございました〜

 

【Unity開発7】Unity公式チュートリアル2Dローグライクの導入【2Dローグライク1】

【Unity開発7】アニメーションを作りたい!【2Dローグライク2】

【Unity開発7】Floorやアイテムを作成したい!【2Dローグライク3】

【Unity開発7】床や敵キャラ、アイテム等を自動生成させたい!【2Dローグライク4】

【Unity開発7】BoardManagerを呼び出すGameManagerを作成する【2Dローグライク5】

【Unity開発7】キャラクターを動かすための抽象クラス作成【2Dローグライク6】

【Unity開発7】破壊可能な壁(Wall)を作成したい!【ローグライク7】

【Unity開発7】プレイヤーのアニメーターを設定したい!【ローグライク8】

【Unity開発7】プレイヤー用のスクリプトを設定したい!【ローグライク9】

【Unity開発7】敵キャラクターのスクリプトを作成したい!【2Dローグライク10】

【Unity開発7】敵キャラクターのアニメーターを設定したい!【2Dローグライク11】

【Unity開発7】uGUIでUIの表示とレベル機能を実装したい!【2Dローグライク12】

【Unity開発7】BGMと効果音を付ける【2Dローグライク13】

【Unity開発7】タッチパネルに対応させたい!【2Dローグライク14(Fin)】