みなさんこんにちは🌚
GWは魔の1日バイト9連勤を果たしたブルーノです。今年のGWは天気もそんなによくなかったので遊びにはどっちみち行けなかったから良いんですけどね😠😭
では早速作っていきましょう🌻
今回はタイトルにもある通りゼルダっぽいゲームのタイトル画面を実装してみたいと思います。
ちなみにこんな感じ
www.youtube.com
特徴としては実際のマップを読み込んでおり、その上にタイトルメニューがあることですね。この形式の良いところは最初にマップデータを読み込むのでそこからゲームシーンに移ればマップのオブジェクトを隠したり一度消したりしなくて良いところだと思います。私からしてもこれは簡単だと思い、今回つくろうと思いました。
タイトルのUIの実装
タイトルとゲームスタートのボタンを作りたいと思います。例によってかめくめさんのサイトに良い記事があったのでこれを真似させていただきます。
gametukurikata.com
地味にこのサイトに貼ってある無料日本語フォントサイトのリンクが嬉しかったです。AssetStore有料だし日本語フォント少ないし🌝
こんな感じにしました!!タイトルはどーしよーかなー
そしてGameStart()メソッドを持ったTitleSystemスクリプトを空のゲームオブジェクトにアタッチし、StartButtonに指定します
gametukurikata.com
データを残す方法としてシングルトンという方法を昔少し使ったのですが、いまいち覚えてなかったのでまた勉強です。
10行目で自身のスクリプトをstaticな形で宣言し、共用で使うオブジェクトを12行目のShareObjectに格納しておきます。
最初にテストシーンから起動すると10行目のシングルトンインスタンスには何も入っていないのでこのスクリプトが割り当てられ、25行目にあるように決められたオブジェクトたちをDontDestroyOnLoad()メソッドで壊されなくします。
この状態でこのスクリプトをもつテストシーンから同じくこのスクリプトを持ったオブジェクトがあるゲームシーンに遷移すると、staticな変数にもうインスタンスが割り当てられているということで23行目にあるように新しくAwake()を通ったゲームシーンの方のスクリプトは格納されている同じオブジェクトたちを削除し始めるんですね。おかげで各シーンに同じオブジェクトがあっても共存することなく、かつどのシーンからプレイしても同じ状況でプレイできるということですね。
要はこの唯一無二のインスタンスを保持するためのデザインパターンがシングルトンというようですね。
個人的に一つ気になったのは、ゲームシーンには一応全てのマップ用のオブジェクトが配置してあるわけですがAwake()メソッドを通る前に結局同じオブジェクトたちを一度シーンに作り出すのではないか?ということです。Awake()以前ならレンダリングもされていないから負荷はかからないのでしょうか。ここだけ少し疑問が残りました。
タイトル画面で動く背景
では最後に、タイトル画面のカメラワークを作りたいと思います。「時のオカリナ」から続く3Dゼルダはみんなタイトル画面で実際のマップを使っているのが特徴ですよね。時にRTAやTASでそれが悪用されることもありますが...
カメラワークの作り方はこちらのサイトを参考にしました。
sirohood.exp.jp
動画付きでわかりやすい!!シロフードさんありがとう!!😽
こうして...
今回はここまでにしておきます。、。、