きっかけ
GameManagerを用いた制作をよくするんですが、GameManagerに変数とか、プロパティとかをまとめていくと、段々ぐちゃぐちゃしてきませんか?
私はよくなっちゃうんですよね。
#regionでまとめちゃってもいいんですけど、なんとなくデータはデータだけでまとめちゃいたい!
・・・ってことで、データをまとめたクラスを別に作っちゃおう!ってお話です。
特に書くこともないので、ざっくりまとめちゃってます。
(ちょっと読みにくいかもしれないです・・・)
Dataクラス
まずは、Dataクラスを作成します。
Dataクラスは、色々な場面で使用されるようなデータをまとめて管理するクラスです。
私は以下のような形で作ってます。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
static public class Data
{
//〇〇で使う変数群
public const int a=1; //〇〇の数値a
public const int b=5; //〇〇の力量b
public const int c=10; //〇〇のスピードc
}
ここには、例えばキャラクターの基本パラメータ(移動速度、ジャンプ力など)、操作キーやTag名の情報、ゲーム全体に関わるフラグ管理なんかはまとめますが、プレイヤーが移動し続けている時間のような1つのクラスでしか使わないような情報はまとめずに、使うクラス上で定義してあげるといいと思います。(うまい例えが思いつかなくて、すみませn。。。)
では、GameManagerクラスから呼び出してみましょう。
呼び出し方は以下のようになります。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GameManager : MonoBehaviour
{
void Start()
{
//Dataクラスの中の情報を呼び出す。
Debug.Log("a:" + Data.a);
Debug.Log("b:" + Data.b);
Debug.Log("c:" + Data.c);
}
}
カンタンですね!
比較的、短く可読性も上がると思うので、オススメです!
inspectorにアタッチした情報を呼び出してみる。
以下のようなクラスを作成して、inspectorにオブジェクトをアタッチします。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SerializeData : MonoBehaviour
{
public GameObject obj;
}
次にDataクラスでは、以下のような部分を作成することで、Serializeクラスの情報をDataクラスから取得できるようにします。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
static public class Data
{
//SerializeDataクラスの情報
private static SerializeData serializeData;
//シーン上にあるSerializeDataクラスを取得する。
public static void OnStart(SerializeData serializedata)
{
serializeData = serializedata;
}
//ゲッターでSerializeDataクラスの情報を拾う。
public static GameObject obj
{
get { return serializeData.obj; }
}
}
Serializeクラスからデータを取得するために、serializeDataという変数を用意し、OnStart()メソッドでSerializeクラスの情報を設定しています。
呼び出しは先ほど同様、以下のように書くことで、使用できます。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GameManager : MonoBehaviour
{
void Start()
{
//ここで、"Serialize"というTag名のオブジェクトにアタッチされているSerializeDataクラスの情報をDataクラスに渡している。
Data.OnStart(GameObject.FindGameObjectWithTag("Serialize").GetComponent<SerializeData>());
//データクラスから呼び出す。
Debug.Log("obj:" + Data.obj.name);
}
}
最後に
後半、書いているうちに時間が無くなっちゃって、ババっとまとめちゃったので読みにくいかもしれません!
ごめんなさい!!!
また、時間あるときに、文章は直しておきます!
↧