投稿記事

2024年 02月の記事 (15)

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

再建を繰り返す街づくりゲーム開発(建物の画像を雑に用意する)

再建を繰り返す街作りゲームで、建物の画像を雑に生成して用意しました。
最初は Medieval Building Pack 2 CorCore アセットから適当に選んで使おうと思っていたのですが「市場はこの画像にするか、いや違うよなぁ」とか選ぶのに時間がかかりすぎるのに気付いたので、建物名が文字で描画された画像を作って使うことにしました。

やったこと

ゲームの設定ファイルから必要な画像サイズを読み込み、Python の PIL モジュールを駆使して画像を作ります。

import yaml
from PIL import Image, ImageDraw, ImageFont


if __name__ == '__main__':
    fontFile = '../RR/Assets/RR/Fonts/NotoSansJP-Light.ttf'

    with open('../RR/Assets/RR/Resources/Parameters/buildings.yaml') as f:
        data = yaml.safe_load(f)
        for name, parameters in data['Buildings'].items():
            size = parameters['Size']
            width = 32 * size['x']
            height = 32 * size['y']

            image = Image.new("RGBA", (width, height), (255-32, 255-32, 255-32, 255))

            font_size = 24
            draw = ImageDraw.Draw(image)

            text_offset = 4
            text_position = (0, 0)
            while True:
                font = ImageFont.truetype(fontFile, font_size)
                text_size = draw.textbbox((0, 0), name, font=font)
                text_position = ((width - text_size[2]) / 2, ((height - text_size[3]) / 2) - ((text_size[1]) / 2))
                if width - text_offset > text_size[2]:
                    break
                font_size -= 1

            draw.text(text_position, name, fill=(0, 0, 0), font=font)

            image.save(name + '.png')

そして「これが作ったスクリプトです」以上に説明することがないので、以上になります。

↓ 作ったスクリプトと、参照した建物の設定ファイル

create_building_image_templates.py (1.14kB)

ダウンロード

buildings.yaml (469.00B)

ダウンロード

↓ 生成された建物の画像

あとは、これを「建物幅を考慮して順番に建築していく」というデモシーンで動かしたものがこれです。

よいです。
この実行結果を見ると「境界線がほしい。画像で塗りつぶす範囲を少し狭くすればいいかな」と思ったので、そのうち調整します。

まとめと今後の予定

今回は建物用の仮画像を作成しました。よいです。
ゲームが完成する頃になったら、どなたか 2D ドット絵が得意な方を探して外注するか、自作しようと思います。

年度末は本業のサラリーマン仕事の納期が重なってて心がしんどいのですが、2週に1回は記事投稿したいと思います。がんばります。

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

再建を繰り返す街づくりゲーム開発(ランダムにキャラ絵を生成する)

過去記事で仕様を考えていた街作りゲームの要素開発の記事です。
今回はキャラ絵をランダム生成するあたりを実装します。どう考えてもこういう見た目の開発は後回しにすべきなのですが、その反省は最後にやります。

やりたいこと

普通のワーカー以外に、スキルを持ったリーダー相当のキャラを複数登場させたいので、そのポートレート画像をランダム生成できるようにします。

最初は Unity Asset Store で AI で自動生成された画像アセットから選ぼうと思ったのですが、なんか私のイメージに合うものがなかったので、DLsite で販売していた 【ドット絵素材】3種セット を使うことにしました。(顔パーツや衣服が画像ごとに分かれてる素材です)

価格を見たら 110 円で「おかしいでしょ! もっと高くしてよ!」と思いました。

今回の目標は、この素材をランダムに組み合わせて Unity で描画することです。

やったこと

まずは UI を定義して適当に選んだ画像を組み合わせて表示されるようにしました。

よいです。
枠の UI 素材には Pixel Art GUI 2 素材を使っています。

次に、画像を登録して、その登録した画像をどう使うかを YAML ファイルで定義しました。

↓ Odin Inspector アセットで Dictionary で画像の Sprite を登録したもの

↓ どういう風に描画するかを定義した YAML ファイル

toraneko_portraits_female.yaml.txt (1.28kB)

ダウンロード

キャラの男女で異なるパーツが使われるようにするあたりは、この YAML 定義ファイルを男女で分けることで実現しています。

後は、なんやかんやで描画されるように実装しました。
↓ 今回の実装の主なファイル(記事を書いている時点のもの)

ToranekoPortrait.cs (2.03kB)

ダウンロード

ToranekoPortraitImages.cs (2.30kB)

ダウンロード

ここまでの実行結果がこれです。

よいです。
そして、口を開いているパーツが必要以上に目立つので使わないように定義を修正しました。

あと、髪の色を変更できるようにするあたりは、用意されていた髪の画像を ImageMagick を使って一括で灰色に変更しました。

↓変換に利用した Python スクリプト

import os
import subprocess

if __name__ == '__main__':
    directories = ['..\\RR\\Assets\\RR\\Images\\【ドット絵素材】3種セット\\【ドット絵素材】ファンタジー職業2\\髪\\髪型',
                   '..\\RR\\Assets\\RR\\Images\\【ドット絵素材】3種セット\\【ドット絵素材】ファンタジー職業2\\髪\\前髪',
                   '..\\RR\\Assets\\RR\\Images\\【ドット絵素材】3種セット\\【ドット絵素材】ファンタジー職業2\\顔\\眉']

    for directory in directories:
        files = os.listdir(directory)
        for fileName in files:
            if fileName.startswith('gray_'):
                continue
            if not fileName.endswith('.png'):
                continue
            path = os.path.join(directory, fileName)
            subprocess.run(f'magick {path} -color-matrix ".2 .5 .3  .2 .5 .3  .2 .5 .3" {directory}/gray_{fileName}')

そして、この灰色にした髪画像に Unity の処理で色を付けてみたものが、これです。

元の色の違いによって違和感はありますが、とりあえずよいことにしました。
気になるようなら手動で彩度を調整しようと思います。

最後に、ここまでは女性キャラで作業していたことを同様の手順で男性キャラを作れるようにしたらおしまいです。

↓ キーを押すとキャラのパーツをランダムで作り直すようにしたもの

このデモ表示は、上半分が女性で下半分が男性です。男女の区別がつきにくい気もするのですが、私がそこまで気にならないのでオッケーです。

よいです。

まとめと今後の予定

今回開発した要素はゲームシステム的にはそこまで重要ではないので、もっと後に開発すべきだったとは思います。ただ、素材を探して購入してしまうと、まぁ、その、気になり続けたので実装しちゃいました。

「お菓子があると食べちゃうから、痩せたいならそもそも買わないようにする」とかいう言葉が脳裏に浮かびました。はい、よくわかります。はい。

この「再建を繰り返す街作りゲーム開発」よりは他の2プロジェクトの開発を進めたいので、この開発については今後も不定期投稿にしようと思います。プロジェクト初期の開発は楽しいのですが、なんというか、開発を進めすぎないようにがんばります。

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

ねこ巫女籠城ゲーム開発(Physics Character Controller の調整)

キャラクターの操作に使ってる Physics Character Controller アセットの設定を見直します。

やること

このアセットを使っていておかしいと思っているのは

  • 地面から橋に移動するときに走らないと乗り越えられない。
  • 壁に向かって走ると瞬間的に地面にめり込む。

です。

やったこと

地面と建物の切り替わり位置で移動できなくなる理由を調べた

結論から書くと、Physics Character Controller アセットの移動まわりを管理している Character Manager の Friction Against Floor をゼロの近づけると改善しました。

全然わかってないのですが、異なる Collider まわりで床との摩擦係数が大きい値になってしまって、歩くときの力では動き始められなかったけど、走るときの力では動いた、ということのようです。
ちゃんと理解できてないことは説明できてる気がしないですね。

思った通りに動作するようになったので、よいことにします。

壁に向かって走るとキャラが瞬間的に地面にめり込む

確認したところ、Physics Character Controller アセットのアニメーションが Ladder になったときに動作がおかしくなっていました。

どうも、今のコライダーのレイヤー設定だと壁に正面からぶつかったときに壁がハシゴとして扱われてしまうようです。そして未登録のハシゴアニメーションを再生しようとして見た目がおかしくなっていました。

今のところハシゴを使う予定はないので、このあたりは無効にして対処しました。
よいです。

まとめと今後の予定

キャラクター操作において、違和感がある動作の原因を調べて対処しました。よいです。
次回は、セーブしてロードすると建物の高さ位置が異なってしまう問題に対処しようと思います。

↓ 石垣ブロックが上に、橋が下にずれている様子

このあたりが修正できたら、石垣の処理の作り直しや建物の見た目の作成に着手しようと思います。がんばります。

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

各プロジェクトの開発スケジュールの確認

各プロジェクトの開発予定の記事 を書いてから1ヶ月が経過したので振り返ってみます。

ねこ巫女籠城ゲーム開発

過去記事の予定を見直すと、

築城まわり(2月初旬まで)
敵が攻めてくるあたり(3月末まで)

とか書いてあります。
1月の時点では橋まわりを実装したら築城まわりは終わりのつもりだったので、今考え直しても妥当に思えます。

ただ、橋と石垣を実装していて石垣の仕様を大きく変えることにしたのを加味すると「築城まわり」が終わるのは早くても2月末な気がします。これは仕方がありません。

開発期間は伸びるものだからです。

あとは城郭を敵が適切に登ったり壊したりするあたりの見積もりも甘い気がしてきましたが、これは気付かなかったことにします。

開発のモチベーションは維持できているので、引き続き開発していきます。よいです。

NPC をコーディングして領地経営するゲーム開発

過去記事の予定を見直すと、

カスタムまでの2,3章のプレイに必要な機能(2月末まで)
特殊な建物の追加、3D 表示(3月末まで)

とあります。
まだ2月になったばかりなのですが、あと4回の記事で3章までの実装が完了するかというと「無理そう」って思います。

これについては、今の記事ボリュームなのであれば1週間に2回は投稿すべきだな、と他人事のように思いました。

あとは、3月末までに「3D 表示」とあるけど、これもそこそこ重いタスクなので3月末までに終わってる気はしないです。でも、これは仕方がありません。

開発期間は伸びるものだからです。

具体案は思いつきませんが、記事を週2で書く方法をしばらく考えてみます。
記事の末尾にいつも「がんばります」とか書いておいてあれですが、ある目的のための方法を「がんばる」にするのは、なしです。「がんばる」とか「気をつける」っていうのは「どうすればいいかわかりません」と同じ意味だと思っています。

クラフトゲーム開発

2週間ほど開発を休止してみて「あ、休止してできた時間で ねこ巫女籠城ゲームの開発できるじゃん」と自然に思ってしまったので、このまま休止します。

再建を繰り返す街作りゲーム開発

これについては少しずつ仕様を書き足したり、必要な機能の動作を確認するための Unity のデモシーンを作ったりしています。もうちょっとはっきり白状すると

  • 記事を書くことにすると〆切要因になるけど、心のプレッシャーにもなる。
    • なので定期的に記事を書かずに、不定期に開発して気が向いたら記事を書く。
  • Factorio で遊びたくなったときに、インストールする代わりに開発している。
    • Factorio はね、だめなの。いつまでも遊べちゃうの。

という感じです。
このプロジェクトは時間をかけすぎないように注意しつつ、ちまちまと開発しようと思います。

まとめと今後の予定

今回、各プロジェクトの進捗を見直してみて、

開発期間は伸びるもの!

というのが確認できました。よいです。
また来月になって覚えてたら予定を見直そうと思います。がんばります。

竹林ソフト 2024/02/02 20:00

NPC をコーディングして領地経営するゲーム開発(戦闘シーンの演出作成)

このゲームにはダンジョン探索な要素もあるのですが、その際の攻撃や被ダメージの演出を作っていきます。あと見つけた不具合の修正もします。

見つけた不具合の修正

オーダーの情報が更新されないのを修正する

オーダーの情報を表示中にストレージにアイテムが追加されたときに、レシピの表示にそれが反映されないのに気付いたので修正します。

↓ 左下のストレージのアイテム数は増えてるのに、右のアイテム数が増えてない例

これについては修正できました。よいです。

会話シーンのときにタスクカードが表示されないようにする

↓ 画面右上にタスクカードが表示されている様子

これは厳密には不具合ではないのですが、なんか目立って好みじゃないので後で修正します。

ダンジョン探索の攻撃にエフェクトと効果音を適用する

以下のタイミングで利用するエフェクトと効果音を追加していきます。

  • 攻撃時(武器種ごと)
  • 被ダメ時(物理攻撃1種、魔法攻撃 N種)
  • アイテム入手時
  • ダンジョンからの帰還時

攻撃時の演出を追加

武器の種類ごとに攻撃エフェクトが表示されるようにします。具体的には「この武器ならこのエフェクト」みたいな対応を定義しつつ、そのエフェクトが再生されるようします。

攻撃のエフェクトには Epic Toon FX アセットを利用します。

↓ エフェクトを仮配置して描画されるか確認した様子

描画できるのが確認できたので、よいです。
あと、効果音は Battle Sound Library - Magic & Melee - Fantasy RPG アセットを利用します。

そして実装方針ですが、このゲームでは x1, x4, x8 倍速での再生が可能なので、エフェクトの再生速度も変更する必要があります。

そして、ここまで考えたあたりで開発パワーが尽きたので、続きは次回にやります。こういう日もあります。

まとめと今後の予定

攻撃エフェクトの作成に着手しました。よいです。
次回は、引き続きエフェクト作成を行おうと思います。がんばります。

1 2 3 »

月別アーカイブ

限定特典から探す

記事を検索