8/22更新分
こんにちは。蒸し暑すぎるせいか今横を見たらいつの間にかカーテンがカビてました。
以下進捗報告です。
実装
先週どこまでやったかな~と思って見返したら実質的にマジで何もやってないという感じでした。今週はすごろくを自動的に生成するやつをやる予定でしたね。
すごろく
ここですごろくと呼んでいるものはいわゆるローグライクゲームのマップっぽいやつです。戦闘マスがあったりショップマスがあったりして、たいてい最後にボスマスがあるやつですね。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 が疑わしいように読めませんか??これは最初全然わからなくてかなり時間と体力を吸われました。
InputSystem
カメラをぐりぐり動かしたりマスをクリックで選択したりできるようにしたいという問題があります。この目的を達成するためにInputSystemというのを使うことにします。
今3Dオブジェクトをマウスオーバーするのが検出できなくて苦戦してるんですが、これは私がUnityを知らなすぎるだけなので明日にはできてることでしょう。多分...
今週はそこそこ進んだと思うんですが、今の所エロさのエの字もないので折角見ていただいた方をがっかりさせてしまっていないか心配です。並行してイベントスチルを描いたりしてますので来週はそのラフでもアップできたらいいなと思ってます。
実装の方は
- カメラで見回す
- 主人公のアイコンをマスに沿って動かす
- 前回と同じ流れで タイトル画面->すごろくスタート->すごろくの最後のマスに行くとゲームクリア みたいな感じにする
とかができたらいいなと思います。
それではまた来週もお願いします。お元気で