itch.ioに自作ゲームを投稿したがDLされたのは三日で3件でした

ということで、タイトルに言いたいことは全て書かせてもらった。

現実は甘くない。
どれだけ力を入れてゲームを作ろうが宣伝しなけりゃこのザマである。

英語と日本語で説明文を書いたしプレイ動画もgifで作って掲載している。サムネイルは5枚貼っている。

そもそもDLできるページにアクセスしてきてくれたのが15人ぐらいなものでitch.io自体に集客するという力はないように感じる。新着に載りすぐに流されそこからはもう何もない。

3DLは初日に1回。翌日は0、二日目になぜか2DLされて合計3だ。

そこからはそもそもDLページ自体にアクセスがないという状態で完全に埋もれる。

おそらく、開発ログというのを更新してけばなんとかなるのかもしれないが、なんかもう心は折れていてやる気にならない。

ということで、これからitch.ioに初めてリリースしようという人はこういう現実なので期待しないように。おそらくXとかで宣伝しておかないと全く話にならない。

個人的にはitchは大手ときいているから初日で100回ぐらいページにアクセスし十人ぐらいがDLし、インディー開発者には優しいということで3件ぐらいコメントがくるもんだと思っていた。

しかしそんなことは全くないのである。

とりあえずゲームは完成した

ということで、約100日に渡る開発も終わりを迎えた。(?)

一応、作りたいゲームは作れたと思う。

itch.ioにアカウントを作り、一応アップロードまで済ませた。

あとはいつ公開するかだ。今は非公開にしている。

まだDLページをいじっているところだ。

ゲームの紹介文もAIに清書してもらったりして、やっぱりAIがあると楽だなという感じ。(英語もいけるし)

最初はChatGPTに相談していたが、Geminiも使うようになり、VSCODEでGitHub Copilotも使いだしが、終盤になるとgrok3がかなり性能がよく、一番使うようになった。

全部無料でゲームが作れたことはありがたい。

所詮、アマチュアなんでね。

今回のゲームはgodotで作った初めてのゲームだしAIを活用したのも初めてだった。

そういう意味で初心者だった。次のゲームはしっかり企画を考えてある程度仕様書みたいなものも考えた方がいいだろう。作りながらアイデアも同時に考えると手が止まるというのも怖い。

「今日なにしようか」と考えてから開発すると一瞬エネルギーを使うからね。

最初から結構細かいところまで考えておけば、作るだけとなる。もしかするとそっちのほうが開発が早いんじゃないかな。漫画でいうと全話のネームを考えたからペン入れする感じか。漫画描いたことないけど。

+++

今気になっていることは、ソースコードの暗号化だ。やろうとしたけどできなかった。

エラーが出る。godot4.4 c# macos の環境だと最後の最後で.NETがどうのこうのというエラーがでてエディタが起動しない。まあいいや。今回リリースするのは体験版だしね。

itch.ioでバズったら完成品を出して売ろうと思っているけど、雰囲気をみてみると面白いゲームでも埋もれるっぽい。まだ公開はしていないけれど、なんの実績もない人間が突然リリースしたゲームがバズるとは思えない。Xとか育てておいた方が良かったのかな。まあしょうがないね。

もちろん、このブログも誰も読んでいないと思うし。それもまたしょうがないこと。

とりあえずゲームがヒットしなくても「作り方だけは手元に残る」だからまた挑戦したらいい。

十本ぐらい作りゃなんか1つぐらいヒットするだろう。そこまで計算に入れてコツコツやらないとな。

「初期化は大事だよ」という話

ゲーム開発をしています。(unityでも同じだけどこの記事ではgodotの話をしている。)

タイトル画面を作り、実際にゲーム画面を作る。そして、ゲームオーバー画面を作った。

ゲームオーバーするとタイトルに戻るという一連の流れだ。

このとき初期化が必要となる。シングルトンやstaticの値を初期化しなければ次のゲームで必ずエラーがでることになる。

作っているときは、あまり初期化のことを気にしないかもしれない。特にゲーム画面を作っているときは最低限の初期化はするがもう一度読み込まれるなんてことはあまり想定していない。

ゲーム画面はかなり多くのノードを使うことになるだろうけど、その全てを初期化しなければいけない。基本的にノードを移行するときに初期化されるものは多いが、上で書いたシングルトンとstaticは初期化されない。これでエラーが出るととても焦る。

そもそもゲームオーバーを作る前にゲーム画面を作り込んでいくとコード量が増えていく。

シングルトンもstaticも数が増えていくととても大変だ。

そして、実際ゲームが完成し、ゲームオーバーやエンディングを作ってタイトル画面に戻ってもう一度プレイしようとするとエラーで止まるというわけだ。だから最初から初期化のことを念頭においておかないといけない。というか、プレイ(ゲーム)画面もそこそこにゲームオーバーを作り一旦タイトルに戻る処理を作った方がいいかもしれない。全体の流れがあり、一応動いているということを確認してからゲーム画面を作り込むとエラーもすぐに見つけられる。

ということで、シングルトンやstaticはある意味では手動で初期化が必要となってくるので注意したい。

(Godot4.X) 効果音(SE)を鳴らすstaticメソッド

    // SEを再生するstaticメソッド
    public static void Play_SE(AudioStream SESound, Node parentNode)
    {
        if (SESound != null && parentNode != null)
        {
            var player = new AudioStreamPlayer
            {
                Stream = SESound,
                Bus = "SFX"
            };
            parentNode.AddChild(player);
            player.Play();
            // 再生終了後に削除(オプション)
            player.Finished += () => player.QueueFree();
        }
    }

このコードをstaticクラスに書いておけばどこからでも音を鳴らすことができる。

引数には[Export]などで音楽ファイルを読み込ませておいたものを引数に入れる。

2つ目の引数は、thisにしたらい。

[Export] public AudioStream SESound { get; set; } // SEファイルへの参照

//音を鳴らす

XXStaticClass.Play_SE(SESound,this);

こんな感じ。

他にも便利なやり方はいくらでもあるだろうけど、小規模なゲームなら十分だ。