徳島ゲーム開発ごっこ 技術ブログ

ゲームを作るために役に立ったり立たなかったりする技術を学んでいきます!

1週間ゲームジャム「転がる」祭り再び

 再び、祭りが始まるようですね。

 1週間でテーマにあったゲームを作ろうという企画、1週間ゲームジャムが再び開催されました。
 今回のテーマは「転がる」だそうですよ。

 1週間ゲームジャムは知名度がすごい広がりを見せていますから、今回は前回以上に参加者が多くなりそうですねー。
 前回「1番手を抜いたで賞(自己申告制)を受賞した身である私としては、さらなるゲームを作って参加したいものです。

 ただ、ゲーム内容云々の前にいろいろと入れたい機能があるんですよ。
 今回はTweet機能ランキング機能を手っ取り早く追加するお話です。

f:id:urahimono:20170522083445p:plain


この記事にはUnity5.6.1f1を使用しています。

Twwet機能をつけたい!

 前回のゲームジャムの作品を見ていて、他の皆さんがTwitterのTweet機能をゲーム中に使えるようにしていた作品が多かったですよ。
 これは今回の私の作品でも是非ともつけておきたい機能の一つです。

 ただ、やり方がさっぱりわからないや。
 うーん、とりあえずググってみましょうか。

naichilab.blogspot.jp

github.com

 あったー。
 主催者側から用意されてたー。

f:id:urahimono:20170522083312p:plain

 な、なるほど、テンプレートがあったわけですな。
 どうりで参加作品に当たり前のようにTweet機能があるわけだよ。
 てっきり、「Tweet機能すら組み込めぬ愚かな開発者に、1週間ゲームジャムに参加する資格はないのだよ!」という裏ルールでもあるのかと思った。

 よし、これでTweet機能の件はOKです。

ランキング機能をつけたい!

 そして、もう一つつけたい機能があります。
 それはランキング機能です。

 ランキング機能があればもっと楽しめるんじゃないかなー、と思っているのですが、実際にランキング機能を作ろうと思うと大変です。
 サーバー用意したりといろんなものが必要になってきます。

 とてもゲームジャムで組み込むようなものではないのですが、ただ当てがあります。
 
 ニフティクラウドmobile backend、通称mBaaS
http://mb.cloud.nifty.com/about.htm

 勉強会などで聞いて、一度使ってみたいと思っていたんですよ。
 一定の条件下ならば無料で使えるはずなので、むしろ今回のようなゲームジャムにはうってつけかもしれません。

 さっそくSDKを組み込んで使ってみましょう。

 えーと、NCMBSettingsを追加して、

f:id:urahimono:20170522083353p:plain

 スコア設定用UIを作成して、

f:id:urahimono:20170522083401p:plain

 そしてスクリプトを作れば、

using UnityEngine;
using UnityEngine.UI;
using System.Collections.Generic;

public class TestController : MonoBehaviour
{
    [SerializeField]
    private InputField  m_userUI            = null;
    [SerializeField]
    private InputField  m_scoreUI           = null;
    [SerializeField]
    private Text        m_leaderBoardTextUI = null;

    public void Submit()
    {
        var ncmbObj         = new NCMB.NCMBObject( "Score" );
        ncmbObj[ "name" ]   = m_userUI.text;
        ncmbObj[ "score" ]  = int.Parse( m_scoreUI.text );
        ncmbObj.SaveAsync( ( NCMB.NCMBException i_exception ) =>
        {
            if( i_exception == null )
            {
                Debug.LogFormat( "Successful submit.", gameObject );
            }
            else
            {
                Debug.LogWarningFormat( "Failed submit! error={0}", i_exception, gameObject );
            }
        } );

    }

    public void Fetch()
    {
        var query = new NCMB.NCMBQuery<NCMB.NCMBObject>( "Score" );
        query.OrderByDescending( "score" );

        query.FindAsync( ( List<NCMB.NCMBObject> ncmbObjList, NCMB.NCMBException i_exception ) =>
        {
            if( i_exception == null )
            {
                Debug.LogFormat( "Successful fetch.", gameObject );

                string leaderBoardStr   = string.Empty;
                foreach( var ncmbObj in ncmbObjList )
                {
                    string  name    = System.Convert.ToString( ncmbObj[ "name" ] );
                    int     score   = System.Convert.ToInt32( ncmbObj[ "score" ] );
                    
                    leaderBoardStr += string.Format( "Name:{0} Score:{1}{2}", name, score, System.Environment.NewLine );
                }

                m_leaderBoardTextUI.text    = leaderBoardStr;
            }
            else
            {
                Debug.LogWarningFormat( "Failed fetch! error={0}", i_exception, gameObject );
            }
        } );
    }

} // class TestController

f:id:urahimono:20170522083445p:plain

 出来たー。簡単!

あれっ、OpenGLで動かない!?

 2017/05/23 追記

 記事を書いた後、こんなコメントが。

 はっはっは、何を一体……。

f:id:urahimono:20170523081256p:plain

 動かない……。
 マジかよ。

 くっ、何ということだ。
 誰か先に言ってくれればよかったのに……。

 主催者側がすでにつぶやいてたー。

 ……うう、ちゃんと聞いてればよかった。
 

そして

 とりあえずランキングはおいといて、ゲームを作ろう。
 前回のゲームジャムへの提出が締め切りの五分前だったからなぁ……。