////////////////////////////////////////////////////////////////////////////
        ////////////////////////////////////////////////////////////////////////////

        /// <summary>
        /// Only ever called once, mainly used to initialize variables.
        /// </summary>
        private void Awake()
        {
            if (Instance != null)
            {
                Logger.log?.Warn($"Instance of {this.GetType().Name} already exists, destroying.");
                DestroyImmediate(this);
                return;
            }

            Instance = this;

            var l_RectTransform = null as RectTransform;

            gameObject.transform.position    = Position;
            gameObject.transform.eulerAngles = Rotation;
            gameObject.transform.localScale  = Scale;

            m_Canvas                  = gameObject.AddComponent <Canvas>();
            m_Canvas.renderMode       = RenderMode.WorldSpace;
            l_RectTransform           = m_Canvas.transform as RectTransform;
            l_RectTransform.sizeDelta = CanvasSize;

            gameObject.AddComponent <HMUI.CurvedCanvasSettings>().SetRadius(0);

            m_Text          = CreateText(m_Canvas.transform as RectTransform, "", HeaderPosition, CanvasSize);
            l_RectTransform = m_Text.transform as RectTransform;
            l_RectTransform.anchoredPosition = Vector2.zero;
            m_Text.text      = "";
            m_Text.fontSize  = HeaderFontSize;
            m_Text.alignment = TextAlignmentOptions.Center;

            ///var l_Background            = new GameObject("Background").AddComponent<Image>();
            ///l_RectTransform             = l_Background.transform as RectTransform;
            ///l_RectTransform.SetParent(m_Canvas.transform, false);
            ///l_RectTransform.sizeDelta   = CanvasSize;
            ///l_Background.color          = new Color(0, 1, 0, 0.5f);

            SetVisible(false);

            /// Don't destroy this object on scene changes
            DontDestroyOnLoad(this);
        }
 /// <summary>
 /// Called when the script is being destroyed.
 /// </summary>
 private void OnDestroy()
 {
     Logger.log?.Debug($"{name}: OnDestroy()");
     Instance = null;
 }