LoginSignup
3
2

More than 5 years have passed since last update.

ターン制2Dゲーム作成の仕様を検討してみた

Posted at

概要

Unity ML-Agentsの検証で、ターン制でも強化学習できるのか?という疑問があったので、ターン制バトルゲームを作ってみようと思い、まずは仕様検討からしてみました。1人プロジェクトだけど、インセプションデッキもつくってみました。

インセプションデッキは1人プロジェクトでもまとめておくと、後々頼りになるから、おすすめ。
設計もUMLとかで見える化しておくとないのとでは、後からじわじわと効いてきます。

詳細はまあ適当。まぁ週末の息抜きだからね。仕方ないね。

同じような案件を抱えておられるからがいたら、ぜひ話がしたい!呑みに行きたい!

インセプションデッキ

プロジェクトの名前

EndlessTurnBattle

名前をつけた理由

  • 終わらないターン制バトルゲームにしたい
  • 強化学習でぶん回せるようにしたい

我われはなぜここにいるのか?

  1. ターン制ゲームで強化学習が活用できるか検証する
  2. Unity ML-Agentsの使いどころを知るため

プロジェクトの根幹に関わる理由

Unity ML-Agentsが活用できるターン制ゲームをつくる!

エレベーターピッチ

  • Unity ML-Agentsを活用してゲーム開発したい
  • ゲーム開発者向けの、
  • ずっと俺のターンというプロダクトは、
  • ターン制2Dゲームです。
  • これはUnity ML-AgentsによるNPCの実装ができ、
  • 開発者による調整とは違って、
  • NPCの調整が自動かできる可能性が備わっています。

パッケージデザイン

ずっと俺のターン!!

最高のキャッチコピー

Unity ML-Agentsを利用してターン制バトルのNPCが調整できる!

ユーザーへのアピール

  1. Unity ML-Agentsを利用してNPC調整ができる
  2. Unity ML-Agentsの活用方法がみえてくる

やらないことリスト

カテゴリ 項目 やる/やらない/あとで 理由
強化学習 Unity ML-Agentsの組み込み やる 必須
ゲーム バトル やる 必須だから
ゲーム ストーリー やらない リリースしないから
ゲーム キャラクタ育成 やらない 自動でパターンつくるから
ゲーム ユーザ操作 あとで決める 強化学習が優先されるから
デザイン キャラ作成 やらない 既存キャラを流用するから

プロジェクトコミュニティは...

(略)

技術的な解決策の概要

採用する技術

  • C#
  • Unity ML-Agents
  • Unity、VSCode
  • PPO

夜も眠れなくなるような問題は何だろう?

  • ターン制ゲームにUnity ML-Agentsが合わない
  • ゲーム開発できない

期間を見極める

(略)

トレードオフ・スライダー

典型的なフォース

max >>> >>> >>> min 項目
o 機能をぜんぶ揃える(スコープ)
o 予算内に収める(予算)
o 期日を死守する(時間)
o 高い品質、少ない欠陥(品質)

上記以外で重要なこと

max >>> >>> >>> min 項目
o 使い勝手
o とにかくシンプルに!
o 詳細な監査ログ

何がどれだけ必要なのか

(略)

俺たちの"Aチーム"

人数 役割 強みや期待すること
1 アナリスト Unity ML-Agentsの特性を知っている
2 開発者 Unity、C#が利用できる

仕様

キャラデータは流用する

すばらしきポケモンエコシステム
https://qiita.com/seya/items/47dc0ebae55674d8902f

バトル方式

  • アクティビティターン(FF方式?)
  • 3 vs 3
  • 6体の速度によってコマンド選択順を決定する
  • コマンドは[どの行動]を[どの敵に]する
    • なにもしない、防御もあり
  • コマンド選択後すぐに行動する
  • 全滅させたら勝ち、させられたら負け

行動

  • アイテム利用はなし

画面描画

  • コマンド選択と行動がログ表示される
  • 状況が表示される
  • 勝敗数が表示される

強化学習

  • 3体の行動を選択する
  • プレイヤーと敵
    • プレイヤーは強化学習せず操作可能にする
  • 敵駒を倒すと+
  • 手駒が倒されると-
  • 全滅させると+
  • 全滅させられると-
  • 敵駒を攻撃すると+
  • 手駒が攻撃されると-

詳細仕様

ゲーム制御

ゲーム開始時

  • キャラクターをプレイヤごとに3体ずつランダムに選択する
  • ターン制御を開始する

ターン終了時

  • 勝敗を判定する
  • 勝敗が決した場合、ゲーム終了する
  • ゲーム終了後、再度ゲーム開始する

ターン制御

ターン開始時

  • 行動可能なキャラクタで行動順を決定する

ターン進行中

  • 行動可能なキャラクタのプレイヤに行動決定を指示する
  • ターン順から行動終了したキャラクタを削除する

ターン終了時

  • ゲーム制御に勝敗判定を確認する

プレーヤ

  • 行動可能なキャラクターの行動を指示する

キャラクタ

  • 指示された行動を行う
  • 攻撃された場合、スタミナを減少させる
  • 行動可能判定を行う

状況表示

  • ターン順を表示する
  • 各キャラクターの状態を表示する

スコア

  • 勝敗数を表示する

ログ

  • 各種ログを表示する

状態遷移図

ターン制バトル状態遷移図

@startuml{ターン制バトル状態遷移図.png}
[*] --> ゲーム開始前
ゲーム開始前 -> ゲーム中
state ゲーム中 {
  [*] --> ターン開始前
  ターン開始前 -down-> ターン開始
  ターン終了 -right-> ターン開始前
  ターン終了 -right-> ゲーム開始前
  ターン終了 --> ゲーム終了

  ターン開始 --> 行動選択
  行動選択 -> 行動
  行動 -right-> 行動終了
  行動終了 -> ターン終了
}
state ゲーム終了 {
}
ゲーム終了 --> [*]

ゲーム開始前 : entry / キャラクター選択
ゲーム開始前 : exit / ゲーム開始

ゲーム中 : do / ターン順表示
ゲーム中 : do / キャラクター状態表示

ターン開始前 : entry / 行動キャラ指定
ターン開始前 : exit / ターン開始

ターン開始 : entry / 行動パターン設定
ターン開始 : exit / 行動開始

行動選択 : do / 行動選択待ち受け

行動 : entry / 行動実行
行動 : exit / 行動終了

行動終了 : entry / 行動結果反映
行動終了 : exit / 自ターン終了

ターン終了 : entry / 勝敗判定
ターン終了 : exit / 次ターン開始
ターン終了 : exit / ゲーム終了
@enduml

参考

5分でわかった気になるインセプションデッキ
https://www.slideshare.net/TakaoOyobe/5-45195080

スクラムで使う「インセプションデッキ」のmarkdown形式版テンプレート
https://qiita.com/bremen/items/ed491246ed83630bc84d

PlantUML - 状態遷移図(ステートマシン図)
http://yohshiy.blog.fc2.com/blog-entry-157.html

サクッとPlantUMLで状態遷移図を書いてみた
https://qiita.com/ysida/items/0bcc207947cbce6251df

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2