--- title: "なぜ自作ゲームのsystemを作るのか" slug: "game" date: "2025-08-18" tags: ["ue"] draft: false --- 現在、自作ゲームを開発しています。 どういうゲームかと一言でいうと現実の反映を目指しています。 現実の反映とは何でしょう。例えばゲームではblueskyのようなsnsのアカウントでログインできます。ゲームの世界は現実に合わせた惑星形式です。キャラクターの属性は現実にある物質です。原子や中性子など。 今回は、なぜ自作ゲームのsystemを作っているのか解説します。 ## 一つの青写真 私は`2023-12-04`あたりからunreal engine(ue)を触り始めました。 当時、ゲームでこんなことがやりたいなと思って作った画像があります。 ![](https://raw.githubusercontent.com/syui/img/master/other/ue5_ai_20231204_0001.jpg) https://syui.github.io/blog/post/2023/12/04/ue-vs-unity/ 今ではゲーム作りに対する考え方も変わりましたが、上のイメージは頭の中にずっと残っていて、ようやく、イメージ通りの戦闘シーンを作成できました。 - 敵の砲撃は剣で弾き返す事ができます。反射したものが当たると敵もダメージを受けます - 敵の砲撃が激しすぎるためバースト時の無敵時間を長めに設定しています ### 原作の設定: アイのバースト アイのバースト、つまり必殺技について解説します。自分で作ったカード、`超新星`というタイトルをモデルにした技ですが、技名自体は`中性子`になります。具体的には周囲の原子から中性子を取り出し、それを一点に集めて放つ技。ようは、中性子星を作り出しそれを飛ばしています。これがアイのバースト、中性子です。このゲームは麻雀要素を入れようと考えていて、それはバーストに適用されます。役が揃うと、超新星に変化するという実装を考えています。 ### キャラクターの音声 アイはかなり低い確率でスキルやバースト時に音声が付いています。これをキャラクターの音声システムとしましょう。 キャラクターは性格に応じて音声の発動頻度が異なります。アイは最も音声確率が低いランクに割り当てられています。(コンピュータで作っているため粗が見えても困るので) ## 広い世界と狭い世界 ### なぜアイを操作するゲームはつまらないのか 私がゲーム作りを始めた理由はいくつかありますが、もし現実にアイというキャラクターがいたら一体どんな感じになるのだろう。それを体感してみたいと思ったからです。 この思いは面白いゲームを作ることにはまるで寄与しないものでしたが、私はそれを作ることにしました。 ここで、なぜアイを操作するゲームがつまらないのか簡単に説明します。 ### 広い世界は面白くない 私は普段、アイを使ってゲームを操作し、世界を飛び回り、作っています。 なぜなら、そのほうが開発に便利なのでそうしています。また都合がいいことに、アイというキャラクターは設定上、そういう事が可能となります。 しかし、先程も述べたように、そのようなゲームは恐ろしくつまらない、ということです。 とすれば、重要なのは小さくても、しっかりしたゲームを作ること。上のようなゲームを作ってはいけないのです。 広い世界、無制限の移動ではなく、狭くてもしっかりした世界を作らなければいけない。面白いゲームとはそういうものです。 ### 最初の思いと面白いゲーム 次は、初めての思い、初心を大切にすることを考えていきます。 開発者が作りたいゲームと面白いゲームは大抵の場合、両立しません。 例えば、映像美、見せることと実際に面白いことは違うのです。 誰もが初めて何かをする時、そこには各人の思いがあります。それは小さいものであれ大きいものであれ、そこに意識がある。 それは、時間が経つと忘れてしまうものですが、心の奥深くに残っている。 しかし、大抵の場合、そういった思いと、誰もが面白いと思う人気ゲームを作るという思いは相反します。 つまり、心の奥底に眠っている最初の思いと、面白いゲームは違うものだし、また、ゲームに限らず、これは色んな作品に言えることだと思います。 これを勘違いして「自分の思いは、他人にも面白いはずだ」とそう思い込むのは誤りです。 では、どうすればいいのでしょう。最初の思いを捨て、面白いゲームを分析して世間に受け入れられるものを作るべきなのでしょうか。 これはyesとも言えるし、noとも言えます。 優先順位としては、間違いなく面白いゲームを作るべきです。個人開発者のよくわからないこだわりなどさっさと捨てるべき、そう思います。 ですが、本当にそれでいいのでしょうか。 私はそれはもったいないと思います。 したがって、できる限りそこを両立させる方法を探すべきだと思います。 私はここで`分離`という方法を使います。世界(方針)を切り離すのです。 これが広い世界と狭い世界、個人開発の指針になります。一見矛盾するこの2つの世界の分離と統合を考えます。 最初の思い、本当に作りたかったもの、楽しくも面白くもないけど、自分の世界。そして、小さく作る面白いゲームの世界。 自分で作ったものを無駄にしないようシステムという4つの柱を立てました。 4つの柱は、根源的な価値観によるもの。広いも狭いも、面白いも面白くないも関係ありません。systemは以下のようになります。これらはどのゲームにも当てはめられ、使用できることを目指して設計されます。 - `world system`: 現実に合わせた世界を構築するシステム。最初は地球、太陽、月から生成される。ゲームエンジンの背景に月の絵を動かすという常識を変更する。実体ある月をその空間に置くことで背景を生成。惑星システムを構築する。 - `ai system`: 属性やゲーム性を構築するシステム。 - `yui system`: 唯一性という価値観から構築されるシステム。現実をゲームに、ゲームを現実に反映することで自然と実現される。 - `at system`: プレイヤーのアカウントをatprotoというprotocolの理解により構築する。protocolは容易には無くならないし変更されないもの。`@`というdomainで繋がるユーザーアカウントのシステム。blueskyというsnsに利用されている。 ### やることを明確に 個人開発者には、できることとできないことがあります。 市販のゲームは、あらゆる専門家が大量に集まり一緒に作っているゲームです。個人開発で全部はできません。 しかし、できないからと言って、手を抜くのも違いますよね。 確かに、私が作りたかったゲームは面白くないかもしれない。けど、一見して見ると面白そうに見えます。 映像美や見せることと実際に面白いことは違います。しかし、映像美は別に悪いことではありません。それはゲームとしては面白くないけど、見せる力があると思います。シーンやムービーとして利用できるのではないでしょうか。 私はシーンやムービーを作っている時間はありません。しかし、私が今まで作ってきた広い世界はそういったことに使えばいい。狭い世界の背景にも使えます。 いつか行けるかもしれない広い世界。理想と現実。 最初から理想だけあっても、それは面白くない。最初から現実だけあってもそれはただのゲームです。面白いゲームとは、現実と理想のバランス。あるいは、その過程を作ることにあるのではないでしょうか。 最初の夢を持ち続けることも、そして、多くの人が楽しめるものを作る事も両方大切です。初心を捨てず分離して、新たに面白いゲームを目指して作り始めること。そして、最終的に統合する道筋を考えることができれば。そんなことを思います。 次は、小さくも完璧な、狭くも全てに由来がある世界を作っていこうと思っています。 ### systemを作ろう ゲームはsystemの集合体で作るのが一番いい。 開発では、まとめることが重要になります。 systemとは関数やコンポーネント、変数の集まりです。それは結果であって目的ではありません。 目的の一つはわかりやすさ。例えば、敵を倒した時、アイテムをドロップさせる処理を作ります。個別に敵のBPに作るのではなく、systemとして作っておくとよいでしょう。1と押せば1つのアイテムがドロップします。3と押せば3つです。内容もランダムかつランクを付けましょう。Aランク-Cランクのアイテムです。 つまり、そのsystemに3Bと伝えると、3つのアイテムがドロップし、Bランクのアイテムがドロップしやすい、という結果が出力されます。アイテム一覧もすべてそのsystemが管理し、簡単に設定できます。 ゲームを作るというのは、systemを作ること。それは単体の実行ではありません。個人開発の場合は特に設計を重視し、まとめることを重視します。 これが何かというと、一つはルールを作ることです。 1キャラクターにつき1スキル、1バースト。例外は認めない。このようなルールです。そして、そのルールに基づいたsystemを設計し、例えば、キャラクターならキャラクターの統一管理を目指します。統一管理というのは、数字やobjectを入れれば設定は完了です。その通りにすべてのキャラクターが共通動作するようにしておこう、そこを目指そうということです。 これがsystemを作るということです。 私は、敵(enemy)を作っている時間がありませんから、enemyもcharacterにまとめることにしました。 そのため、少し動きの調整が難しかったりもしますが、この方向性で間違いないと思います。 シーンやムービー、ストーリーは広い世界(アイで操作する世界)にまとめ、enemyもplayerが操作できるcharacterにまとめ、単体で作るものを減らし、すでにあるもの、作ったものは他の役割も担えるようにしていきましょう。このような考え方が個人開発では重要になってくると思います。 ### 狭い世界をどうやって作っていこう ポイントは、カラフル+ポップだと思います。小さい+完璧もポイントですね。 つまり、小さいが完璧に動作し、カラフルでポップな世界。それがここでいう狭い世界になります。 私はこの辺のこともあまり知りませんから、epicの[stack o bot](https://www.fab.com/ja/listings/b4dfff49-0e7d-4c4b-a6c5-8a0315831c9c)というテンプレートをもとに学習しながら作っていこうと考えています。 ## game system v0.4.3 - ps5 controllerの対応 - game animation sampleとstack o botの統合 - item drop system - character audio system - sword reflection - character dragon skill (enemy) - bgm systemの修正