参照をキャッシュする

繰り返し呼び出して使う値は、こんな感じに書いておくと短い記述でかつ負荷も少なく呼び出す事ができるようになります。

1
2
private RectTransform m_RectTransform;
private RectTransform rectTransform => m_RectTransform ?? (m_RectTransform = transform as RectTransform);

RectTransform以外ではGetComponentして呼び出したりする事も可能です。 CanvasGroupとかCapsuleColliderとか、良く呼びそうなコンポーネントはこうしておくと良さそう。

1
2
private CanvasGroup m_CanvasGroup;
private CanvasGroup canvasGroup => m_CanvasGroup ?? (m_CanvasGroup = gameObject.GetComponent<CanvasGroup>());
1
2
private CapsuleCollider m_CapsuleCollider;
private CapsuleCollider capsuleCollider => m_CapsuleCollider ?? (m_CapsuleCollider = gameObject.GetComponent<CapsuleCollider>());

入れ子になっているコンポーネントもこんな感じで呼ぶ事が可能です。

1
2
private Animator m_Animator;
private Animator animator => m_Animator ?? (m_Animator = gameObject.GetComponentInChildren<Animator>());

もし error CS1644: Feature expression bodied members' cannot be used because it is not part of the C# 4.0 language specification みたいなエラーが出た場合には、Project Settingsから下記の設定を行うと良さそう。