ゲームを通して遊べるようにしていく(巫女&築城&防衛アクション)
ゲームを通して遊ぶために次に何に着手するかの検討とか、雑多なタスクを実装していきます。
やること
現状の実装を確認していきます。こういう機能の確認も使用確認と同じく何度やってもよいです。
Title シーン
- コントローラで操作できない。
- 設定パネルの中身が未実装。
- 背景としてセーブデータを読み込んで描画しようと思っているが未実装。
- 最後にプレイしたセーブデータを描画しようと思っているくらい。後で考える。
NewGame シーン
- 地形のランダム生成が未実装。
- 設定した項目に応じてセーブデータを作るあたりが未実装。
Game シーン
建築フェーズ
- コントローラで操作できない。
- 地形の高さを変更できない。
- 建物や壁のモデルを作ってない。
- 壁を配置できない。
- 部隊を配置できない。
- 部隊の移動を指示できない。
- 地形の高さがセーブデータに含まれていない。
- 情報を表示する UI が未実装。
- ゲーム進行のスクリプト管理が未実装。
- イベントシーンまわりが未実装。
防衛フェーズ
- 自キャラが攻撃できない。
- スキルが未実装。
- 装備品の概念を実装するか未検討。
- ゲームクリアが未実装。
雑多なこと
- 曲の切り替えを管理する機能が未実装。
- 効果音を決めて再生するあたりが未実装。
- 各種エフェクトを決めて適用するあたりが未実装。
- 永続強化、アンロック要素をどうするか未検討。
- アクションのみモードの仕様検討がまだ。
- Steam Workshop 機能のテストがまだ。
- チュートリアルの項目とステージ構成が未検討。
- ストーリーをどうするか未検討。
くらいです。
次にやることの候補としては「建築フェーズで建物の建築と地形の高さ変更を行えるようにして築城まわりの実装を終わらせる」と「部隊兵の配置場所を指定できるようにして、防衛フェーズを通して遊べるようにする」でしょうか。
順にやっていこうと思います。
やったこと
敵が全滅したときに防衛フェーズが終わるようにした
部隊兵が敵を攻撃できるようになったので「敵が全滅したときに防衛フェーズが終わって建築フェーズになる」あたりを実装しました。
↓ 敵の数が画面上に表示されるようにした。0 になったら建築フェーズに遷移する。
よいです。
ただ、動作させたところ急に防衛フェーズから建築フェーズに変わって違和感があったので、何か「建築フェーズになったよ」等のスライドイン演出を追加しようと思いました。またいつかやります。
セーブデータに地形の高さが含まれるようにした
地形の高低差のプレイヤー操作を実装する前に、高さ情報がセーブされるようにします。
なんやかんやで高さの値は 0, 255 に収まるので HEX な2文字で保存します。
- HEX 表現の2文字で表現する。
- スペース区切りの1行の文字列データとして保存する。
そして、セーブとロードの動作を確認後にセーブデータ内の地形の高さを 2, 2, 1, 0 にして地形を描画した様子がこれ↓です。
今のところ斜面まわりの実装も含めて適切に描画できてそうです。よいです。
プレイヤーの操作で地形の変更をできるようにした
とりあえず実装して動作させました。
カーソルが映ってないのでわかりにくいですが、4回ほど「盛り土」をした後、盛り土した箇所を「掘削」で平地にしていってます。
気付きとしては
- グリッド線がないとブロック境界が視認できない。
- 動画の最後にあるような尖った頂点の地形が作れてしまう。
- 盛り土や掘削をすると最大傾斜角を超えてしまう場合の処理を未検討。
- 広いエリアの盛り土と掘削を行う方法を未検討。
とかです。
後でまた考えたり実装していこうと思います。
地面と樹木のモデルを仮決めした
地面や樹木の表現としては、今回は AZURE Nature アセットを使ってみようと思います。
この決定で、キャラは 2D 画像、建物は MagicaVoxel な自作 3D ボクセルモデル、環境は 3D モデルと ちぐはぐな気がしますが、全部を組み込んでみてから改めて考えます。
とりあえず Unity の Terrain の扱いについて TerrainLayer の切り替えが下記コードで動作するのを確認しました。
public void SetSeasonTerrainLayers(Seasons season)
{
int index = (int)season;
var layers = new List<TerrainLayer>() { _grassTerrainLayers[index], _dirtTerrainLayers[index] };
_terrainData.terrainLayers = layers.ToArray();
}
よいです。
↓ 上記メソッドを呼び出して四季をイメージした TerrainLayer (地面のテクスチャ)を切り替えた結果
四季の変化を意識して TerrainLayer が切り替わるようにしたのですが、このゲームで四季の変化を表現したいかは未決定です。後でまた考えますが正直こだわりはないです。
まとめと今後の予定
未実装な機能の確認と、地形の高低差の変更まわりの実装に着手しました。よいです。
次回は、雑でいいので建物モデルを登録して建築できるようにするか、雑多なタスクに着手します。がんばります。