/// <summary>Unsubscribe from single use subscription.</summary>
        private void UnsubscribeSingleSubscription(string _messageHeader, SubscriberFunction _messageFunction)
        {
            if (m_useSingle && m_hasSingle)
            {
                string subscriptionKey = _messageHeader + " ~ " + _messageFunction.Method;

                //If in single active subscriptions, unsubscribe from LocalNoticeBoard
                if (m_singleActiveSubscriptions.ContainsKey(subscriptionKey))
                {
                    if (m_singleActiveSubscriptions[subscriptionKey].m_noticeBoard)
                    {
                        m_singleActiveSubscriptions[subscriptionKey].m_noticeBoard.UnsubscribeToMessage(
                            m_singleActiveSubscriptions[subscriptionKey].m_dynamicMessageHeader, _messageFunction,
                            OnRemoveSubscriberList);
                    }
                    else
                    {
                        GlobalNoticeBoard.s_instance.UnsubscribeToMessage(
                            m_singleActiveSubscriptions[subscriptionKey].m_staticMessageHeader, _messageFunction);
                    }

                    MPac_UnsubscribedLocalMessage package = new MPac_UnsubscribedLocalMessage(
                        m_singleActiveSubscriptions[subscriptionKey].m_dynamicMessageHeader,
                        "Local Message: " + m_singleActiveSubscriptions[subscriptionKey].m_dynamicMessageHeader
                        + " ~Unsubscribed", m_singleActiveSubscriptions[subscriptionKey].m_dynamicMessageHeader);
                    m_singleActiveSubscriptions[subscriptionKey].m_unsubscribeFunction?.Invoke(package);
                    m_singleActiveSubscriptions.Remove(subscriptionKey);
                }

                if (m_singleActiveSubscriptions.Count == 0)
                {
                    m_hasSingle = false;
                }
            }
        }
        /// <summary>Unsubscribe previous frame solo subscriptions.</summary>
        private void UnsubscribeSoloSubscriptions()
        {
            if (m_useSolo && m_hasSolo)
            {
                //Unsubscribe previous solo subscriptions from LocalNoticeBoards
                foreach (KeyValuePair <string, ActiveSubscription>
                         subscription in m_prevSoloActiveSubscriptions)
                {
                    if (subscription.Value.m_noticeBoard)
                    {
                        subscription.Value.m_noticeBoard.UnsubscribeToMessage(
                            subscription.Value.m_dynamicMessageHeader,
                            subscription.Value.m_subscriberFunction,
                            OnRemoveSubscriberList);

                        //Creates LocalNoticeBoard unsubscription package
                        MPac_UnsubscribedLocalMessage package = new MPac_UnsubscribedLocalMessage(
                            subscription.Value.m_dynamicMessageHeader,
                            "Local Message: " + subscription.Value.m_dynamicMessageHeader
                            + " ~Unsubscribed", subscription.Value.m_dynamicMessageHeader);
                        subscription.Value.m_unsubscribeFunction?.Invoke(package);
                    }
                    else
                    {
                        GlobalNoticeBoard.s_instance.UnsubscribeToMessage(
                            subscription.Value.m_staticMessageHeader,
                            subscription.Value.m_subscriberFunction);


                        //Creates GlobalNoticeBoard unsubscription package
                        MPac_UnsubscribedGlobalMessage package = new MPac_UnsubscribedGlobalMessage(
                            subscription.Value.m_staticMessageHeader,
                            "Global Message: " + subscription.Value.m_staticMessageHeader.ToString()
                            + " ~Unsubscribed", subscription.Value.m_staticMessageHeader.ToString());
                        subscription.Value.m_unsubscribeFunction?.Invoke(package);
                    }
                }
                m_prevSoloActiveSubscriptions.Clear();

                //Transfer current buffer to previous buffer
                foreach (KeyValuePair <string, ActiveSubscription>
                         subscription in m_soloActiveSubscriptions)
                {
                    m_prevSoloActiveSubscriptions.Add(subscription.Key, subscription.Value);
                }
                m_soloActiveSubscriptions.Clear();

                if (m_prevSoloActiveSubscriptions.Count == 0)
                {
                    m_hasSolo = false;
                }
            }
        }