アプリ開発

【アプリ開発】フルスタックエンジニアがオンラインゲームを作ってみた

投稿日:

あけましておめでとうございます。

最近、本業が忙しくて、ブログをサボりがちですが、Twitterはゆる~くやってます。

よかったら、フォローしてみてください。気軽に絡んでください!

@youki_takemoto

本題です

さぁ、軽い挨拶はさておき、本題の「フルスタックエンジニアがオンラインゲームを作ってみた」に触れていきたいと思います。

プログラミングをする人なら、一度はオンラインゲーム作ってみたいなとか思った事はあるのではないでしょうか。

今回はどんなゲームを作ったのか、どのようにして作ったのか、苦労した事はあったか等、そのあたりの話題を書いていきます。

誰でも楽しめるものを作りたかった

現在、フルスタックエンジニアとして活動しており、案件も複数抱えていたりとプライベートの時間があまり無かったのですが、数日だけ自由な時間がありました。

そこで自由にプロダクトを作ってみたいなと考えたのですが、オンラインゲームの開発にチャレンジする事にしました。

なぜ、それを選んだのかというと、僕の仕事って業務システムが中心なので、ビジネスパーソンだったり、技術者じゃない人にはあまり興味を持ってもらえないんですね。

そりゃ、エンジニアとしては、ここの処理は裏側でこんな工夫をしててとかあるわけですけど、プログラムを知らない人からしたら、何を言ってるかわからないわけです。

もっと、反応してよ!!!!!!ってことでオンラインゲームを作りたいなと思いました。

実は1年くらい前に完成間近だったんですが、とあるバグがなかなか潰せなくて、そんな事をしているうちに本業が忙しくなり、開発は一旦中止に。。

PickShoot.ioっていうゲームを作ったよ!

今回、開発したのは、PickShoot.ioというゲームになります。

よく、○○.ioみたいなゲームが広告とかで流れてくると思うんですが、あの類のやつです。

ただし、ああいう系のゲームはオンライン風を装ったオフラインゲームなので、レビュー欄でオンライン対戦がしたいっていう内容が凄く目立っていたんですね。

それならば、僕がオンラインで作ってやろうじゃないかと・・。ふふ・・・。

ちなみにダウンロードはコチラです。


簡単にどんなゲームなのかを説明すると、最初の画面でニックネームを入力して、スタートを押すとマッチング中になります。そして、プレイヤーが2名以上になると、10秒のカウントダウンが始まり、ゲームがスタートします。また、最大10人まで同時プレイが可能です。

プレイ中はこんな感じで、120秒を制限時間の球撃ちゲームです。

5回弾を当てられるとゲームオーバーで、敵を倒すとキルカウントが増えて、右上のランキングに表示されます。

グラフィックはしょぼいんですが、ちょっとした時間で作るとなると、これでも結構頑張ったつもりです。

どうやって作ったの?

アプリはUnityを使って開発しました。Unityといえば、AnndroidやiPhoneのアプリを1つのコードで作れるやつです。AndroidならJava、iOSならObjective-Cを使ってネイティブアプリとして作れますが、Unityを使った方が楽チンです。

ただし、ちょっとした操作でプロジェクトが壊れてしまう、端末によって若干動作が異なる場合がある等、そのあたりを考えると色々なトレードオフがあると思います。

ゲーム内のオブジェクトについては、Unity Assetsストアで無料のものを使用しており、ボタンの画像を自分で作ったりしたくらいでしょうか。

アプリ自体は基礎的なゲーム開発の知識があれば、誰でも作れるくらいに簡単だと思います。

ネットワーク通信の処理が難しかった!

一番の難しいところはネットワーク通信の部分です。こういうリアルタイムで対戦できるゲームって、色々と工夫しないとストレスが溜まる動作になってしまうんです。

このゲームは裏側にサーバーがあって、それぞれのプレイヤーとソケット通信でデータを送受信し、集めたデータを各クライアントへ同期してあげるという仕組みなのですが、どうしても遅延が発生してしまいます。

どういう事かというと、オフラインゲームで座標Xが1,2,3,4,5..と変わっていくような部分が、オンラインゲームだと1,5,10みたいな感じで断片的にしないと、通信量が凄まじい事になります。

そこで遅延を補完してあげて、滑らかな動きに見せる処理を作ったりしました。

また、それぞれのクライアントで処理タイミングにズレがあったりするので、非同期処理をしないといけなかったり、それぞれのクライアントで同じ動作をするとは限らないので、様々な例外を想定する必要があります。

感覚としては、マルチスレッドプログラミングに似ているのですが、とてもバグが発生しやすい箇所でした。

また、ネットワーク処理自体はちょっと勉強したら作れるはずですが、サーバーとクライアントの同期手法は複数パターンあるので、今回の場合はどうするのがベストプラクティスなのだろう等でも悩みました。

本業はWeb系のシステムを作る事が多く、ゲームプログラミング特有の知識があまり無かったりしますので、とにかくベストプラクティスを知らない状態です。

ゲーム会社が公開しているプレゼン資料などを見ながら、ちょこっと学習しながら作りました。

そんなこんなでPickShootが出来上がりました。今後、まだまだバージョンアップはするかもしれないですが、とりあえずのリリース!

プレイヤーが増えないという悩み

現在、周りの人たちに遊んでもらった程度で一般プレイヤーが増えないという悩みがあります。

何なら、速攻で低評価レビューがあったので、ちょっと凹んでます。

オンラインゲームなので、プレイヤーがいないと成り立たないのですが、正直作ってみたいだけでスタートしているので、広報戦略は一切考えていませんでした。

とりあえず、対戦相手がいない場合は、BOTが出現するみたいな仕様にしてもいいのですが、戦ってて面白いと思えるBOTを作れるかなという部分があり、まだ実装していません。

現場からは以上です

まだまだ公開したばかりなので、ちょっとずつアップデートをしながら、PickShoot.ioを遊んで貰えるように努力していこうと思います。

皆さん、よかったらこの記事やアプリをシェアしていただけると嬉しいです!ヽ(=´▽`=)ノ


-アプリ開発
-, , ,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

関連記事はありませんでした