投稿記事

2024年 05月の記事 (22)

竹林ソフト 2024/05/31 20:00

NPC をコーディングして領地経営するゲーム開発(Python 対応の必要機能を実装する)

Python 対応の一番小難しい実装は終わりましたが、ぷち難しい実装が残っているのでやっていきます。

やったこと

ここまでで Python 側からゲーム側にコマンドを送るあたりが動作しました。今回はゲーム側から Python 側にデータを送るあたりを実装します。

そして実装しました。
やったことは

  • Python 側から要求されたデータを JSON フォーマットにしてゲーム側から送信する。
  • Python 側でデータを受信して処理する。

です。
実際に実装したのは、渡した建物のオブジェクトを返すメソッドです。

# 農場のリストを受け取り、リストの最初の農場を変数に代入している。
farm = world.buildings(buildings.farm)[0]

ここまでは時間を費やして動作しました。よいです。
そして実装前は、この実装が終わったら最低限の機能は実装し終わると思っていました。ただ、着手してみて課題がまだ残っているのに気付きました。

↓ これは移動まわりの実装なのですが、移動コマンドは NPC が移動完了するまで呼び出しが終わらない仕組みなのもあって、こんな風に仕組みが小難しくなっています。

この Lua で書かれたコードと同様の処理を Python で実装すればいい気はするのですが、本当にそうかとか、もっと楽でシンプルな実装がないかとかを考えてから着手したいので、続きは次回にやります。

まとめと今後の予定

ゲーム側から Python 側にデータを送る処理を実装して動作しました。よいです。
次回は、NPC を移動させるブロッキングなコマンド処理を検討して実現したいと思います。がんばります。

竹林ソフト 2024/05/30 20:00

ねこ巫女籠城ゲーム開発(ゲーム管理の Lua スクリプトを導入する)

以前の記事 でゲーム進行を管理する Lua スクリプトをどう扱うかを検討したので、そのあたりを実装していきます。

やったこと

ゲーム開始の処理の確認

流れとしては

  • NewGame シーンでプレイヤーが地形を選んで「開始」する。
    • 地形データを new_game.dat という名前で保存しておく。
    • new_game.dat に Lua スクリプトを埋め込む。
  • Game シーンの読み込み
    • フィールドの生成と読み込み
    • Lua スクリプトの実行

という感じにします。地形や建物の読み込みが終わった後に、Lua スクリプトでの管理を始める予定です。
そして、とりあえずフリープレイ用の Lua スクリプトを作成しました。

↓ 仮作成した Lua スクリプト

よいです。

Lua スクリプトを実行する

次は、この Lua スクリプトを実際に実行して game:flag() とか game:setFlag() なんかを実行できるようにします。

このあたりは MoonSharp アセットでどうにかします。

そして、詳細は省略しますが最終的に Unity のゲームのメインループで Lua スクリプトのコルーチンがエラーなく動作するようにできました。

よいです。

まとめと今後の予定

ゲームのもろもろを管理するための Lua スクリプトを取り込みました。よいです。
住民や敵の追加も Lua スクリプトで管理したり、会話シーンを表示できるようにしたりとか、引き続き機能拡張していこうと思います。

次回は、この Lua スクリプトまわりの続きか、敵の移動に着手しようと思います。がんばります。

竹林ソフト 2024/05/29 20:00

ニャン作くんのタイピングゲーム開発(ゲーム遷移の実装)

まだ開発初期で小難しいことはないので淡々と開発していきます。

やったこと

WebGL でビルドして Web アプリとしてプレイできるようにする

まだ何も実装していませんが、Unityroom で限定公開するためにWebGL でビルドします。限定公開とはリンクを知ってればプレイできるやつです。

特に失敗する理由がないので問題ないだろうと思っていましたが、登録ページの記述に従って Compression Format を変更するだけだとダメで「→ 詳しくはこちら」に書いてあった他の設定も変えないとダメだった、という引っ掛け問題にハマったりはしました。

↓ 登録ページでの記述

↓ 詳しくはこちらの記述

Unity のバージョンによってデフォルト値が違うのかもしれません。Unityroom は Unity の過去バージョンも含めてサポートしてて大変だなと思いました。

ちょっと問題にハマりかけましたが、なんとかなったのでよいです。

ゲームのシーン遷移を実装する

シーンとは Unity での動作を管理する概念です。タイトルとゲームのシーンを用意して、こんな感じにする予定です。

  • タイトル ... ゲームモードとステージを選んでゲーム開始、プレイ履歴表示もする。
  • ゲーム ... タイピングしてリザルト表示してタイトルに戻る。

くらいです。
そして、SceneManager.LoadScene() を呼び出してタイトルからゲームのシーンに遷移するあたりを実装して動作しました。よいです。

Google スプレッドシート管理の入力文をゲーム内に取り込む

前回までの記事で、Google スプレッドシートのデータを YAML ファイルとして保存するあたりは動作しているので、YAML ファイルを読み込むだけの実装を行います。

このあたりは、YamlDotNet for Unity アセットを使って読み込みました。よいです。

ゲームシーンで取り込んだ例外がタイピングできるようにする

タイピング用アセットを使って、入力分が使われるようにします。

まとめと今後の予定

今回は基本的な動作確認を行いました。よいです。
次回は、ニャン作くんのモデルを再調整してみるか、ゲームシステムというか、どういうゲームにするかの検討を行おうと思います。がんばります。

竹林ソフト 2024/05/28 20:00

Steam で遊んだ時間を可視化する(チャート表示)

「Steam のゲームを遊んでいるせいで趣味ゲー開発が進んでないのでは?」という疑念を抱いてしまった私は、真実を求めてツール開発を始めた。

前回の記事で Steam Web API を使ってゲームのプレイ時間を記録する Python スクリプトを作成したので、今回はチャート表示を実装します。

やったこと

JavaScript ライブラリの chart.js を使ってチャート表示を実現します。
もう少し詳しく書くと、

  • Steam Web API の取得結果を日付をつけて保存する。
  • csv 相当のデータに変換する。
  • 変換したデータを埋め込んだ html ファイルを作って chart.js で描画する。

という処理になります。
そして、作ったスクリプトがこれらです。

save_playtime.py (1.12kB)

ダウンロード

log2csv.py (1.87kB)

ダウンロード

chart.py (2.39kB)

ダウンロード

util.py (108.00B)

ダウンロード

↓ チャートの例

よいです。

ただ、この仕組みには問題があって、ゲームごとに「ある日時の保存された総プレイ時間とそれ以前の日付の総プレイ時間との差からプレイ時間を計算する」という処理で最初のデータは無視されるため、記録期間中に最初にプレイしたぶんの時間はチャートに反映されません。

これについては気にしないことにします。

まとめと今後の予定

Steam のゲームを遊んだ時間を可視化した結果、「こんなにか…」という感じで精神的に大ダメージを受けています。いやまぁ、気付かないようにしてただけで知ってはいました。いろいろむつかしいです。

このツールについては、だいたい欲しい機能は実装したので満足しました。よいです。
次回からは、いつもの趣味ゲー開発に戻ります。がんばります。

竹林ソフト 2024/05/27 20:00

Steam で遊んだ時間を可視化する(データの保存)

ふと思ったわけです。『Steam ゲームのプレイ時間が半分になったら 何時間の開発時間が失われずにすむだろうか…』と。

やったこと

というわけで、Steam API で遊んだゲーム情報を取得して保存してチャート表示する仕組みを作ります。何度も、そう何度も心の中の誰かが「やめろ、現実を見るな!」と言っているような気がしましたが、やっていきます。

Steam Web API キーの取得

下記ページにアクセスして Steam Web API キーを取得します。ドメイン名は適当な文字列で動作しました。
https://steamcommunity.com/dev/apikey

最近遊んだゲーム情報の取得

下記ページを参考に、スクリプトを作成しました。
https://partner.steamgames.com/doc/webapi/IPlayerService
https://qiita.com/Chronona/items/2e464ee96799dd0ed5c2

↓ 作成した Python スクリプト

save_playtime.py (1.12kB)

ダウンロード

↓ 実行例
2024-05-27 07:00:56.310640 {"Ghost of Tsushima DIRECTOR'S CUT": 3503, "Factorio": 160480, "Tom Clancy's The Division 2": 8003}

スクリプトを読めばわかると思いますが、Steam Web API キーと自分の steamid とを引数で渡して問い合わせを行い、必要な情報だけを行ごとに保存しています。(steam ID はプロフィールのページの URL に含まれています)

後は、これをタスクスケジューラなどで定期実行するようにすればオッケーです。

まとめと今後の予定

とりあえず、Steam に登録したゲームのプレイ時間を保存する仕組みを作成しました。
次回は、このデータを1日ごとに集計してチャート表示する Python スクリプト作成に着手する予定です。

« 1 2 3 4 5

月別アーカイブ

限定特典から探す

記事を検索