ステージデータクラス(string ステージ名、int 最大得点、List<gameObject> 使用するprefab)
をステージ別にあらかじめ用意し別クラスからスクリプトで読み込むようにしたいと思っております。
具体的にはmanagerクラスのawakeで現在のステージを判定し任意のステージを
ステージデータクラスから読み込んで使用するようにしたいです。
今、わからない部分は
① ステージデータクラスの作成方法
- 型が違う変数をどうやって関連づけするか?
言葉では伝えづらいので図で説明しますと
stage1
|- string ステージ名1
|- int 最大得点1
|- List<gameObject> 使用するprefab1
stage2
|- string ステージ名2
|- int 最大得点2
|- List<gameObject> 使用するprefab2
といった形にしたいと思っております。
②managerクラスでのステージデータクラスの読み込み方法
最終的には以下のようにできたらと思っております。
一つのインタンス stageDataに格納
stageData.name
stageData.maxPoint
stageData.prefab[0]
といった形にできればと思っております。
大変お手数ですが、ご教授いただきたいです。
よろしくお願いいたします。
Unity version : 5.1.0
Unity (C#) ステージデータの管理
Re: Unity (C#) ステージデータの管理
自己解決しましたので掲載します。
ご観覧いただきましたみなさま。
ありがとうございました。
manager.cs 読み込み元
stageData.cs ステージ判定用の abstract 親クラス
stageData1.cs, stageData2.cs ..... ステージ判定の子クラス
prefabや数値をインスペクタ上で設定するだけなので中身は空です。
ご観覧いただきましたみなさま。
ありがとうございました。
manager.cs 読み込み元
private int totalPoint = 0; //現在のポイント
private int stageMaxPoint = 0; //ステージの最大ポイント
private GameObject[] stagePrefab = null; //ステージで使用するprefab
void Start()
{
for (int i = 1;; i++)
{
var nowStage = loadResouces<stageData>("stage" + i);
if(nowStage == null && stageMaxPoint == 0) clearAllStage();
if(nowStage == null) break;
if(nowStage.MaxStagePoint <= totalPoint) continue;
stageMaxPoint = nowStage.MaxStagePoint;
stagePrefab = nowStage.Prefab;
break;
}
}
private T loadResouces<T>(string path) where T : stageData
{
return Resources.Load(path, typeof(T)) as T;
}
private void clearAllStage()
{
Debug.Log("clearAllStage");
}
stageData.cs ステージ判定用の abstract 親クラス
public abstract class stageData : ScriptableObject
{
[SerializeField]
protected int maxStagePoint;
[SerializeField]
protected GameObject[] prefab;
public int MaxStageHair{ get{ return maxStagePoint; } }
public GameObject[] Prefab{ get{ return prefab; } }
}
stageData1.cs, stageData2.cs ..... ステージ判定の子クラス
prefabや数値をインスペクタ上で設定するだけなので中身は空です。