シングルトンで必要な機能。
一つの実体でいつでもどこからでもデータを保持受け渡しできること。
Unityのシングルトンにはいろいろと制約があるのでC#はJAVAに慣れている人でもリファレンスを見る必要があるかも。
以下のC#スクリプトを作成する。
Tukau1 シングルトンデータを使うクラス。どこに実装してもいい。
DataKanri 空のゲームオブジェクトに実装する。(ドラッグドロップ)
Kyouyuu 共有データ置き場。とりあえず変数mojiを共有。
データを実際に使用する場合
using UnityEngine;
using System.Collections;
public class Tukau1: MonoBehaviour {
void Start () {
DataKanri dk = DataKanri.Instance;
Debug.LogWarning (dk.moji");
dk.moji="Tukau1";
Debug.LogWarning (dk.moji");
}
}
データをゲームオブジェクトに関連付けて保持する
using UnityEngine;
using System.Collections;
public class DataKanri: Kyouyuu<DataKanri> {
void Awake(){
DontDestroyOnLoad (this);//シーン移動でゲームオブジェクトを破棄しない
}
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
}
実際にデータを置く場所。
using UnityEngine;
using System.Collections;
public class Kyouyuu<T> : MonoBehaviour where T : Kyouyuu<T>
{
public string moji ="Kyouyuu";//必要なだけ変数を作ってOK。内部クラスを作っても良い
protected static T instance;
public static T Instance {
get {
if (instance == null) {
instance = (T)FindObjectOfType (typeof(T));
if (instance == null) {
Debug.LogWarning (typeof(T) + "インスタンス無いよ");
}
}
return instance;
}
}
protected bool CheckInstance()
{
if( instance == null)
{
instance = (T)this;
return true;
}else if( Instance == this )
{
return true;
}
Destroy(this);
return false;
}
protected void Awake()
{
CheckInstance();
}
}
適当なソースから使いやすそうなものをチョイスしました。
他にもシングルトンの書き方があるそうです。
0 件のコメント:
コメントを投稿