🪔

【C#】abstractを使った共通処理の実装方法【Unity】

2022/03/29に公開

経緯

現在作っているゲームにPetとBreederが出てきて、その両方にモデルの生成を行うという処理を実装していたので、これを共通処理として実装できないか色々調べていたらabstractというものを見つけたので試してみました。

abstractを使わない場合

public class A : MonoBehaviour
{

}

public class B : A
{
	private int petModelId;
	public void InitializeModel()
	{
		//なんか色々処理
		var modelPrefab = PrefabManager.Ins.PetPrefabs[petModelId];
		//なんか色々処理
	}
}

public class C : A
{
	private int breederModelId;
	public void InitializeModel()
	{
		//Bと同じ処理
		var modelPrefab = PrefabManager.Ins.BreederPrefabs[breederModelId];
		//Bと同じ処理
	}
}

もともとは上記のような感じだったのですが、abstractを使うことで下記のような感じにまとめることができました。

abstractを使った場合

public abstract class A : MonoBehaviour
{
	public void InitializeModel()
	{
		//なんか色々処理
		GetModelPrefab();
		//なんか色々処理
	}
	protected abstract GameObject GetModelPrefab();
}

public class B : A
{
	private int petModelId;
	protected override GameObject GetModelPrefab()
	{
		return Owner_Pet_PrefabManager.Ins.PetPrefabs[petModelId];
	}
}

public class C : A
{
	private int breederModelId;
	protected override GameObject GetModelPrefab()
	{
		return Owner_Pet_PrefabManager.Ins.BreederPrefabs[breederModelId];
	}
}

Discussion