JavaScriptを有効にしてください

Unity:SingletonなMonoBehaviourを作る【短期集中連載:Unityで2Dランゲーム】01

 ·  ☕ 2 分で読めます  ·  ✍️ saiki

なんやかんやで今月はUnityでゲームを作ることにしました。なんやかんやで。

0から作ってくのを順番にここに垂れ流して行きます。

最終的に順番に読んでいったらランゲームが作れるような状態になっていったらいいですね。

一応本職でもゲーム作りをしてますがカジュアルなゲームを一から作った経験はそんなにないので過度な期待はしないでくれよな!

今日は第一回です。

Unityで2Dのランゲームを作るよ

キャラが右にひたすら走っていくのでタップやらスワイプやらで障害物を避けてどこまでいけるか競う、もしくはゴールを目指すタイプのゲームを作ります。

シンプルなので入門にぴったりな上に新しい要素がなくてもそれなりにゲームとして成り立つのでおすすめです。

できる限り細かく書いていきたいと思います。

Unityのインストールとか操作方法とかは今回は解説しません。

下準備:SingletonMonoBehaviourを作る

さて、作っていきますよ。

キャラを動かすのにタップとかの入力を受け付ける必要があるのでタップなどを検出する機能を作ります。でこんかいはその下準備。

タップとかを検出するの人はゲーム中に一つだけ存在すればいいのでSingletonにします。二つあったら一度のタップで二回タップを検出してしまいますからね。

ちなみにSingletonはデザインパターンの一つです。そのインスタンスが絶対に一つしか存在しないことを保証します。詳しくはググってくれよな。

で、今回はその基底クラスを作ります。

こちらの方を参考にさせていただきました。

http://qiita.com/okuhiiro/items/3d69c602b8538c04a479

参考というかほぼ同じです。

using UnityEngine;
using System;

public abstract class SingletonMonoBehaviour<T> : MonoBehaviour where T : MonoBehaviour
{
    public static T I
    {
        get
        {
            if (i == null)
            {
                Type t = typeof(T);

                i = (T)FindObjectOfType(t);
                if (i == null)
                {
                    Debug.LogError(t + "が存在しません");
                }
            }
            return i;
        }
    }

    virtual protected void Awake ()
    {
        // 他のGameObjectにアタッチされているか調べる.
        // アタッチされている場合は破棄する.
        if (this != I)
        {
            Destroy(this);
            //Destroy(this.gameObject);
            Debug.LogError(
                typeof(T) +
                " は既に存在しているのでコンポーネントを破棄しました." +
                " アタッチされているGameObjectは " + I.gameObject.name + " です.");
            return;
        }

        DontDestroyOnLoad(this.gameObject);
    }

    static T i;
}

解説は特にしませんがとにかくこいつを継承したやつは世界に一つしか存在しなくなります。(自分以外がすでに存在してたら自分を消す)

まあ初心者でよくわかんない方もとりあえず作っとくといいと思います。

次回は実際にこいつを使ってタップ検出していきます。

 

ではまた。

 

共有

saiki
著者
saiki
Android App Developper