Quantcast
Channel: C#タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9278

【Unity、C#】静的Dataクラスを用いて、データを管理する。

$
0
0
きっかけ 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); } } 最後に 後半、書いているうちに時間が無くなっちゃって、ババっとまとめちゃったので読みにくいかもしれません! ごめんなさい!!! また、時間あるときに、文章は直しておきます!

Viewing all articles
Browse latest Browse all 9278

Trending Articles