Unity (C#) ステージデータの管理

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
UNA
記事: 2
登録日時: 10年前

Unity (C#) ステージデータの管理

#1

投稿記事 by UNA » 10年前

ステージデータクラス(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

UNA
記事: 2
登録日時: 10年前

Re: Unity (C#) ステージデータの管理

#2

投稿記事 by UNA » 10年前

自己解決しましたので掲載します。
ご観覧いただきましたみなさま。
ありがとうございました。

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や数値をインスペクタ上で設定するだけなので中身は空です。

閉鎖

“C言語何でも質問掲示板” へ戻る