778a0aの日記

戦略シミュレーションゲーム開発、本の感想、ソフトウェア技術についてなど

『北天に楽土あり: 最上義光伝』読書メモ

山形あたりの地理に詳しくなった。

全体的に小気味よく軽快に進んでいって良い感じだった。余計な創作がなくサクサク読めた。

前半はまあまあスケールの小さい話で、かつての羽州探題の小領主の家が生き残りを賭けて戦い、成り上がっていく話。戦略ゲームの弱小勢力の序盤のおもむき。

後半の豊臣政権下のいざこざ、政治闘争、軋轢がとても良い感じだった。(特に奥州の)ごちゃごちゃと分かりにくい水面下の動きが綺麗に整理されていて分かりやすかった。

まとめとして、最上家周りの史実の流れや人間関係を効率よく学べるタイパの良い小説だった。歴史書のように無味乾燥でもなく、創作多めな娯楽小説のように冗長なオリジナル展開があるわけでもなく、適切な分量で綺麗に話がまとまっていた。

Blazor Hybridの雑メモ(Blazor + Windows Forms or WPF)

さくっとデスクトップアプリを作るのにBlazor Hybrid(Blazor + Windows Forms or WPF or MAUI)が思ったより良い感じだったので、雑メモを残しておきます。

セットアップ方法など

プロジェクトテンプレートないのか...という感じですが、一度セットアップしてしまえばRazorコンポーネントのホットリロードもデフォルトで普通に動いて開発者体験は良い感じでした。

ホットリロードはWPFのそれに比べるとちょっと遅い(数百ms程度の遅延)ですが個人的には許容範囲でした。今後の高速化に期待です。

画面をHTMLで書きつつ、ボタンクリック時の動作などをC#で書けて、自由に.NETのAPIでスレッドを作れるしファイルも読み書きできるしで快適です。軽く触っただけではどこまでがWebAssemblyで動いていて、どこまでがSignalRを通してサーバープロセス側?で実行されているのかよく分からない(≒意識しなくて良い)感じでよくできているなと思いました。(未だによく分かっていません)

とてもいい出来なので、Windows向けデスクトップアプリ作りにおいては、ElectronもTauriもFlutterもWPFもWinUIもいらない感じになるかもと思いました。(少なくともXAML系のUIフレームワークよりは遥かに開発生産性が良いです

Blazor向けUIライブラリについて

参考リンク:

以下は、Blazor Hybrid(Windows Forms)で適当にいくつかのBlazor向けUIライブラリを使って、1アイテムに多数のボタンやチェックボックスが含まれた、数千個のリストアイテムを表示するまあまあ重めの画面を作ってみたときの雑メモです。重さについて色々書いていますが、極端な例での話なので普通に作る分にはどのUIライブラリも十分に高速だと思います。

  • MudBlazor: いまのところ一番人気。マテリアルデザインベースなのが好みが分かれそう。コンポーネントをカスタマイズしやすいのは◯。あとやや重い気がする。Tailwind風の機能は便利でいい。ただ、素のHTML要素には反映してくれない?のがMudBlazorのコンポーネントとHTML要素を併用する場合に面倒そう
  • Fluent UI Blazor: MS謹製。Fluent UIのWeb Components版のBlazor用ラッパー?。見た目はシンプルで良い感じ。だけどWeb Components化されていたり、アクセシビリティ対応していたりする影響からかMudBlazorより大分重い。あとFluentStackにflexが設定されないバグ?がある(Blazor Hybridで使っているせい?)。書き方もやや冗長で面倒。フォーム系のコンポーネントが重いので、それを使わず必要なところだけ使う形にすればいいかも。かといってレイアウト系が他と比べて優れているわけでもないし、上記のflexにならないバグなど根本的なところの信頼性・品質がまだ不安
  • Ant Design Blazor: AntグループのUIライブラリのBlazor版。チャートとかも揃っていてFluent UI Blazorより人気がある。見た目はシンプル寄り。書き味はいい感じ。重さはFluent UI BlazorほどではないけどMudBlazorよりは重い気がする
  • Radzen: Redditでなんか評判が高かった。MudBlazorと同じくマテリアルデザインチックなリップル効果やアニメーションがついている
  • 素のHTML: やっぱりダントツで速い。スタイル付けにTailwind等を使うとホットリロードの動作がrazorファイル更新反映→少し遅れてcssファイル更新反映、という感じになるのが微妙といえば微妙だけどそこまでは気にならない

まとめとしては、マテリアルデザインで問題ないならMudBlazorが良い、そうでないならAntBlazorが良さそう、アクセシビリティ対応が必要かWeb ComponentsやMS謹製が好きならFluent UI Blazorでもまあなんとかなるかも、高度なカスタマイズが必要なら素のHTMLもあり、という感じでした。

次は時間があればBlazor + MAUIでモバイルアプリを作るのがどんな感じなのか調べてみたいと思います。

その他参考記事

以上です。

ドメイン移行(独自ドメインからの撤退)

9月末にしれっとこのブログのドメインをhatenablog.comから独自ドメインに移行していたのですが、Googleの検索流入がガクっと下がり(10分の1以下)、さらに検索ページインデックスにも登録されなくなってしまったのでhatenablog.comに戻しました。

記事数も少ないのでインデックス登録するほどのサイトでもないと判断されたみたいです()

インデックス未登録が増えていく様子

独自ドメインはロマンですが、モチベ的にはPVも大事なので大人しくhatenablog.comで生きていきます🤕

なお独自ドメインからhatenablog.comに戻すと、独自ドメイン時代につけてくれたはてなスターが消えることが分かりました。スターをつけてくれた方に申し訳ないです。

以上です。

2024年7月~9月の振り返り

前の投稿から随分と間が空いてしまいました。一度リズムを崩すと大変というか、定期的に投稿する習慣をつけないといけないですね...。

年初に立てた目標に対して、7月から9月までの取り組みを振り返ります。

ゲーム開発

戦略シミュレーションゲームを完成させてSteamまたはPlayストアで公開することを第一とする。また、そのための足がかりとして、まずは既存のゲーム作品をそっくり真似た習作ゲームを3個作る。

主要な結果

  • 戦略シミュレーションゲームを完成させ、ストアに公開する
  • 習作ゲームを3個作る

この3ヶ月間(7月~9月)は、「betrayer」という戦略ゲームの英語版をitch.ioでリリースしたのが主な成果でした。その後は2作目のゲームの開発に取り掛かっていますが、中だるみもあったりで11月現在まだ完成には至っていません。年内の完成も厳しいかもですが、せめてβ版をunityroomでリリースするぐらいはしたいなと思っています。

今作っているゲームはこんな感じ↓のヘックスベースの戦略ゲームです。(11月中にゲームシステムを粗方完成させて、12月にUIを作ってバランス調整を行ってリリースできれば...)

開発中のゲーム画面

健康

運動習慣を定着させる。健康的な食事・生活サイクルを維持することも心がける。まずは続けられることを第一の目標とする。

主要な結果

  • 80%以上の週(41週以上)で週に3回・10分以上の運動を行う
  • 70%以上の日で11時までに就寝する

具体的な数値目標の達成状況は以下の通りでした。(期間は7月1日から9月30日まで)

  • 週3回10分以上の運動・・・92.3%達成(12週/13週)
  • 11時までに就寝・・・59.7%達成(55日/92日)

数値的にはぼちぼちでした。その他の取り組み・思ったこと:

  • 早寝早起き・朝型の生活習慣を取り入れようとしたのですが、なかなか寝付けない・夜中に目が覚めてしまう・早起きしても結局だらだらして時間を浪費してしまう等々、いろいろ微妙だったので断念しました
  • 運動習慣がしっかり定着してきたのは良かったものの、週5で運動するようになってゲーム開発の時間が削れたり、良いペースで体重減少させようとして食事が少なくなってエネルギー不足でゲーム開発が捗らなかったりと、健康以外のパフォーマンスが微妙になっていました

次の3ヶ月間は、ゲーム開発のパフォーマンスを上げることを第一に考え、健康関連の取り組みはほどほどにします。

情報発信

一年を通して継続的にこのブログ上で記事投稿を行う。まずは続けられることを第一の目標とする。海外での情報発信(主にゲーム開発関連)についての情報収集も行う。

主要な結果

  • このブログに10記事以上投稿する
    • 技術系、ガジェット系、本の感想系あたりの記事を想定
  • 海外のゲーム開発者コミュニティの文化を調べてまとめる
    • Reddit、itch.io、Unityフォーラムあたりを想定

7月に4本記事を投稿してから投稿が途絶えていました。これからまた再開していきます。

あと、9月末になんとなく思い立ってブログを独自ドメインに移行してみました(778a0a.hatenablog.com → blog.778a0a.com)。その結果、移行前は月300PV近くあったのが(ほぼGoogleからの検索流入)、60PVぐらいに激減してしまいました😇

PV推移

まあぼちぼち投稿を続けていけばまた回復するかなと思っています。

あと、いま世間で流行っているらしいマイクロブログ(死語?)を始めてみました(pub.778a0a.com)。ほぼ全て個人用のメモ書き・つぶやきですが、これからしようと思っていることをネット上に放流することで、ちょっとした有言実行感を出して自分を追い込んでパフォーマンスを上げようというのが狙いです。

あと、betrayerの英語版をRedditの r/indiegames に投稿してみました(投稿)。親切な人が一人コメントをくれたぐらいであんまり反響はありませんでした。

Redditの投稿・PV

1回の投稿でなにか分かるものでもないですが、まあUIは貧相で英語も怪しいのでこんなものかと思いました。そして、目の肥えた海外ユーザーの注目を得るようになるところまでゲームを作り込んで、PR力も身につけていくのは大変だろうなと思いました。

そんなことなどもあり(?)、来年からはまず真面目にX(Twitter)アカウントの運用を始めていこうと思いました。また、海外の情報発信は置いておいて、まずは日本での情報発信に専念しようと思いました。

その他

良い習慣づくりを意識する。毎月何かしらの習慣目標を掲げ、その達成・習慣化を目指す。直近ではAWS資格試験合格を目指す。その他は状況に応じて設定していく。

主要な結果

  • 毎月何かしらの習慣目標を掲げ、達成・習慣化を目指す
  • AWS認定資格試験に4個以上合格する
  • 40冊以上本を読む

習慣目標

習慣目標は、健康の項目でも書いた通り、早寝早起き・朝型化の習慣を身に着けようとしましたが、微妙だったので止めました。

次の3ヶ月間は、遅れ気味のゲーム開発に集中します。資格試験勉強をする時間はなさそうです。

読書

この3ヶ月間は15冊の本を読めました。読んだ本は以下のとおりです。ついでに5段階評価もつけてみます。

  • ★★★★☆ 世界標準の科学的トレーニング 今日から始める「タバタトレーニング」
  • ★★★★☆ 科学的に正しい筋トレ
  • ★★★★☆ インストラクショナルデザイン
  • ★★★★☆ 生活の世界歴史 1 古代オリエントの生活
  • ★★★★☆ 古代オリエントの宗教
  • ★★★★☆ 重耳 上・中・下
  • ★★★★☆ 時間栄養学入門
  • ★★★★☆ パフォーマンス・マネジメント
  • ★★★☆☆ 夜間飛行
  • その他4冊

本の感想記事も滞っているので、ゲーム開発が落ち着いたら...というといつまで経っても投稿できない気がするので、ゲーム開発と並行して気軽な気持ちで投稿していければと思います。

まとめ

いくつか成果はありつつも、ゲーム開発と情報発信が滞り気味だったのが大きな反省点です。

どちらも地道に続けていくことが大事だと思うので、10月~12月は心を入れ替えて頑張っていきます。(ということを11月後半に書いている模様)

以上です。

2024年4月~6月の振り返り

年初に立てた目標に対して、4月から6月までの取り組みを振り返ります。

ゲーム開発

戦略シミュレーションゲームを完成させてSteamまたはPlayストアで公開することを第一とする。また、そのための足がかりとして、まずは既存のゲーム作品をそっくり真似た習作ゲームを3個作る。

主要な結果

  • 戦略シミュレーションゲームを完成させ、ストアに公開する
  • 習作ゲームを3個作る

この3ヶ月間(4月~6月)で、「betrayer」というDeserter's2ライクなゲームの開発を行い、unityroomにてリリースできました。(リリース記事

次の3ヶ月間(7月~9月)では、betrayerの英語対応・モバイル対応を行いつつ、もう一つ新しい習作ゲームも開発してリリースできればと思います。その次の3ヶ月間(10月~12月)には3個目のゲームを開発し、各種ストアで販売できればと思います。

健康

運動習慣を定着させる。健康的な食事・生活サイクルを維持することも心がける。まずは続けられることを第一の目標とする。

主要な結果

  • 80%以上の週(41週以上)で週に3回・10分以上の運動を行う
  • 70%以上の日で11時までに就寝する

具体的な数値目標の達成状況は以下の通りでした。(期間は4月1日から6月31日まで)

  • 週3回10分以上の運動・・・91.7%達成(11週/12週)
  • 11時までに就寝・・・59.3%達成(54日/91日)

第1四半期と同様にぼちぼちでした。開発がノッているときに夜更かししてしまいがちなのが課題でした。睡眠や運動の本を読んで、睡眠の大事さや効果的な運動のやり方などの知識を身に着けました。

次の3ヶ月間は、夜ふかしの防止のため早寝早起き・朝型の生活習慣を導入しようと思っています。

情報発信

一年を通して継続的にこのブログ上で記事投稿を行う。まずは続けられることを第一の目標とする。海外での情報発信(主にゲーム開発関連)についての情報収集も行う。

主要な結果

  • このブログに10記事以上投稿する
    • 技術系、ガジェット系、本の感想系あたりの記事を想定
  • 海外のゲーム開発者コミュニティの文化を調べてまとめる
    • Reddit、itch.io、Unityフォーラムあたりを想定

この3ヶ月間のブログ記事投稿数は2個だけでした。ゲーム開発に集中するため記事投稿はほぼ断念していました。

次の3ヶ月間は、月一の投稿ペースを取り戻しつつ、今後開発するゲームのPRのため海外での情報発信も始めていこうと思っています。まずはRedditで活動を行っていく予定です。

以下が4月から6月までに投稿した記事です。

その他

良い習慣づくりを意識する。毎月何かしらの習慣目標を掲げ、その達成・習慣化を目指す。直近ではAWS資格試験合格を目指す。その他は状況に応じて設定していく。

主要な結果

  • 毎月何かしらの習慣目標を掲げ、達成・習慣化を目指す
  • AWS認定資格試験に4個以上合格する
  • 40冊以上本を読む

習慣目標

この3ヶ月間は毎日ゲーム開発に少しでも取り組むという習慣目標を立てて、実際にほぼ毎日ゲーム開発を進められ、無事ゲームのリリースまでできました。

次の3ヶ月間は、朝型生活の定着のために、毎朝(早起きして)机で何かしらの作業を行うという習慣目標を立てて頑張っていきます。

読書

この3ヶ月間は10冊の本を読めました。読んだ本は以下のとおりです。

  • 小説十八史略 6
  • 仏教の思想 11 古仏のまねび 道元
  • 働くあなたの快眠地図
  • 睡眠こそ最強の解決策である
  • 直観脳
  • アーサー王ここに眠る
  • 人生の短さについて 他2編
  • ウォーキングの科学
  • 呼吸の科学
  • その他1冊

持続的に開発を続けるために健康関連の本を多めに読みました。どの本も良い本でした。近いうちに感想記事を投稿できればと思います。

次の3ヶ月も最低10冊は読むのを目標にしつつ、せっかくなので気軽な気持ちで感想記事も投稿していければと思っています。

まとめ

この3ヶ月間は、ゲーム開発を集中して進めて無事一本ゲームをリリースできたのが何よりでした。次の3ヶ月間も同様のペースでゲーム開発に取り組み、もう一本ゲームをリリースできればと思います。そしてそんな開発を支えるためにも、より良い健康習慣を身に着けていければと思います。

順調なゲーム開発の一方で、情報発信はややおろそかになっているので、気軽に投稿する習慣を取り戻したいと思います。また、海外での情報発信も徐々に始めていければと思います。

以上です。

betrayer: 英語版をitch.ioにてリリースしました

戦略シミュレーションゲームの習作「betrayer」をitch.ioにてリリースしました。

以下のリンク先で遊べます。
https://778a0a.itch.io/betrayer

今後、karmaを貯めてRedditでもPRできればと思います。

英語版の画面

補足など

英語化にはUnity公式のLocalizationパッケージを利用しました。ソース中から日本語文字列を抜き出して一つのCSVファイルにまとめて、GitHub Copilotで英語部分を補完してもらい、Localizationパッケージのインポート機能で読み込む、という形で英語リソースを作成しました。

英語化のためのレイアウトの調整や、Localization利用のためのソースコードの書き換えなどがやや面倒でしたが、大きな困難はなく英語化できました。

日本語版ではBIZUDゴシックを使っていたのですが、アルファベットが等幅で読みにくいため、Noto Sans Japaneseに変更しました。

今後は練習のため以下の作業を行っていこうと思います。

  • 日本語・英語切り替え機能追加
  • ゲームパッド対応
  • モバイル対応
  • SteamやGoogle Play Store、App Storeでのリリース

モバイル対応までできたら、次のゲーム開発(NeoDeserter's PLUSっぽいゲームの作成)に進もうと思います。

以上です。

betrayer: 開発過程のまとめ

先日リリースした戦略シミュレーションゲームの習作「betrayer」について、記憶が新しいうちに開発過程をまとめておきます。ほとんど個人用のメモです。

おおまかには、2月からぽつぽつとゲームのことを考えたり技術調査を行ったりして、3月末から本格的な開発に入り、4月・5月はほぼ毎日開発を進めて、少し間が空いて6月末に仕上げてリリースという流れでした。

2月~3月 | コミットログ

2月から3月のうち実際にゲーム作りを進めたのは3、4日程度でした。ただ、頭の中ではゲームについて色々考えていて、お手本であるDeserter's2を遊んで仕様理解を深めたり(マップの広さは?登場キャラは何人?どんなキャラがいる?UIはどんな構成?などなど)、UIはどうやって作ればいいか(uGUI vs UI Toolkitなどなど)を考えたりしていました。

2月頃: UIについての検討

UIをuGUIではなくUI Tookitを使って作ることにしました。UI Toolkitは、まだまだこなれていない感はありますが、あまりリッチなエフェクト等を必要としない、こまごまとした表示要素の多い戦略シミュレーションゲームとの相性は良かったと思います。最新のUI Toolkitの機能であるBindingが気になってUnity 2023.2で開発を始めました(結局Bindingは使わず)。開発の途中でUnity 6 Previewに移行しました。

UI ToolkitのBindingは、少しは調べたものの、(1)結局イベントの登録は(現実的に)できないのでC#側でUQueryを使って要素を取得して設定する必要があって微妙、(2)UI BuilderでのBindingの設定の操作性・生産性もそんなに良いわけではない、(3)UXMLを直接編集するのも、補完は効かないしUI Builderを触ると強制フォーマットされるのでやりづらい、という理由から使わないことにしました。

代わりにRosalinaというUI Toolkit用のコード自動生成ツールを使うことにしました。Rosalinaは、UXMLで名前をつけた要素を定義・取得するコードが書かれたクラスを自動生成してくれるツールです(Windows FormsでいうDesigner.csのようなものを作ってくれるやつです)。このツールのおかげでUI ToolkitによるUI開発の効率が大分上がりました。

参考リンク

3月末頃: 本格開始

3月末頃から本格的に開発に着手しました。どこから手を付けていいか分からないので、(Desrter's2のUIという)分かりやすいお手本のあるタイトル画面やセーブデータ画面を作ろうとしたものの、気を取り直してゲーム進行のコアの部分、各フェイズ(戦略・個人・軍事)の実装を進めていきました。

この選択は正しかったと思います。あんまり面白みのないUI作りをコツコツ進めていくよりは、なるべく早くゲームのコア部分を作って、どんなに小さくてもいいので実際にゲームが動いていくところを見ていく方が、開発のモチベーションの維持につながったと思います。

当時のメモ:

2024-03-26 火
各フェイズの実装を進められた。
戦略シミュレーションゲームの作り方が全然見当もつかなくて、今まではとりあえずUIから作ればいいかなと思ったけどこれは微妙だったかもしれない。データ構造や処理の流れをまず作っていくのが正解な気がする。なので良いスタートを切れた。

4月~5月 | コミットログ

毎日少しずつでも開発を進めるという目標を立てて開発を進めていきました。以下がGitHubの緑化状況です。

1月から6月にかけてのGitHubのContribution Graphの状況

4月初旬: マップ・各フェイズ処理の作成

OpenAIのDALL·E 3にマップ画像を作ってもらい、Tilemapを使って国を配置していきました。Tilemapを使うのは初めてでしたが、エディター機能が便利で地形や河川の情報もTilemapで配置しました。DALL·E 3に作ってもらったマップ画像もとても良くて、開発のモチベーションが上がったことを覚えています。

4月初旬頃の開発画面

4月中旬: キャラデータ作成

チャットAI(Claude 3 Opus)に人物名を100名ぐらい生成してもらってランダムに国に配置し、画像生成AI(aipicasso/emi)で色々な特徴のキャラ画像をたくさん生成して良さげな画像を各キャラに設定して能力値を調整していきました。このあたりは別の記事で詳しく紹介できればと思います。(キャラ画像生成のコード

生成したキャラ画像の例

4月下旬~5月末: 各種アクション・UI・AI実装

色々な行動のUIやAIプレーヤーの動作などをコツコツ実装していきました。

5月末時点で、Unity Editor上でなら一応なんとなくは遊べるレベルになりました。

5月末時点のゲーム画面

6月: 仕上げ・リリース | コミットログ

なんとしてでも6月中にリリースしようと思っていたので、頑張って仕上げを行っていきました。

兵士画像をAsepriteで描いて、セーブ・ロード機能を作って、こまごまとした調整・バグ修正を行って、面倒臭くて最後まで手つかずだった決戦と反乱の処理を実装して、6月末にunityroomにてリリースできました。

最後の最後、6月30日23時ぐらいになって、UI ToolkitのPanelSettingsの「PanelScale Mode」を「Scale With Screen Size」にしているのに画面解像度1920x1080と960x540では微妙に表示が違っていて、unityroom上だとレイアウト崩れが多発することが分かって慌てましたが、ギリギリ修正できました。あまりギチギチにレイアウトするのはやめようと思いました。

7月~現在 | コミットログ

リリース後、真面目に何度かテストプレイをしてバグを直したり調整を行ったりしました。

なんとかそれなりに遊べるものになったようで、unityroom上でクリア報告や面白いというコメントをいただけてありがたいかぎりです。(7月4日現在、unityroom上の表示はプレイ数522、評価数4、コメント数6(作者返信3つ含む)でした)

テストプレイ結果1(クリア画面)

テストプレイ結果2

(余談ですが、フリージアで統一できたらbetrayer上級者だと思います。更にノーセーブでクリアできたらめちゃすごいと思います)

今後について

リリース記事にも書きましたが、次はまた練習のために「NeoDeserter's PLUS」というゲームを真似た習作ゲーム第二弾を作ってみようと思います。このゲームも面白くて、初めて遊んだときから自分の手でこんなゲームを作りたいとずっと思っていました。また3ヶ月後の9月末のリリースを目指して頑張っていこうと思います。

一方で、後々オリジナルのゲームを作ってリリースしていくために、上記のゲーム開発と並行してbetrayerに対して多言語化対応や、ゲームパッド対応、スマホ対応を行なってみようとも思います。これらがうまく行けばitch.ioや各種ストアでも無料公開できればと思います。(とはいえ習作ゲーム第二弾の開発を優先するつもりです)

終わりに

このゲームを作りはじめたときは、戦略シミュレーションゲームの作り方なんて皆目見当もつかず、完成する見通しも全然見えない状態でした。それでもエイヤで目標を立てて6月末までにリリースすると決めて、実際になんとか達成することができてホッとしています。

毎日、たった1秒だけでもいいからPCの前に座って開発を進めようと思って、気が乗らないときも疲れたときもほぼ毎日なんとかコツコツ開発を続けてきたこと、(4月に入ってから)この3ヶ月間でゲームが一本作れなければ、一生自分はゲームを作れないという覚悟(?)をもって取り組んだこと、などが良かったのかなと思います。

まだまだ作りたいと思うゲームはたくさんあります。そして、既存のゲームを真似するだけでなく、いつか自分にしか作れないメチャクチャ面白いゲームを作ってみたいという思いもあります。そんなゲームを作るためにも、これからもまだまだ頑張っていこうと思います。

以上です。