投稿記事

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

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

NPC をコーディングして領地経営するゲーム開発(倉庫と荷馬車の実装)

以前の記事で検討した「倉庫」と荷馬車を実装していきます。

やったこと

倉庫の建物を追加する

↓ 倉庫っぽい絵を微調整して、ゲームで表示されるようにしました。

ストレージのスロット数と最大アイテム数も調整しました。よいです。

荷馬車の見た目を準備する

↓ 荷馬車の見た目を作成して、アニメーションするように調整しました。

よいです。
馬と荷車に影がないとか、車輪の回転速度が合ってないとかの見た目の調整は後でまたやります。

倉庫から運搬する API を追加する

キャラクター用のスクリプトから荷馬車で運搬できるようにします。

↓ 荷馬車で運搬するときのコード
character:carryByCart(keep, Items.Bread, 12)

↓ 荷馬車で運搬している様子。

運搬先のアイテムが適切に増加するあたりも動作するのを確認できました。
よいです。

まとめと今後の予定

「倉庫」から複数個のアイテムをまとめて運搬する仕組みを実装しました。よいです。
次回は Python 対応か全体的な見直しをやろうと思います。がんばります。

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

NPC をコーディングして領地経営するゲーム開発(市場と倉庫の仕様検討)

今回は特殊な建物の仕様を検討して実装に着手します。

やりたいこと

少し特殊な建物である「倉庫」「交易所」について仕様を決めていきます。

倉庫

通常は NPC 1体が1つのアイテムしか運搬できないのですが、倉庫から他の建物への運搬は「荷馬車」を使って1つのアイテム複数を1回の運搬で行えるようにします。

考えた仕様としては

  • 倉庫の上に NPC がいるときに、荷馬車でアイテムを運搬するコマンドが使える。
    • コマンドを実行する際に板材を消費する。
  • 運搬を開始すると、運搬が完了するまで中断できない。
  • 運搬が完了すると荷馬車は消える。
  • 荷馬車と通常ユニットの移動速度は同じ。

この倉庫では、オーダーをなくしてその場所に「倉庫の上の NPC は輸送コマンド~を利用できます」「輸送コマンドの実行には木材が必要です」みたいなメッセージを表示しようと思っています。

↓ 通常の建物をクリックしたときのパネル。オーダーとストレージがある。

よいです。

交易所

これはエンドコンテンツとしての動作を想定していて「たくさんのアイテムを輸出して貨幣を得る」「大量の貨幣で貴重なアイテムを購入する」といった役割をさせたいです。

基本的には他の建物と同じで、輸出のときには「輸出するアイテムをストーレジに入れてワークすると貨幣が得られる」という風にして、輸入のときには「オーダーを選んで貨幣をストレージに入れてワークするとアイテムが得られる」という風にします。

ただ、他の建物と同じ横長のオーダー表示にする必要はなくて、輸出のときは例えば「銅貨1を入手できる交易品」グループの中に「卵x4」というふうな簡略表示にしようと思います。

貨幣については銅貨10枚で銀貨1枚、銀貨10枚で金貨1枚、というレートにします。
この貨幣の両替も「銅貨10枚をクラフトすると銀貨1枚が得られる」というオーダーを用意しておけば後で変更もできそうだしオッケーです。

この交易所での交換レートはステージをつくる人が調整できる必要がありそうなので、ステージ初期化スクリプトの setup.lua からオーダーを新規追加する機能の実装が必要そうです。

やったこと

「倉庫」で運搬したときに表示する荷馬車をどう表現するかを試行錯誤しました。
馬イラストは NPC に使っている 2D Pixel Unit Maker - SPUM アセットに馬も含まれていたのでそれを利用しています。

今のところ1番上の荷車を引くタイプにして、荷物に運んでいるアイテムのアイコン表示をしようと思っています。
実際に動作する荷馬車を作るあたりや、運搬コマンドを追加するあたりは次回以降にやろうと思います。

雑多な修正

雑多なタスクも着手していきます。やらないと終わらないので。

ダンジョンの背景の追加

ダンジョンの背景画像は多重スクロールするのですが、洞窟だけでなく暗い城塞内部と暗い森のスクロール背景を追加しました。
これらの背景は 2D Dungeon Backgrounds for Mobile GamesSimple 2D Background Pack アセットとを使っています。

よいです。

まとめと今後の予定

漠然と考えていた「倉庫(と荷馬車)」と「交易所」についてどうするか検討しました。よいです。

次回は倉庫と荷馬車の実装か、製品版のゲームとして見直したときに未実装な機能に着手しようと思います。がんばります。

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

NPC をコーディングして領地経営するゲーム開発(必要な Python モジュールの準備)

ゲームプレイを Lua スクリプトだけでなく Python スクリプトでも行えるあたりの実装をしていきます。
今回は、プレイヤーが記述する Python スクリプトに必要なモジュールファイルの準備を行います。

やったこと

Python が1行ずつ実行されるようにする

以前の記事 で Python を1行ずつ実行するあたりは動作したので、それを取り込みました。

そして現状の edict.py が

import pdb; pdb.set_trace()
chart.addItem(Items.Wheat)

これ↑で、これを実行してゲーム内のコンソールに表示されたものがこれ↓です。

ちゃんと python スクリプトとして評価して「chart ってなに?」というエラーメッセージが表示されているのがわかります。

ここまで動作して大変よいです。

Python としてのエラーを修正する

先ほどの chart やこれから必要になる edict, character, world などは Python のモジュールとして提供することにします。Python は詳しくないので、このあたりからは試行錯誤です。

とりあえず、必要そうなファイルを StreamingAssets ディレクトリ経由で提供することにして、そこをパスに加えます。

やったことをまとめると

  • chart.py, items.py を Assets/Streaming/Assets/Python に追加した。
  • sys.path にパスを追加してから必要なモジュールを import した。

です。
現状の Python スクリプトはこうなりました。

import pdb; pdb.set_trace()
import sys
import os
print(os.getcwd())
sys.path.append('full/path/to/Assets/StreamingAssets/Python')
sys.path.append(os.path.join(os.path.dirname(__file__), '../..'))
import chart
import items

chart.addItem(items.wheat)

よいです。
最終的にはこの Python スクリプトの前半のコードは、ゲームの実行時に追加するようにします。

まとめと今後の予定

Python スクリプトをゲーム中から実際に実行するあたりに着手しました。よいです。
次に行うべきことは、ゲーム側が提供する API が動作するようにすることで、これは TCP/IP 通信でどうにかしようと思います。

次回は、API が動作するようにするあたりか、アイテムや建物のパラメータ記述をしようと思います。がんばります。

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

NPC をコーディングして領地経営するゲーム開発(Python 対応: スクリプト実行)

Lua だけでなく Python でも NPC をコーディングできるようにしていきます。

やったこと

スクリプト言語を選ぶパネルを追加

本当は使うスクリプト言語は自動判別させたかったのですが、チュートリアル中に「このサンプルを変更してね」という処理の際にどのスクリプト言語のサンプルをコピーするかを決める際に必要だったので、そういうパネルを追加しました。

よいです。

各ステージでのファイルコピーを Python ファイルにする

いろいろ調整して、コピー元に .py ファイルがあればそれが使われるようにしました。

↓ コピーされたファイル

よいです。
そして引き続き作業して、In-Game Editor で表示できたものがこれ↓です。

よいです。

現状の気付き

ここまでで Python を実行する前の下準備ができました。
現時点での課題としては

  • Python スクリプトで実際に NPC を制御できるようにする。
  • VS Code でエラー表示されるのを修正する。

があります。
VS Code のエラー表示については、現状ではいきなり出てきたモジュールやクラスがエラー扱いされています。実際、実行するとにエラーになると思います。

↓ VS Code でエラーとして扱われている様子

このあたりの方針としては、これらエラーがなくなるように import を追加するなどの調整をしていき、次にゲームから Python スクリプトを実行するあたりの実装をします。

もう少し具体的に書くと、ゲームをインストールしたフォルダに character.py などのモジュールファイルを追加し、それらを参照するように os.path を変更しようと思います。
次回はこのあたりの作業をします。

まとめと今後の予定

今回は Python 対応として具体的なコードの修正を行いました。よいです。
次回は、Python スクリプトを実行するのに必要なファイルの準備を行います。それが終わったら Python をゲーム中で実行するあたり、その次がエラー処理の予定です。

まだまだ先は長いですが順に実装していこうと思います。がんばります。

竹林ソフト 2024/04/24 20:00

NPC をコーディングして領地経営するゲーム開発(フィールドの 3D 表示に着手する)

今のフィールド表示は 2D ヘクスタイル描画なのですが、地形について 3D モデルを用いた描画に切り替えられる仕組みの実装に着手します。

やったこと

切り替えるためのボタンを用意する

悩んだのですが、画面の左側のボタンの下に追加しました。

よいです。

3D の地面を描画する

今回 3D の描画で使おうとしているのは Mini Toon Hexagonal Tiles | Village というアセットです。

そして、中身を確認しようとしてテクスチャがピンクになっているのに気付きました。

いつものやつです。下記サイトを参考にして修正しました。よいです。
https://qiita.com/kazuma_f/items/4d265c5615f1d441ffe9

次に、とりあえず地面を 3D 描画してみました。

↓ 今までの 2D 描画

↓ 作成中の 3D 描画(地面のみ)

そして、ここまでやってみて「なんか、思ったほどじゃないな」と思ってしまいました。
悩ましいですね。
残タスクとしては建物の描画、キャラクターの描画、タスクカードの描画とかいろいろあるのですが、いったんここまでにしようと思います。

まとめと今後の予定

今回は、時間を割いて 3D 描画モードの試作してみました。
ただ、まだ見た目を作り込んでないせいか「いいじゃん!」という驚きがないのと「もろもろの 3D 対応が大変そう」という気持ちになってしまいました。

とりあえず着手したことは大変よいので、今後この 3D 描画の開発を続けるかは少し時間をかけて考えてみます。

次回は、Python 対応か雑多なタスクに着手していこうと思います。がんばります。

1 2 3 4 5 6 7

月別アーカイブ

限定特典から探す

記事を検索