独学でゲーム作るのは本当に大変!
でも頑張れば出来る!
挫折しても好きならまたやりたくなる!
皆さん、おはようございます!
今回は、私がswift言語で初めてゲームを作って、リリースした時の道のりをまとめました。
「こんな人もいるんだな~」みたいな感じで、読んでもらえたらと思います。
目次
- はじめは
- 挫折の繰り返し
- 再チャレンジ
- 気分を一新
- 参考書を探す毎日
- 奇跡的な出会い
- 翻訳する日々
- サンプルゲームの作る
~~~~~~~~~~~~~~~~~~~~~ - オリジナルゲーム制作開始
- マップとキャラクターの配置
- キャラを動かす
- 他の言語からヒントを探す
- ランダムマップ生成
- 敵と移動範囲
- 敵の移動AI作成
- コントロールボタンを作成
- プレイヤーの攻撃
- プレイヤーのステータスバー配置
- 敵の攻撃AI
- アイテムの配置と使用
- 出口の配置
- 各キャラのステータス
- アプリ起動時の画面とスタート画面を作成
- とりあえずリリース
- アップルストアで公開
- 広告の表示
~~~~~~~~~~~~~~~~~~~~~ - その後
はじめは
もともとゲームではなく日常的に使えそうなiosアプリを創ろうと思い、MacBookProを購入し、swift言語を勉強を初めました。
当時はパソコンのこともまったくわからない状態でしたので、PCのスペックなんて考えず安いやつを買いました。
後から後悔する羽目に。。。
正直なところ仕事はプログラムとは全く関係のない仕事をしていたので、かなり覚えるのに苦労しました。
挫折の繰り返し
PCを買ってすぐは毎日コードを真似て打っていました。
コードを書く順番やコードの意味なんてほとんどわからず、ひたすら真似る毎日。
なぜそうなるのか、どのような処理をしているのかわかってませんでしたし、プロジェクトの作成方法もよくわかわず真似ただけです。
そんな感じで空き時間を使って作業していましたが、ある日仕事が忙しくなり、プログラミングから何カ月も離れてしまいました。
たまに「やろうかな~」と思ってもどこまでやったのか、やり方も分からん、忙しくて毎日はできない、ということもあり、復活してはすぐ倒れての繰り返しでした。
1~2年間はこんな感じが続きました。
おそらく私みたいな方は大勢いるのではないかと思います。
新しいことを始めるには「よいしょ」が必要で、継続するには忍耐力もしくは好きという気持ちが必要です。
隙間時間の10分でもPCを起動して、コーディング出来ていれば良かったのにと、今になって思います。
再チャレンジ
仕事がひと段落して時間に余裕が出来たので、再チャレンジすることを決めました。
PCを買って2年は経過していると思います。
気分を一新
もともと日常で使えそうな予定表アプリを創ろうとしていましたが、さすがに気持ちが変わっていました。
自分が楽しい、好きになれるアプリを創ろうと考えていました。
昔からゲームが好きで、大人になってもそれは変わらないかったので、私はゲームを作ることにしました。
この段階でswift言語ではなく、UnityやUnrealEngineに切り替えていれば良かったと、今は思います。
参考書を探す毎日
正直、なにもなしでゲームは作れません。
なにか土台がないと私には無理でした。
swift言語でのコーディングは少し慣れてきていましたので、後は良い参考書を見つけて勉強すれば良いと思い参考書を探しました。
しかし、swift言語でのゲーム制作情報は少なく、見つけても出版日が古い為、コードを真似て書いてもエラーが出て、サンプルゲームを完成させることが出来ませんでした。
この時期はかなりきつかったですね。
初心者プログラマーには、エラーを修正方法を調べるのがとても難しいのです。
奇跡的な出会い
もともと紙の参考書ばかり集めていましたが、ある日、Kindleの便利さに気が付きました。
もともと部屋のスペース確保のために、本を電子データで購入しようと思い、Kindleを使い始めました。
使っているうちに、Kindleのもう一つの良さに気が付いたのです。
それは、海外の本も購入できることです。
日本で見つからないなら、海外で探せばいいのです。
私は海外のswift参考書を探し始めました。
そうして海外の参考書を探していると、1つの参考書に出会いました。
それはswiftのフレームワークであるGamePlayKitとSpriteKitを使ったゲーム作成の参考書です
[swift GamePlayKit book]で検索すると、Amazonで見つかるかと思います。
当時だと出版日も新しかったと思います。
これでゲーム制作を進められると思いましたが、問題がありました。
本の内容が、すべて英語という点です。
当たり前のことなんですけどね。
しかしそんなのすべて訳せば問題ねー!と思った私は、すぐに電子書籍を購入しました。
当時7000円ぐらいしたと思います。
高かった。。。
翻訳する日々
書籍の中身を確認しましたが、何を書いているか全くわかりませんでした。
高卒でなおかつ英語が嫌いだった私なので、本当に何もわかりません。
私はKindleで購入しましたので、1つ1つの文章を翻訳して書籍データの貼り付ければ、いつでも日本語訳を確認できると思い、翻訳する毎日が始まりました。
もしかしたら500ページ?以上はあったかもしれません。
よく出来たなと思います。
今同じことは出来ませんね。。。
翻訳に1か月以上は掛かったと思います。
サンプルゲームを作る
ようやく翻訳が完了し、コーディングを開始しました。
今回は、書いたコードの意味や役割をしっかり確認しながらゲームを製作するようにしました。
これもすごく時間が掛かりましたが、出来てiPhone端末で動かすことも出来ました。
ちなみにコードの理解を深めるために、同じサンプルゲームを2回作成しました。
オリジナルゲーム制作開始
一通りサンプルゲームを作成できた私は、自分のゲーム作りを始めました。
まずどんなゲームを作りたいかですが、これは決まっていました。
そうローグライクゲームです!
そして私はあまり計画を練らずにゲーム制作を開始するのであった。
(無計画過ぎた。。。)
社会人の私が趣味をいつしていたかを、紹介した記事です。
ご興味あれば、読んでみてください。
マップとキャラクターの配置
まずはキャラクターを配置するところから始めました。
絵はドット絵でフリーで提供していただけるサイトを探して使わせていただきました。
これは本当に助かりました。
自分でキャラ作るとなれば、それだけで何カ月もかかりますからね。
ありがたや。
とりあえず、キャラクターを暗闇の画面の中心に配置しました。
これだけでも楽しくなります。
次にマップ生成です。
ローグライクゲームと言えばランダムのマップ生成ですが、はじめはランダム無しの簡単なマップを配置しました。
マップはタイル方式にして四角い画像を画面いっぱいに張り付ける感じにしました。
ゲームっぽくなってきた!
キャラを動かす
プレイヤーを動かすために、座標を設定とアニメーションを設定しました。
プレイヤーの位置を保持して、今後追加するアイテムの取得などに役立てるためです。
敵がどの部屋に居るかも、これで確認できます。
アニメーションは、3枚の絵を使って移動している感じを出しました。
EntityやCommponentなどの技術を使っていましたが、初めはあまり意味も分からず使っていました。
他の言語からヒントを探す
ここでかなりの時間を浪費しました。
なぜなら、swift言語でランダムマップ生成を、どのようにコーディングすれば良いか分からなかったからです。
これが出来ないとローグライクゲームが作れないと思った私は、swift以外の言語からヒントを探すことにしました。
一番わかりやすそうなPython言語に目を付け勉強を始めました。
幸運なことにPythonの参考書には、ゲーム開発のものがあり、ランダムマップ生成のコードがありました!
このときにChatGTPがあれば、もっと早くゲーム制作出来てたのにな~と思います。
しかし、この勉強のおかげでPythonも少しなら使えるようになったので良いでしょう。
ランダムマップ生成
Pythonのコードをswiftに直して、ランダムマップ生成コードを書き始めました。
いろいろと問題も起こりましたが、なんとかなりました。
どのような問題があったか忘れちゃいましたが、すごく苦労したことだけ覚えてます。
敵と移動範囲
マップが出来たので敵を配置しました。
まだこの段階では移動しませんが、敵を配置するだけでゲームっぽさが増して、テンションが上がりました。
敵の移動行動を実装するためには、AIの作成が必要になってきます。
敵の移動AI作成
敵がプレイヤーを追いかけてくるように、敵とプレイヤー間のルートを計算して、各ターンごとに1歩ずつ近づいてくるようにしました。
海外サイトに参考に出来るものがあったので、それを使えるように改良しながら、エラーを1つずつ潰していきました。
改良には、かなりの時間を費やしました。
よくできたな~と思います。
コントロールボタンを作成
プレイヤーが動いて、攻撃して、アイテムを使えるなどのボタンを実装しました。
ボタンの配置のバランスは意外と難しいです。
モバイルゲームにコントローラーを付けるのは、画面の大きさ的に考えることが多くあります。
プレイヤーの攻撃
攻撃ボタンを実装しました。
敵にHPをつけて、HPが0になれば消えます。
基本的な機能ですね。
攻撃モーションをつけるだけの絵の技術が無い私は、攻撃エフェクトを入れて誤魔化しました。
プレイヤーのステータスバー配置
プレイヤーのHPなどのステータスバーを配置しました。
これで敵からの攻撃を受けたことを確認できるようになりました。
敵の攻撃AI
敵が攻撃するのか移動するのかのAIを作成して実装しました。
ここまでくるとコードはぐちゃぐちゃです。
このときの私にはコードを整理する技術は無いので、無駄が多くて読みにくいコードになっています。
今も直していません。。。
アイテムの配置と使用
アイテムをランダムに配置して、使ったり投げたりできるようにしました。
ここぐらいからバグが大量発生してきました。
アイテムが壁に当たったら、その場に落としたいのにどこかに飛んでいったり、アイテムが増殖したり、いろいろ起こりました。
良い思い出です。。。
出口の配置
出口を設定して出たら次のフロアーに移動するようにしました。
敵から逃げて、出口を目指すゲームみたいになっていきます。
ここまでくると、テンションはかなり上がっています。
各キャラのステータス
敵とプレイヤーに細かなステータスを設定しました。
このとき敵キャラも増やして、フロアーごとに出てくる敵の種類を変更してみました。
プレイヤーには、レベルアップ時のステータス上昇を実装しました。
アプリ起動時の画面とスタート画面を作成
そろそろアプリリリースすることを考えて、スタート画面を作り、どのダンジョンに潜るかを選択できる画面を作りました。
最終階層を変更した3つのダンジョンを作成して、各ダンジョンに最終フロアーにボスを配置しました。
ボスを倒さなくても出口を見つければ、クリアできるようにしました。
とりあえずリリース
やりたいことがまだまだ沢山ありましたが、やればやるほど新しく追加したいことが増えます。
なのでとりあえずリリースしようと思い、リリース手続きを始めました。
このときにWordPressを始めました。
自分のアプリのプライバシーポリシーを書いて提示する必要があったので、自分のブログに掲載することにしました。
ゲーム制作も大変ですが、リリース手続きもかなり大変です。
アップルストアで公開
いろいろありましたがアップルストアに公開しました。
未完成の部分はリリース後にアップデートすればいい!
誰かにプレイしてもらって感想聞けたら、やる気も出てきます。
完璧を目指し過ぎてリリース前に力尽きないように気を付けてください。
広告の表示
せっかくなので広告を張り付けてみようと思い広告を貼り付けました。
結構めんどくさいです。。。
その後
半年ぐらいはアップデートを行い、Xとかでアプリを紹介したりしていました。
正直収入はありません。
広告収入は、ある一定額たまらないと振り込まれないのです。
今は、UnrealEngineを使ってゲーム制作に取り組んでいます。
進捗状況をXで投稿しています。
ご興味があれば、Xのアカウントをご覧ください。
アップルストアで公開されているアプリが気になる方は「モグラダンジョン」と検索ください。