投稿記事

コーディングの記事 (85)

竹林ソフト 2024/06/26 20:00

NPC をコーディングして領地経営するゲーム開発(ダンジョンの敵の調整)

リリースに向けて、ダンジョンの敵パラメータを調整します。

やること

箇条書きすると

  • ダンジョンの敵のパラメータを調整する。
  • ダンジョンでの戦闘演出を調整する。
  • キャラクターのステータスアップ時の演出を追加する。
  • ステージの会話を記述していく。

です。

やったこと

ダンジョンの敵のパラメータを調整する

理想としては「簡単すぎない程度に歯ごたえがあるくらいの敵の強さ」を目指します。ただ、このゲームで NPC が強くなる要素がそこまで多くないので結局は「装備を強くして敵を倒す」になります。

そして、とりあえず現状の動作を確認しようとしたところ、予期していない動作をして頭を抱えているところです。

↓ 適切に動作していない様子

おかしい動作としては

  • 体力がゼロになった味方 NPC が倒れた後に攻撃している。
    • このとき体力バーが表示されていない。
  • 全滅して全員の体力がゼロなのにパーティーがダンジョンに向かった。
  • 全員の体力がゼロなので味方 NPC が表示されずに戦闘が始まった。
  • 数回戦闘を繰り返した後に正常な動作に戻る。

とかです。
えぇ…

あと、このステージではダンジョン探索して負けて自宅で体力回復するのが目的のステージなので、敵の強さはこのままでいいと思いました。

体力がゼロになった味方が攻撃するのを修正する

調べたところ、根本的に実装が間違っていたので修正しました。

あと、敵の弓の攻撃エフェクトが弓のものでなかったのも修正しました。
調べたところ、右手に持っている武器に対応した攻撃エフェクトを表示するようになっていたのですが、弓を左手に持たせていたのが原因でした。設定ファイルから左右の手の概念をなくして対処しました。

全員の体力がゼロなのにダンジョン探索にでかけたのを修正する

確認すると、3人にパーティを組ませて探索を開始させると、3回ほど連続して探索する動作をしていて、なんかこう、探索にでかけたときに何かをリセットする処理が必要そうな気がしています。
これについては、少し小難しそうなので次回にやります。

確認する前は「体力が少ないから、まずは回復させよう」という処理はプレイヤーが NPC 用のスクリプトに記述すれば解決するかなと思っていたのですが、そうではなくシステム側の問題でした。

それはそれとして、全員の体力がゼロのときにダンジョン探索を開始したら即座に敗北の処理が実行されるようにはしました。

↓ 即座にリコールするようにしたときの動作

よいです。

ダンジョン探索で経験値が得られるようにする

これも次回にやります。
ダンジョン探索においては「攻撃ごとに武器に定義した経験値が入る」「リコールするときに全パラメータに 1 ずつ経験値が入る」という処理を予定しています。

ダンジョン探索での気付き

  • 最後の敵との戦闘前に警告演出がほしい。
  • 体力バーが時間経過で減るものにする。
  • 経験値についてのヘルプがほしい。
  • 経験値が入ってパラメータが増加したときに、それがわかる演出を描画する。

とかでしょうか。
これらについてはまた後で着手します。

まとめと今後の予定

ダンジョンの敵の強さを設定しようとして、普通に遊べないのに気付いて修正していました。テストプレイが不足しているように思います。

次回はこの続きか、テストプレイに着手しようと思います。がんばります。

竹林ソフト 2024/06/21 20:00

NPC をコーディングして領地経営するゲーム開発(道具の攻撃力、Workshop 対応)

Steam さまへのリリース申請に向け、雑多なタスクをやっていきます。
最近はモチベーションが下がってしまっているのですが、何かしら作業します。

やったこと

装備品のパラメータ定義

とりあえず定義しました。

よいです。
攻撃力と防御力を定義したので、次はダンジョンがあるステージに敵の強さを調整して、そのステージで装備品のパラメータを調整していく予定です。

Steam Workshop 対応

いざステージ情報をアップロードするデモシーンを作ろうとして、何も考えてないのに気付いたので考えます。

  • 自作ステージのフォルダがアップロード候補として ScrollView にリスト表示する。
  • 1つのステージだけでもワールドとしてアップロードさせる。
    • ワールド: 複数ステージ1を1つのフォルダにしたもの
  • 名前、説明などを入力して新規アップロード。
  • アップロード済みのものがあり作者の場合は「新規」でなく「更新」にする。
    • このあたりのやり方は後で調べてから考える。

くらいでしょうか。
とりあえず検討が不足しているのがわかります。

まずは、上記のシーンを実際に作ってステージを Steam Workshop にアップロードできるようにします。そして、編集とかダウンロードを繰り返して問題の確認と修正を行っていきたいです。

まとめと今後の予定

開発のモチベーションがゼロに近いですが、作業しました。

次回もなにかしらの作業はしようと思います。がんばります。

竹林ソフト 2024/06/18 20:00

NPC をコーディングして領地経営するゲーム開発(ゲームビルド申請の準備)

来月末までの早期アクセスでの販売開始を目指し、作業を進めていきます。

やること

Steam さまに対して「このゲームを販売してもよいですか?」という申請に必要な作業を確認して着手していきます。

多言語対応

Steam さまへのゲーム審査を申請する際は「ストアページに対応言語として登録した言語で遊べるか」と「あからさまな不具合がないか」を特に意識しています。

とはいえ、このゲームについては体験版が審査済みなので、システムまわりの実装の修正はする必要がなくて、体験版から追加したステージの英語データを準備すればいいと思っています。

↓ 言語まわりだけ日本語と英語を併記している様子

そして、追加したステージでのセリフを英訳して終わりにしたいのですが、まだ日本語でのセリフを考えてないので、そこから着手する必要があります。

まとめると

  • 全ステージの会話イベントのセリフを日本語で作り終える。
  • 上記の台詞の英訳データを登録する。

になります。

Steam Workshop でのステージデータ共有

「私だったらこういうパラメータにするのになぁ」とか「こういうステージで遊びたい」をプレイヤーも実現できるように、ステージやパラメータのデータを Steam Workshop 経由で共有できるようにします。

現状でも必要なファイルが入ったフォルダをステージとしてプレイする仕組みは実装されているので、ステージデータを共有するために Steam SDK の API を介してファイルのアップロードとダウンロードを実装すればオッケーです。

今回、Steam Workshop の機能を Steam Workshop - Easy Steamworks Integration アセットで実現するか、Toolkit for Steamworks SDK アセットで実現するかを少し悩んでいます。

前者は過去に使ったこともあって慣れているのですがカスタマイズが小難しくて、後者はよさそうだけど使い方がわかってない状態です。悩ましいですね。

どちらを使うか悩んでいると書きましたが、この作品ではとりあえず前者の Denis Lapiner を使って機能の実装をしていこうと思います。

今は付属のデモシーンを実行したり、Steam のストアページで Workshop 用のタグを登録したりして、最初のデータをアップロードするまでを試行錯誤しているところです。

後でやること

ここまでに書いた機能以外では、Steam さまへの販売申請までに

  • ダンジョン探索の敵追加と装備品のパラメータ調整
  • チュートリアルをクリアした後のコンテンツ追加

もする必要があります。
こういう作業は「いつでもできる」と思っているせいか、最後まで残ってしまって心の重荷になりがちなので、なんとかしたいです。

まとめと今後の予定

Steam さまに6月末に販売申請して7月末の販売開始を目指しています。そして、そのための残タスクの書き出しと実装に着手しました。残タスクの確認は今後も定期的にやっていきます。

次回は、Steam Workshop まわりの動作確認を進めたり、不足しているデータの作成をしたりしたいです。がんばります。

竹林ソフト 2024/06/14 20:00

NPC をコーディングして領地経営するゲーム開発(基本チュートリアル追加)

現状では Lua を知っている前提でゲームが始まって、さすがにプレイヤーを置いてきぼりすぎかなと思うので、もう少しこう「これがエディタね」「エディタで lord.lua を開いて3行目にこのコマンドを入力してみようね」的なチュートリアルを追加します。

やったこと

まず、追加するチュートリアルのワールド(複数ステージの集まり)を定義しました。

↓ 定義したワールドとステージ構成

次に、コメントとして各ステージで何を説明するのかを記述しました。

よいです。
この各ステージがちゃんと動作するための作業は後でやることにして、これらのステージを実際にゲームで選択できるようにします。

↓ とりあえず、ワールドとして認識されるようにしました。よいです。

↓ アイコンを追加しました。アイコンは Modern Item Set Pack から選びました。

よいです。
そして、この追加したワールドはプレイしてもしなくてもよい、ようにしたいので「クリア済み」になるようにハードコーディングして、(クリア済みなので)最初からどのステージでもプレイできるようにしました。

↓ 対処前(左)、対処後(右)

よいです。

ワールドについては「チュートリアル」「カスタム」「Workshop 共有」のタブを追加して選んだタブごとのステージ表示も考えていますが、それはまた後で調整します。

まとめと今後の予定

ゲームの遊び方相当のチュートリアルのステージを作成して、実際にゲームで認識されるようにしました。よいです。

次回は、この続きか他の雑多な作業か Python 対応の続きに着手しようと思います。がんばります。

竹林ソフト 2024/06/11 20:00

NPC をコーディングして領地経営するゲーム開発(Python 対応版をビルドしてテスト)

Python 対応が進んで1ステージをクリアできるようになったので、Build して動作確認していきます。あと、Steam での審査を見据えた対応もやっていきます。

やったこと

ビルドしての動作確認

Python 対応が動くかをビルドして確認してみたところ、Python で動作しないどころか、Lua でも動作しませんでした。

なので検証のために SRDebugger を使います。私は SRDebugger は実行時にエラー状況を確認するのに使っています。

↓ SRDebugger で確認したエラー内容(途中まで)

エラーが確認できたので修正してしまえばいいのですが、Build 版でのみ問題になって Unity Editor 実行で問題にならないのは理解しておきたいです。とりあえず

  • Lua モードでゲーム開始してもエラーになるのはおかしい。
  • Python モードでも本来はエラーなく動作してほしい。

というあたりが気になっています。

確認したところ、1つ目の問題については、NPC 用のスクリプトを配置するフォルダに .py と .lua の両方があったときに、スクリプト言語の指定と関係なく .py が利用されるのが原因でした。

これは、使うように指定したスクリプト言語を優先するよう変更します。

また、2つ目の問題については Process クラスを IL2CPP ビルドで Win32API の System.Diagnostics.Process を使っているのが原因でした。IL2CPP ビルドでも動作するよう作られた KS.Diagnostics.Process を使うように namespace を修正して対処しました。

ここまで修正したところ、Build 版でも Python スクリプトでの動作が確認できました。大変よいです。

そして、この作業で Build 版と Unity Editor 版との動作の違いはなくなったので、改めて Unity Editor でもって 未実装の機能の実装をしていこうと思います。

リリースまでのタスク確認

リリースまで2ヶ月を切ったので、改めて何をするかを書き出して確認します。
この流れは前回の記事でもやった気がしますが、今後も繰り返しやっていきます。

やること
- 全ステージにそれっぽい会話を考えて適用する。(必須)
- ダンジョンの敵がテスト用のままなのを変更する。(必須)
- Python 対応を終わらせる。(必須にしたいが間に合う気がしない)
- 3D 表示モードを実装する(必須、でなくてもいい)
- カスタムステージの仕組みを実装する。(必須にしたいが間に合う気がしない)
- カスタムステージを Steam Workshop で共有できるようにする。(必須)
- 初心者向けのチュートリアルのステージを用意する。(必須)
- 雑多なパラメータを定義する。(必須)
- 称号の取得条件を表示できるようにする。(必須)

くらいでしょうか。
必須なものだけ書き出そうとして「いやまぁ、無理だよな」と思った気持ちも併記しました。

全体的に眺めると「Python 対応をできるところまでやりつつ、Lua で遊べるように作り込んでいく」という感じでしょうか?

やることの詳細はツールで管理しているのですが、残タスクが 160 個くらいあって悩ましいです。

↓ そうタスク数と完了タスク数のチャート

まとめと今後の予定

今回は Python 対応で追加したコードが Build しても動作するかを確認して対処しました。大変よいです。

次回からは Python 対応以外の実装を終わらせるべく作業したり、Python 対応もしたり、プレイし直して修正すべき違和感を洗い出したりしようと思います。がんばります。

« 1 2 3 4 5 6 7

月別アーカイブ

限定特典から探す

記事を検索