ども!2度寝撲滅委員会会長のFORM_07です!
2度寝なんてしたくない・・・・したくない・・・・のにっ・・・・クッ・・・‼
前回↓はHPバーを実装させましたね。
【Unity】最強のゲームクリエイターに俺はなる | HPバーを表示させよう - FORM_07’s blog
今回はUI編第2回ということでポーズ画面を作りたいと思います!
さっそくやっていく。
UIはこんなんでいいかな。
もちろんデザインは後々調整します。
ちなみに、ボタンはHorizontal Layout Groupコンポーネントできれいに並べてます。
で、マウス操作なしでボタンを選択できるようにしたいから、、、
InspectorビューのNavigationをこんな感じ↓になるように設定する。
(VisualizeをONにしてね)
この黄色い矢印がついてるところは矢印キーで操作できる。
すげ~~~~。
でもこれ注意なのが、最初にどれかのボタンが選択されてないと矢印キーで操作できない。
だから、ポーズ画面が開かれたタイミングでどれか1個ボタンが選択された状態になるようなスクリプトをつくる。
つくった。
なんて簡単なんだUnity。。。。便利すぎるぞ。。。。。
あとはInput Actionsでポーズ画面の開閉用ボタンをBindingして、、、
コードを書い、、、、、
・・・・・(。_。)
まてよ。。このままだとポーズ画面開いててもゲームが動き続けちゃうな。
ポーズさせないと。。。。。
ま、まさか、、、あの、ステート駆動システムの出番だというのか。。。
ってわけでステート駆動させていきます。
ステート駆動っていうのは、文字通りState(状態)を切り替えてゲームを動かすシステムのことで、ある程度の規模のゲームにはほぼ必須らしい。
まぁまずは手を動かしてそれから理解しよ。
まずはStateを入れておくenumをつくっておく。
とりあえずこんだけ。
そして後々必要になりそうだからState切り替え用の関数をつくる。
今のStateを保持する変数をつくって、
そしたらコードをちょっと書き換える。
あと、これだけじゃサフィアちゃん以外のものが動いたままだから、
こんな感じ↑でポーズ画面を開いたときにTime.timeScaleを0にする。
timeScaleっていうのは、簡単にいえば時間の流れるスピードのことで、標準は1。
0.5にすれば時間の流れが普段の半分くらいの遅さになるし、0にすれば完全に止まる。
ただ、Update関数は動いたままなので、
こんな感じ↑にTime.deltaTimeを使うことでサフィアちゃんが移動するのを防ぐ。
というのも、deltaTimeはtimeScaleが0のときには0になるからです。
これでコードは書き終えた。
テスト。
・・・って思ったけど自分の録画方法だとしながら操作できなかった。
なんだよ。
ま、一応いい感じに動いてくれてたので、OKです!
今回はここまで!
次回はさらにポーズ画面をいじくっていきたい!