0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[Unity][RoboCup] CrossView開発日記 #7 (最終回)

Posted at

CrossViewとは

こちらの記事をご覧ください。

はじめに

ここまでで、CrossViewを作り始めるにあたって解決すべき「技術課題」を、事前にテストプログラムを作ることで確認してきました。

  • Football_1
    • 3DモデルとAnimatorControllerで、Mixamoアニメーションを制御する
  • Football_2
    • 3Dモデルの滑らかな移動、方向転換、首振り動作、視界領域を表す扇形オブジェクトの生成
  • Football_3
    • ログファイルの読み込み、パース処理、ログ再生の為の定期タイマー管理
  • Football_4
    • プレーヤーの3DモデルをPrefabからインスタンス化、背番号、NightModeの試作
  • Football_5
    • ViewModeの試作(全体表示と三人称表示)
  • Football_6
    • Settings画面の試作(プレーヤーのキャラクタ変更)

いざ、CrossView開発

テストプログラムの作成により、機能ごとに実装方法を事前に確認でき、またバグもある程度は先行して取り除けました。

次はいよいよ、本実装です。

CrossView_NewProject.png

UnityHubから新規作成で、CrossViewプロジェクトを開始して、

  • プロジェクト設定
    • Api Compatibility Level=.NET 4.x(UnityStandaloneFileBrowserの為)
    • PackageManagerにて、VersionControlを削除(UnityStandaloneFileBrowserの為)
    • Quality->Pixel Light Countを 23以上の値に(Directional=1個, SpotLight=22個)
  • Sceneに3Dオブジェクトを作成
    • サッカーフィールド用のテクスチャは、Windows付属のペイントアプリで自力で描画!
    • サッカー場のサイズは、ここを参考に
  • SceneにUIオブジェクトを作成
    • Football_3をベースに作成
    • ファイル選択、読み込み、パース処理、ログデータの内部構築まで
    • フレームレート表示を追加
    • MainCameraのズーム機能を実装(AutoScrollも)
  • Settings画面を追加
    • Football_6をベースに作成
    • 今回は2つのペアから選ぶことに
  • ログファイルの読み込み直後の初期化処理
    • GameControlクラスに画面制御の機能を集約
    • 得点ボードにチーム名と試合結果の得点を表示したり、ログファイルに記録されているゴール幅の設定値に合わせてサイズ調整したり
    • ボールをセンターサークルに配置
    • Settings画面で選んだキャラクタで、合計22名のプレーヤーをインスタンス化、ピッチサイドに並ばせる(Football_4)
  • ログ再生の作りこみ
    • Play,Pause,Next,Prevボタン押下時の処理を追加(SimLogPlayerクラス)
    • Cycle数を直接入力でジャンプさせる機能を追加
    • SimLogPlayerクラスが通知してくるイベントに応じて、
      • 現在のCycle数の表示を更新
      • 再生ステータスに合わせてボタン類のEnable/Disable状態を変更
    • 定期タイマーの発動で、ログデータの内容を画面に反映
      • PlayMode表示の更新
      • 得点の更新
      • ボールやプレーヤーの動きを制御(Football_2)
      • プレーヤーにKick等のアニメーションを実行したり(Football_1)
    • ログ再生のスピード変更(同時に、アニメーション再生のスピードも調整)に対応
  • ViewModeの実装(Football_5)
    • 三人称画面では、右上のDropdownで選択プレーヤーを切り替え可能
      • カメラの追従対象を変更
  • NightModeの実装(Football_4)

追加実装

一通り、基本機能が動くことを確認出来たら、欲が出てきて、細かい小機能を追加することにしました。

CrossView_Scene_3D.png

  • 三人称画面
    • 方向感覚がわからなくなるのを防ぐために、ピッチわきに観客席などを用意
    • Information表示を追加(選択プレーヤーに合わせて情報を更新)
    • 背番号は、選択プレーヤーのみ強調表示
    • NightModeをONにした時、選択プレーヤーのみスポットライトを点灯するように
    • サッカーフィールド上に設置された仮想Flag(黄色いマーカー)を表示
  • 試合終了時、各プレーヤーのアニメーションをIdle状態にする
  • Unity標準のDropdownコントロールの、マウスホイールによるスクロール感度を調整
  • ファールやゴール、オフサイド発生時に、得点ボードの背景色を変える
  • ログファイルを読み込み中に、処理中アニメーションを表示
  • アプリ起動直後、フィールド上を選手がぐるぐる走りまわるデモ演出
  • ファイル選択ダイアログに、OpenSiteボタンを追加(公式アーカイブのサイトをブラウザで開く)
  • NextEvent,PrevEventボタンを追加(前後のPlayMode変化時点へのジャンプ)

OSSとして公開

  • README.mdの作成
  • ライセンスについて調査
    • UnityAssetStoreで入手した無料Assetは、ファイルのまま公開しちゃダメ
  • GitHubに公開用リポジトリの作成(CrossView3D)
    • 非公開にする、外部入手ファイルのFileList.txtを用意
    • プレーヤーのPrefabの作り方メモを用意
  • 自作Scriptのライセンスを検討(MIT Licenseを採用)
  • InnoSetupでインストーラー作成、リポジトリのReleaseページにアップロード
  • アナウンス
    • Qiita
    • RoboCup Soccer SimulationのDiscordに投稿
  • WebGL版の作成と、GitHub Pagesでの公開
  • Qiitaに開発日記を書く

開発期間

  • 2024年6月~ 書籍でC#とUnityの復習
  • 2024年7月~ RoboCupの公式マニュアルから、ログファイルの仕様を洗い出し
  • 2024年8月~ 実装(テストプログラム、本実装)
  • 2024年10月末 OSS公開

実現したかったけどペンディングにしたこと

  • 4x3の12画面分割やPicture In Pictureの採用
  • デザイン見直し(ViewMode, NightModeのアイコン)
  • キャラクタペアをもう1パターン用意したかった
  • ログファイル読み込み直後に、プレーヤーが初期位置まで走りこむ演出
  • ハーフタイム時(Cycle数=3000)に、間を置く演出
  • ログファイルに記録された team_graphic(XPS画像)の表示

最後に

2024年11月現在、サッカー日本代表は、男女ともに絶好調です。
今回、3DLogPlayerという周辺ツールを作ってみましたが、ぜひ、試合をする側の自律制御Agentプログラムを自分でも作ってみたいものです。(強化学習や転移学習を駆使して)

でも、今はフリーランスとしてお仕事を探す方が大事だなぁ~。涙)

以上です。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?