Unityでゲームを作っています。
最近、継承やインターフェースなどの概念を少しずつ理解してきたところです。
実現したいこと
A、Bという2種類の機能(フィールド・プロパティ・メソッドの集合)があるとします。
このとき、
- A、Bともに可能なクラス
- Aのみ可能なクラス
- Bのみ可能なクラス
をそれぞれ作りたいです。
さらに、A、Bの実装は各クラスで完全に同一にしたいです。
また、各クラスにはMonoBehaviour
を継承させたいです。
(ちなみに、今後、機能C、D……と機能の種類が増え、それに伴いクラスの種類も増える可能性があります。)
例
C#
1public abstract class Base : MonoBehaviour 2{ 3 // MonoBehaviourを継承した基底クラス 4 // 各クラスはA、Bとは別に共通の機能を持つ 5}
C#
1public class Class1 : Base 2{ 3 // 機能A 4 private int index; 5 public int Index 6 { 7 get 8 { 9 return index; 10 } 11 12 set 13 { 14 index = value; 15 this.gameObject.GetComponent<Text>().text = index.ToString(); 16 } 17 } 18 19 // 機能B 20 public string Name { get; set; } 21 public void PrintName() 22 { 23 Debug.Log(Name); 24 } 25}
C#
1public class Class2 : Base 2{ 3 // 機能A 4 private int index; 5 public int Index 6 { 7 get 8 { 9 return index; 10 } 11 12 set 13 { 14 index = value; 15 this.gameObject.GetComponent<Text>().text = index.ToString(); 16 } 17 } 18}
C#
1public class Class3 : Base 2{ 3 // 機能B 4 public string Name { get; set; } 5 public void PrintName() 6 { 7 Debug.Log(Name); 8 } 9}
このようなことをしたいです(機能の中身は適当です)。現在の例では同一の処理が複数箇所に書かれており、面倒な上にいつかバグの原因になりそうです。
試したこと
「インターフェースのデフォルト実装」の利用を考えましたが、
private
なフィールドは実装不可能MonoBehaviour
の継承を前提とした処理は実装不可能
という問題がありました。

回答1件
あなたの回答
tips
プレビュー