UnityとRailsで作ったパックマン風ゲームの開発技術を解説
2015年5月11日に投稿 →
に更新
技術
アフィリエイトリンクを含みます
UnityとRailsでパックマン風タイムトライアルゲームを作りました。
ゲーム名はクエリちゃんドットイーターです。
パックマンのようにドットを集めるタイムを競うゲームです。
このゲームを作るにあたって使用した技術やTipsを紹介します。
紹介動画
まずは紹介動画を御覧ください。
利用技術
- クライアントはUnity
- サーバはRuby on Rails、DBはMongoDB
です。
詳しくはこちらをみてください。
参考にした書籍
こちらの本がとても参考になりました。CHAPTER 04がドットイーターゲームについて解説されているのでこの章ででき上がったゲームを土台にして、このゲームを作りました。
名前を入力する機能
Unity4.6から追加されたUGUIのTextInput(テキストボックス)を使用しました。
Unity4.6未満だとOnGUIのテキストボックスか、NGUIのようなサードパーティ製UIライブラリを使う必要がありましたが、UGUIが追加されたことにより、よりかんたんにUIを作れるようになりました。
タイマー機能
Updateメソッド内でdeltaTimeを取得してそれを加算することでタイムを計測しています。
サーバ機能
サーバはRuby on Railsアプリを作ってVPS上にデプロイしました。
クライアントから送られてきたタイムと名前をMongoDBに保存して、タイム順にソートして順位を返すというシンプルなWebAPIです。
def api_save #リクエストパラメータを取得 name = params[:name] time = params[:time].to_f #MongoDBに接続 connection = Mongo::Connection.new db = connection.db('dotDB') #データを挿入 dotTimes = db.collection('dotTimes') dotTimes.insert({ time: time, name: name, created: Time.now }) #タイムの早い順を検索して件数をカウント → 順位 rank = dotTimes.find({ time: { "$lte" => time} }).count # JSON形式のレスポンスを返す respond_to do |format| format.json {render :json => { status: 'success', rank: rank, name: name }.to_json } end end
UnityからRailsへの通信はWWWクラスを使ってGET通信をしました。とてもシンプルでかんたんです。
// WebAPIへリクエストを送信する var url = "http://xxxxx.com/xxx/api/save.json?name=abc&time="+ GameManager.elapsedTime; WWW www = new WWW(url); yield return www; //受け取ったレスポンスをJSON解析する JSONObject json = new JSONObject(www.text); var rank= ""+ json.GetField("rank").n;
このゲームたった5日間で作れました!
書籍に載っていたゲームをベースにしたことが大きいですが、Unity & Railsの生産性の高さを改めて感じました。
本当に個人でもゲームが作れる時代なんです!ゲームを作ってみたいと思ってる方はぜひチャレンジしてみてください!