ニンジャのゲームを作る - ④階段を用意しよう
続きは小説を書くので少々遅れます……そう書いてから約半年。大変お待たせしました。続きです。
さて、前回はローグライク風のダンジョンを生成する手順を書いていきました。しかし、生成されたばかりのダンジョンは極めて殺風景です。そこでここからはいろんな物を並べ、彩っていこうかと思います。
まずは階段から作っていきましょう。
[1/3]階段を定義しよう
階段! それはローグライクでの定番……というより必須要素。アイテムを集めて周りたい時に限って近くにあり、危険なモンスターがひしめく深層に限って遠くにある……そんな悲喜交々の詰まったオブジェクトです。ではそんな階段を実装するには、どうすればいいでしょうか。
まずは階段を降りた時に何が起こるのかを整理してみましょう。階層が1つ進む、マップやアイテムが新たに用意される、状態異常が回復する、技などのポイントが回復する、チョコボが壁の中にいる……色々ありますね。しかし一番重要なのは、2つ目まで。つまりは状況がリセットされることです。
では何をリセットすべきか……ということになるわけですが、現状このゲームにはヤモト=サンと壁と床しか存在しません。なので今回は他のあれこれには手を出さず、シンプルに『階層が1つ進み、マップが新しいものに変わる』階段を実装することにしましょう。
[2/3]階段を配置しよう
さて、要件が整理できたら実装の手段を考えましょう。……ですが、実は機能的には簡単です。何故かというと、マップを描画するプログラムも、プレイヤーを配置するプログラムも、前回作ってしまっているからです。
『階段を降りたら今までのマップを削除し、例のプログラムを再実行しなさい』……指示すべきはそれだけです。ただし、それで全てが終わるほど楽ではありません。まずは『階段を降りたら』という条件を定義しなければならないのです。
では、その条件とはなんでしょう。こちらの画像を再度見て、『どのような操作をすれば階段を降りるのか』考えてみてみてください。
……はい。しごくシンプルに考えて、階段を降りる=階段マスに乗るですね。床のどれか1つを階段と定義し、そのマスに乗れば『階段を降りる』。極めて単純な理屈です。
では、続いてはそんな階段マスを実装する方法について考えてみましょう。前々回お話したとおり、このゲームにおいて、マップは内部マップ(数値)と外部マップ(グラフィック)の2つから構成されています。この2つをいじくり回せば階段マスが作れそうです。
まずは内部マップから考えてみましょう。階段は床(0)でも壁(1)でもありません。なので今まで未使用だった2を階段をあらわす数値としましょう。
移動前に移動先が床(0)か壁(1)かを判定していたように、階段は移動後に判定を行います。移動後にプレイヤーの位置と階段の位置が一致していれば、それは階段マスの上にいることを表しています。内部的にはこの2つで大丈夫そうです。
では、次に外部的な……グラフィックの変更についての仕組みを解説します。が、その前に。先ほどのダンジョン内の画像が前回までのものと大きく異なっていたことにはお気づきでしょうか。
こちらが前回までのダンジョン内の画像です。画像編集や絵を描く方は見慣れているであろう例の模様で覆われていますね。これはテクスチャを用意していないために貼られた、いわば仮の模様です。テクスチャ。あまり聞かない言葉です。
透明なプラスチックの板の上に、赤い折り紙を貼った状態をイメージしてみてください。板は当然、赤い板に見えますよね。ではその折り紙に絵が描かれていれば? 板は当然、絵が描かれた板に見えるようになるでしょう。この折り紙がテクスチャ。板がポリゴンです。
ポリゴンで形を作り、テクスチャで色を付ける。大まかにはそういう手順で3Dグラフィックは表示されています。先のダンジョンも、壁は四角いキューブを並べて、床は一枚のプレートを並べて、その上にテクスチャで彩色することで表示されているのです。(床や壁のドットは白螺子屋=サンの素材を使用させていただきました。素晴らしい素材をありがとうございます)
さて、ではこのテクスチャを貼り替えればどうなるでしょう? ……察しの良い方は勘付かれたと思います。そうです、階段を表現するにあたっても、テクスチャの張り替えで実現が可能なのです。
ランダムに床を一つ選択し(ヤモト=サンの初期位置を決めるプログラムを準用し、部屋の中から)、その床のテクスチャを階段のものに貼り替えれば、階段を表示させることができるのです。
では早速テストしてみましょう。階段を降りると……
階段を降りると、マップも新調されました。ですが、なんの演出もなしに唐突にマップが入れ替わると、なんとなく不気味ですよね。なので次は画面のフェードイン、フェードアウト……階層表示を実装してみましょう。
[3/3]階層移動を演出しよう
ローグライク……というより不思議のダンジョン経験者の方ならパッと分かると思います。
これです。画面が徐々にフェードアウトし、真っ黒な画面に階層が表示され、フェードイン……この表示はどうやって実装されているのでしょうか。順を追ってみていきましょう。
この表示は以下の順序で実行されています。
[画面が徐々に真っ黒になる]
↓
[階層表示の文字が徐々に表示される]
↓
[文字が徐々に消える]
↓
[画面が徐々に元に戻る]
徐々徐々言い過ぎですが、おおむねイメージは伝わったかと思います。さ順を追って実装してみましょう。
さて、画面を真っ黒にするにはどうすればいいでしょう? 画面内のすべてを黒色に置換する? テクスチャをすべて黒単色のものに張り替える? ……いえいえ、そこまでする必要はありません。もっと単純な手段で解決が可能なのです。
説明の前に、まずこちらの画像をご覧ください。
これはUnity(作成ツール)が作成しているオブジェクトの全てと、実際にゲーム画面に表示される画像です。範囲が全然違っていますね。それもそのはず。ゲーム画面に映し出されているのは、カメラが切り取った映像だからです(上画面のCameraPreviewとはそういう意味です)。
つまりプレイヤーが見えるのは、カメラが映し出す範囲のみ。ではこのカメラのレンズを黒い紙で塞いでしまえば……?
当然、こうなります。真っ暗で何も見えません。薄くしてみましょう。実際の黒い紙と違い、これは所詮データ。濃さ(透明度)をいじくり回すことが可能です。
と、この通り。真っ黒な画像の濃さを調整することで、見慣れたフェードアウトが実現しました。文字表示もそれと同様、階層の文字の濃さを調整することで行うことができます。逆に進めていけばフェードインも実現します。
後はこの演出を階段を降り、新しいマップに切り替わるタイミングに挟んでしまえば……自然に画面を切り替えることが可能というわけです。
終わりに
以上で階段の作成は完了です。制作の過程で内部的な機能をいじくる必要は出るでしょうが、とにかく現状階段と呼べるものは出来上がりました。
次回はこの階段と壁と床だけの空間にスシを散らばらせる手順を書いていこうかと思います。
それは誇りとなり、乾いた大地に穴を穿ち、泉に創作エネルギーとかが湧く……そんな言い伝えがあります。