【RTS + カードゲーム】ゲーム制作日誌 #10

本日の進捗報告です。そこそこ動くモックができてきたので、そろそろサーバ側も書いていきたいと思います。サーバ側のフレームワークは何を使おうか検討中です。

  • カードのドロー
    とりあえず5秒ごとにデッキからカードを引くようにしました。(本当は30秒や1分などもっと間隔を空ける予定です)
    カードがドローされるまでの時間は分かりやすくするためにプログレスバーが欲しくなりました。
  • 手札の位置管理
    カードのドローを行って手札にカードを加えた場合や、手札からカードをプレイして手札からカードがなくなった場合に、手札のカードの配置をアニメーションしながら左上に詰めるような処理を実装しました。こういったグリッドの処理はそこそこいろいろなところで使えそうな気がします。
  • 戦力の表示
    信長の野望シリーズのようにユニットの戦力を数値表示するようにしました。
    Unity の処理としては、カードをプレイした時点でカードのオブジェクトを破棄し、その場所にユニットのオブジェクトをインスタンス化するようにしました。ユニットはアイコンの横に戦力をテキストとバーで表示するようにしました。ユニットが密集した場合に表示をどうするか悩ましいです……。
    バーの色はプレイヤーごとに分けようかなと思います。色はゲーム開始前に選べるようにしたいですね。

  • フィールドの座標管理
    今までは Unity Inspector で適当にフィールドのオブジェクトの幅・高さを設定していましたが、厳密にサイズを定数で管理することにしました。当初はレスポンシブにフィールドのピクセルサイズを変更しようかと思っていましたが、固定サイズにすることにしました。
    また、Model側でのみ使用するFieldの座標とUnityで扱う画面の座標の変換処理も実装しておきました。UnityEngine.Vector3 と System.Numerics.Vector3 の変換を書くのが若干面倒でした。

  • 建物の配置
    建物を配置できるようになりました。ひとまず本拠地としてプレイヤーごとに1つずつゲーム開始時に配置するようにしてあります。
    本拠地用のイラストを用意しました。

    カードはプレイした場合に丸いアイコンで表示していましたが、建物は四角いアイコンでフィールドに表示しようと思います。
  • ユニットの移動
    Unity非依存のフレーム管理処理を書きました。1フレームごとにフィールドに配置された行動可能なユニットをすべてチェックして、それぞれ行動を進めるようなロジックになっています。とりあえずの行動として、移動・攻撃のみ実装してあります。ユニットごとの行動はAOEシリーズのように行動が予約できるようにしてあります(移動の中継地点の設定など)。移動処理では目標地点・または目標ユニットを設定できるようにしました。現状だとユニットがぶつかったときに干渉しないので、同じ目標地点を指定した場合に重なってしまいます。解決策として、ユニットごとに他のユニットが入れないようにする占有領域を設定しようと思います。
    ひとまずのテストとして、カードをプレイした場合に相手の BaseField (最上段)に移動し、次の行動として相手の本拠地に向かうように設定してみました。
    落ち着いたら移動方向が変わったときにアイコンの向きを変えたりしたいと思います。