前回までで自動生成するダンジョンを移動しながらどんどん深い階層へ進んでいく不思議のダンジョン系ローグライクゲームができあがりました。
前回の記事:
ローグライクゲームの作り方13 マップ移動を追加して不思議のダンジョンを完成させる
前回の記事では本講座の最難関であるマップ自動生成処理の作成を行いました。 前回の記事: 入る度に形を変える不思議のダンジョンのようなシステムを無事に実装できましたが、今のままだと次の階へ進んでいくことができません。 そこで、今回の記事では階...
今回の記事では、オートマッピングシステムと視認範囲の処理を実装していきます。
まだ移動したことない部分を表示しないようにする
この講座でのマッピングシステムは単純にプレイヤーが移動した範囲内のマスだけ表示するようにするものとします。
「Map」スクリプトを次のように修正してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
//次のものを追加 public class Mass { //...省略 //追加 public bool Visible { get => MassGameObject.activeSelf; set { if (MassGameObject.activeSelf == value) return; MassGameObject.SetActive(value); } } } //次のものを修正 public void BuildMap(List<string> map) { InitMassData(); var mapSize = Vector2Int.zero; Data = new List<List<Mass>>(); foreach (var line in map) { var lineData = new List<Mass>(); for (var i = 0; i < line.Length; ++i) { var ch = line[i]; if (!MapCharDict.ContainsKey(ch)) { Debug.LogWarning("どのマスかわからない文字がマップデータに存在しています。 ch=" + ch); ch = MapCharDict.First().Key; //一応、始めのデータで代用する } var massData = MapCharDict[ch]; var mass = new Mass(); var pos = CalcMapPos(i, Data.Count); if (massData.IsCharacter) { mass.ExistObject = Object.Instantiate(massData.Prefab, transform); var mapObject = mass.ExistObject.GetComponent<MapObjectBase>(); mapObject.SetPosAndForward(new Vector2Int(i, Data.Count), Direction.South); //キャラクターの時は道も一緒に作成する massData = this[MassType.Road]; } mass.Type = massData.Type; mass.MassGameObject = Object.Instantiate(massData.Prefab, transform); mass.MassGameObject.transform.position = pos; lineData.Add(mass); mass.Visible = false; //追加 } Data.Add(lineData); //マップサイズの設定 mapSize.x = Mathf.Max(mapSize.x, line.Length); mapSize.y++; } MapSize = mapSize; } |
このように修正を行うと再生時にマスが見えなくなります。
プレイヤーの周囲のマスだけ見えるようにする。
次にプレイヤーの周囲のマスを見えるようにしていきます。
また、一度見えるようになったものはプレイヤーが離れても見える状態のままになるオートマッピング機能を同時に実装しています。
まとめ
今回の記事ではゲーム開始時にマップ全面を見える状態から、プレイヤーの周囲のマスのみが見えるように修正しました。
また、一度進んだ場所のみがマップに表示されるオートマッピング機能を実現しました。
先がどうなってるかわからないダンジョンの表現としてそれっぽくなっているかと思います。
より本格的なローグライクゲームにするなら、ミニマップを出したり、専用のUIでマップを確認できるようにするのもよいでしょう。
記事では次のことを行いました。
- マスデータに「Visible」フィールドを追加。
- プレイヤーの周囲のマスのみ見えるようにした。
- 敵などのマップ上のオブジェクトを隠して近づいた時にだけ見えるようにした。
- 一度進んだ場所はマップとして保存するオートマッピング機能を実装した。
それでは次の記事に行ってみましょう!
ローグライクゲームの作り方15 やられたら終わりのオートセーブシステムを実装する
前回の記事ではダンジョンマップを部分的に表示し、プレイヤーが歩いたところの周りだけが表示される処理を作りました。 また、この処理の追加によりオートマッピング機能を実現しました。 前回の記事: 今回の記事ではローグライクゲームの仕上げとして階...
コメント