背景
Unity,C# 初心者です.
Unityの不便な点を丸めるためにMonoBehaviorを継承して,
MonoBehaviourの代わりに基底クラスになるクラスを作成しています.
一例として,
ゲームオブジェクトの親要素にtransformを経由せずにアクセスできるようにしようと思っています.
(parentがtransformからアクセスしないといけないことがHierarchyの見た目との直感に反しややこしい)
問題
上記の解決として以下のようにプロパティで記述しました.
C#
1using UnityEngine; 2 3public class BaseClass : MonoBehaviour { 4 public GameObject Parent { 5 get { return this.transform.parent.gameObject; } 6 set { this.transform.parent = value.transform; } 7 } 8}
これだともしTransformを渡すときにはBaseClass.transform.parent = Transformなので,
TransformもGameObjectと同じようにわたせるように、
つまりBaseClass.Parent = Transformにもしたいと思ったのですが,以下のようにオーバーロードできません.
C#
1using UnityEngine; 2 3public class BaseClass : MonoBehaviour { 4 5 // プロパティのオーバーロード 出来ない 6 public GameObject Parent { 7 get { return this.transform.parent.gameObject; } 8 set { this.transform.parent = value.transform; } 9 } 10 public Transform Parent { 11 set { this.transform.parent = value; } 12 } 13}
質問内容
上記のようなオーバーロードはC#の機能的にできないと思うのですが,
ジェネリック的なもの(詳しくないです)を使えばプロパティで実装できますでしょうか.
また,ジェネリック以外でのプロパティでの実装方法,
プロパティ以外での実装方法は存在しますでしょうか.
以下のようにプロパティではなく関数ではオーバーロードできることは知っています.
C#
1using UnityEngine; 2 3public class BaseClass : MonoBehaviour { 4 5 // 関数のオーバーロード 6 public GameObject Parent() { 7 return this.transform.parent.gameObject; 8 } 9 public void Parent(GameObject parent) { 10 this.transform.parent = parent.transform; 11 } 12 public void Parent(Transform parent) { 13 this.transform.parent = parent; 14 } 15}
set, get以上の機能があれば関数の実装で何の気持ち悪さもないのですが,
set, get以上の機能が今のところないので,関数の実装だと少し気持ち悪く感じます.
プロパティで解決できるならそうしたいと思っています.
詳しい方,ご教授お願いします.
バージョン
- Unity 2020.3.13f1
- .NET 4.x
回答1件
あなたの回答
tips
プレビュー