本日はMRDLのSurfaceを学んでいきます。
〇Volume
[StartupScene]でHandMenuから[Cube]ボタンを押すことで[Volume]シーンがロードされます。
この[Volume]シーンでは[Smoke]オブジェクトにアタッチされている[Volume]コンポーネントで[Cube]シーンの動きを実現しています。
[Volume]コンポーネントは
using ... public class Volume : HandSurface { ... }
のように[HandSurface]クラスからの継承クラスとなっています。
using ... public class HandSurface : FingerSurface { ... }
この[HandSurface]クラスはさらに[FingerSurface]クラスからの継承クラスとなっています。
今回はこの[FingerSurface]クラスを見ていきます。 筆者はUnityからすべてを始めたのでC#の基本であるクラス継承に関してあまり理解していないところもあるので今回はクラス継承に関してさらいながら読み解いていきます。
using Microsoft.MixedReality.Toolkit; using Microsoft.MixedReality.Toolkit.Input; using Microsoft.MixedReality.Toolkit.Utilities; using Microsoft.MRDL; using UnityEngine; public class FingerSurface : MonoBehaviour { public static FingerSurface ActiveSurface { get { return activeSurface; } } private static FingerSurface activeSurface; public bool Initialized { get; private set; } public virtual float SurfaceRadius { get { return 0.125f; } } public Vector3 SurfacePosition { get; protected set; } [Header("Finger objects")] [SerializeField] protected Transform[] fingers; [SerializeField] protected Transform[] palms; [SerializeField] protected bool disableInactiveFingersInEditor = true; [Header("Finger Physics")] [SerializeField] protected Rigidbody[] fingerRigidBodies; [SerializeField] protected Collider[] fingerColliders; [SerializeField] protected Rigidbody[] palmRigidBodies; [SerializeField] protected Collider[] palmColliders; [Header("Surface")] [SerializeField] protected Transform surfaceTransform; protected ContextualHandMenu menu; ... }
FingerSurfaceはMonobegaviourからの継承クラスでUnityで多く使用される形となっています。
〇protected修飾子
protected修飾子は基底クラス(この場合FingerSurfaceクラス)だけではなく基底クラスを継承したサブクラス(継承クラス)でも参照されます。
例えば[Finger objects]の場合
[Header("Finger objects")] [SerializeField] protected Transform[] fingers; [SerializeField] protected Transform[] palms; [SerializeField] protected bool disableInactiveFingersInEditor = true;
次の様にサブクラスである[Volume]コンポーネントでも参照されています。
これによってSurfacesで体験できる9つのシーンそれぞれに共通した機能を基底クラス(スーパークラス)から継承させて使用します。
[FingerSurface]のコードに関しては長いため次をご覧ください