投稿記事

2023年 01月の記事 (14)

竹林ソフト 2023/01/31 20:00

地面にテクスチャと草木を配置できるようにする

日本の城郭を築城して、ねこ巫女が籠城するゲームを開発しています。
今回は寄り道して見た目についての実装です。

地面に草を配置する

以前に作った Terrain に草を追加しました。コードを抜粋するとこんな感じです。

        var grassVariants = new List<DetailPrototype>();
        var grassVariant = new DetailPrototype()
        {
            prototype = _grassPrefab,
            prototypeTexture = _grassTexture,
            useInstancing = true,
            minWidth = 0.5f,
            maxWidth = 1.0f,
            minHeight = 0.5f,
            maxHeight = 1.0f,
            renderMode = DetailRenderMode.Grass,
        };
        grassVariants.Add(grassVariant);
        _terrainData.detailPrototypes = grassVariants.ToArray();
        
        int grassDensity = GrassDensityPerUnit * _gridsCount;
        var grassMap = new int[grassDensity, grassDensity];
        var alphaMap = new float[resolution, resolution, _terrainLayers.Count];

        for (int y = 0; y < grassDensity; ++y)
        {
            for (int x = 0; x < grassDensity; ++x)
            {
                grassMap[y, x] = 1;
            }
        }

そして、平坦な地面に草を配置するとこんな感じです。

視点との距離が遠くなると草の描画をやめてしまい、その境界がはっきり見えてしまっているのは後でまた考えます。

それから、今は全面が草ですが土木工事や建築をしたグリッドや、人が何度も通った場所は草をなくしてテクスチャ色も変更しようと思っています。

↓草のあるグリッド、ないグリッドの描画はこんな感じにしたい。

この処理はまたいつか着手します。

地面に木を追加する

木も追加できるようにしました。

        // 木の初期化を行う。
        var treeVariants = new List<TreePrototype>();
        for (int i = 0; i < _treePrefabs.Count; ++i)
        {
            var treeVariant = new TreePrototype()
            {
                prefab = _treePrefabs[i],
            };
            treeVariants.Add(treeVariant);
        }
        _terrainData.treePrototypes = treeVariants.ToArray();
        (中略)    

    public void AddTree(TreeNames treeName, Vector2Int grid)
    {
        var tree = new TreeInstance();
        tree.position = (Field.GroundVertexPosition(grid) + new Vector3(1, 0, 1)) / (GameConstant.GridMeter * _gridsCount);
        tree.prototypeIndex = (int)treeName;
        tree.widthScale = 1.0f;
        tree.heightScale = 1.0f;
        _terrain.AddTreeInstance(tree);
    }

正直、詳しく理解できていませんが木が描画できたのでよいことにします。
これらの実装で木を3本追加してみた結果はこんな感じです。

草木は The Illustrated Nature というアセットを購入して使っています。
https://assetstore.unity.com/packages/3d/vegetation/the-illustrated-nature-153939?locale=ja-JP

これまた詳しくないのですが、色を自由に変更できて秋や冬の表現ができそうです。

現状では木の幹の影がなかったり、木の大きさや向きがランダムでなかったりもしますが、見た目のことはあとでまた着手します。

まとめと今後の予定

ちょっと寄り道して草木の描画まわりを実装しました。
次回以降は石垣や建物を建築するあたりの実装を再開したいです。がんばります。

竹林ソフト 2023/01/27 20:00

積んでしまったタスクを減らしていく

NPC の行動を Lua スクリプトで記述して領地経営するゲームの開発です。
チュートリアルのような小規模なステージなら自分で遊んでても楽しいのですが、制約のない大きなマップで遊んでみたらタスクが多いし、スクリプト修正後に実行する時間が長いしで楽しみづらくて悩んでいる昨今です。

まぁ、そのあたりは見なかったことにしてチケット管理してるタスクが増えすぎたのを順に片付けていきます。

↓総チケット数と完了チケット数。今は終わってないチケットが多くて見通しが悪いです。

やったこと

コンソールの有無で UI が伸び縮みするようにした。

今回は、コンソールの有無にしたがって画面内の UI が伸び縮みするあたりが動作しなくなっていたのを実装しました。実装過程は省略すると

↓コンソールがないときの描画

↓コンソールを画面したに表示しているときの描画

コンソールでは、プレイヤーが書いた Lua スクリプトのエラー表示をしたり、プレイヤーがデバッグ用にログ出力できたりします。

雑多なタスクに着手した

アイコン画像を差し替えるとか、日本語を修正するとかの「やれば終わる」タスクに着手しました。よいです。

まとめと今後の予定

↓今回のチケット整理でこんな感じになりました。

総チケット数が減っているのは、重複した内容のチケットを破棄したからです。

しばらくは「この Ci-en に書くため」という〆切駆動開発でもいいので開発継続していきます。もう少しこのゲームを開発する時間を増やすべきな気もしていますが、悩ましいです。

竹林ソフト 2023/01/25 20:00

クラフトゲーの「ホームエリア」と「探索エリア」を定義する

「クラフト&サバイバル&拠点防衛」なゲームを開発していきます。
細部までの仕様は決めていませんが、おおよその仕様を決めたので実装していきます。

今回は「ホームエリアから探索エリアに移動できるようにする」あたりに着手します。

エリアとは

このゲームでは、建物を建築できる「ホームエリア」と、敵と資材がある「探索エリア」とを分けようと思っています。
ホームエリアから探索エリアへは、専用のゲートからワープするようにします。探索エリアからホームエリアへは、帰還アイテムでいつでも戻れるようにします。

TopDown Engine でのエリアの定義と移動

この記事を参考にエリアを作って移動できるようにします。
今回の内容はこの記事をなぞっただけです。TopDown エンジンそのものが便利なのもありますが、有名アセットはこういう記事が存在するのもうれしいです。
https://blog.gigacreation.jp/entry/2020/07/01/215902

↓そして具体的な作業ですが、まず、エリアをコピペで2つにして右側を「探索エリア」ということにします。

↓次に、記事にしたがってテレポーターを作って設定しました。設定するとシーン上でテレポーター間に線が引かれるのはわかりやすいですね。

そして、ここまでの動作確認したところ適切にワープできました。よいです。

まとめと今後の予定

このプロジェクトにはなかなか着手できないでいるのですが、着手してみると(序盤なので)開発がさくさく進んで楽しいです。今後も、〆切駆動開発でもいいので開発していきます。

竹林ソフト 2023/01/24 20:00

巫女キャラクター用に立ち絵用素材を購入してみた

日本の城郭を築城して、ねこ巫女が籠城するゲームを開発しています。
今回は会話シーンに使う立ち絵についての話題です。

実現したいこと

チュートリアルのイベントシーンで説明のための会話シーンを実現したいと思っています。

↓こういうやつです

今作は、キャラクターは VRoid Studio の 3D モデルを使う予定でいます。
さっきのスクリーンショットくらい抽象化されたモデルならそのまま使ってもいいと思うのですが、VRoid Studio 製のモデルだと、ちゃんと表情を作り込まないと違和感の方が大きそうで不安がありました。

なので立ち絵を用意したいのですが、自分で描く代わりにお金で解決しようと思います。私はお金で開発コスト問題を解決するの大好きです。

とりあえず、お試しで「著作権フリー立ちキャラクター素材集vol.5」を購入してみました。
https://www.dlsite.com/maniax/work/=/product_id/RJ060599

自分で描いたり発注したりするコストを考えると、この価格でパーツを組み合わせた立ち絵を作れるのは最高ですね。あと購入の決め手は巫女服も含まれてた、ってことですね。大変よいです。

表示してみたもの

そして、とりあえず巫女服のキャラクターを作ってみたのがこれです。


大変よいと思います。

まだキャラクターの性格や容姿を決めてないので、それを決めたら改めてキャラクターの立ち絵を出力してゲームで使ってみます。
また、将来的に任意のポーズのキャラクター絵がほしくなったら観念して自分で描きます。ただ、自分で描くと時間がかかるので最後の手段にしたいです。

↓自分で描いた巫女イラスト


まとめと今後の予定

巫女服があってパーツを組み合わせて立ち絵を作れる素材集を売ってたので買って試してみました。大変よかったです。今後も開発がんばります。

竹林ソフト 2023/01/20 20:00

後回しにしていたタスクに着手する

NPC キャラクターの行動を Lua スクリプトで記述して領地経営するゲームを作っています。残っている大きなタスクはキャラクターのレベルアップとかシナリオ作成です。
今回は、大きなタスクの実装ではなく、チケット管理システムに登録しているチケットが増えてしまっているのを片付けていきます。

タスクのチケット管理

小難しい主張は省略すると「タスクのチケット管理はいいぞ!」になります。
そして、現状のチケット数はこんな感じです。

↓こんな感じで現状ではチケット数が 200 以上あります。

開発中に気付いた修正内容に都度着手するとキリがないので「後でやろう」って思ったことはチケットを作ってメモしておくわけですが、チケットが数 50 以上になると視認性が下がるのでよくないと思います。
もちろん、必要なチケットは検索して探しますけど、それでも残タスクであるチケットは多すぎるよりは少ない方がいいです。

実際に修正したこと

チケットを減らすために作業している最中に気付いたのですが、今日はつまり「後回しにしていたタスクに着手した」です。

いろいろ修正したのですが、説明しやすい修正を列挙すると

↓アイテム数が不足してるときに文字列を赤色っぽくした。

↓アイテム一覧でサイズが大きい画像を他の大きさに合わせた。

などです。
結果として8つくらいのチケットを減らせました。

よいです。

まとめと今後の予定

記事としては地味なのですが、残チケット数が 50 くらいになるまで地道に実装した方がいいなぁ、と思っています。でも、未実装の大きい機能実装にも着手したいしで悩ましいです。
ともあれ、こんな感じで開発していきます。がんばります。

« 1 2 3

月別アーカイブ

限定特典から探す

記事を検索