ここですごろくと呼んでいるものはいわゆるローグライクゲームのマップっぽいやつです。戦闘マスがあったりショップマスがあったりして、たいてい最後にボスマスがあるやつですね。Slay the Spire、One step from eden、アークナイツの統合戦略などをイメージしていただくとわかりやすいかもしれません。
今回は超適当に以下のようなロジックで生成することにします。
マップの長さを決める
マップの幅を決める
それぞれの深さの地点に対して、1~幅の深さまでのランダムな数マスを置く
マス同士をつなぐ
ではやってみましょう。
モデルを作って...
Unityでシーンを作ってぶち込みます
あとはスクリプトを書いてランダムにマスを生成するようにします
思ったよりうまく行ってビビりました。これは深さ8、幅3で作ってます。
困ったこと:エラーメッセージの読み方
次のようなコードを見てみましょう。
public class Node {
List<GameObject> next;
void Start()
{
next = new List<GameObject>();
}
public void AddNext(GameObject o)
{
next.Add(o);
}
}
Start より先に AddNext を呼んだ場合、 next が未初期化なのでエラーが出ます。問題はUnity上でのエラーメッセージの内容で、
NullReferenceException: Object reference not set to an instance of an object
Node.AddNext (UnityEngine.GameObject o) (at Assets/Scripts/Sugoroku/Node.cs:47)
MapManager.Generate () (at Assets/Scripts/Sugoroku/MapManager.cs:35)
MapManager.Start () (at Assets/Scripts/Sugoroku/MapManager.cs:10)
こんな感じになっています。私がC#に慣れていないのが悪いのかもしれませんが、こう言われるとただのリストである next ではなくゲームオブジェクトの o が疑わしいように読めませんか??これは最初全然わからなくてかなり時間と体力を吸われました。