/// <summary>
        /// Paint機能
        /// </summary>
        /// <param name="data">発行されたメッセージの値である構造体</param>
        private void paint(HpInputData data)
        {
            switch (data.InputState)
            {
            //入力した瞬間
            case HpInputState.InputDown:
                //書き始めたらもうUndoできなくする
                foreach (Transform child in _paintTrailRendererParent)
                {
                    if (child.gameObject.activeInHierarchy == false)
                    {
                        Destroy(child.gameObject);
                    }
                }

                Debug.Log("PaintStart");
                //ペイントオブジェクトを生成
                _tmpObj = Instantiate(_paintTrailRendererPrefab, data.InputPosition, Quaternion.identity);
                _tmpObj.transform.parent = _paintTrailRendererParent;
                break;

            //入力中
            case HpInputState.Input:
                Debug.Log("Painting");
                //ペイントオブジェクトを入力位置に追従
                _tmpObj.transform.position = data.InputPosition;
                break;

            //入力終了
            case HpInputState.NoInput:
                //なんか書くことあれば
                _tmpObj = null;
                break;
            }
        }
        /// <summary>
        /// Undo機能
        /// </summary>
        /// <param name="data">発行されたメッセージの値である構造体</param>
        private void undo(HpInputData data)
        {
            List <Transform> tmpList = new List <Transform>();

            foreach (Transform child in _paintTrailRendererParent)
            {
                tmpList.Add(child);
            }

            foreach (Transform child in tmpList)
            {
                if (child.gameObject.activeInHierarchy == false)
                {
                    child.gameObject.SetActive(true);
                    return;
                }
            }
        }
        /// <summary>
        /// Redo機能
        /// </summary>
        /// <param name="data">発行されたメッセージの値である構造体</param>
        private void redo(HpInputData data)
        {
            List <Transform> tmpList = new List <Transform>();

            foreach (Transform child in _paintTrailRendererParent)
            {
                tmpList.Add(child);
            }

            //Listを反転させる
            tmpList.Reverse();

            foreach (Transform child in tmpList)
            {
                if (child.gameObject.activeInHierarchy)
                {
                    child.gameObject.SetActive(false);
                    return;
                }
            }
        }