/// <summary>
        /// 各派生クラスでの初期化処理を行う(メニューまたは AddView から生成される場合のみ実行れる)
        /// </summary>
        /// <param name="tOption"></param>
        override protected void OnBuild(string tOption = "")
        {
            ImageNumber tImageNumber = _imageNumber;

            if (tImageNumber == null)
            {
                tImageNumber = gameObject.AddComponent <ImageNumber>();
            }
            if (tImageNumber == null)
            {
                // 異常
                return;
            }

            //----------------------------

            // Default
            tImageNumber.color       = Color.white;
            tImageNumber.atlasSprite = UIAtlasSprite.Create("uGUIHelper/Textures/UIDefaultImageNumber");

            if (isCanvasOverlay == true)
            {
                tImageNumber.material = Resources.Load <Material>("uGUIHelper/Shaders/UI-Overlay-Default");
            }

            ResetRectTransform();
        }
        // AtlasSprite の項目を描画する
        private void DrawAtlas(ImageNumber tTarget)
        {
            UIAtlasSprite tAtlasSprite;

            Texture tAtlasTextureBase = null;

            if (tTarget.atlasSprite != null)
            {
                tAtlasTextureBase = tTarget.atlasSprite.texture;
            }

            Texture tAtlasTexture = EditorGUILayout.ObjectField("Atlas Texture", tAtlasTextureBase, typeof(Texture), false) as Texture;

            if (tAtlasTexture != tAtlasTextureBase)
            {
                Undo.RecordObject(tTarget, "UIAtlasSprite Texture : Change");                           // アンドウバッファに登録

                List <Sprite> tList = new List <Sprite>();

                if (tAtlasTexture != null)
                {
                    string tPath = AssetDatabase.GetAssetPath(tAtlasTexture.GetInstanceID());

                    // テクスチャからパスを取得してマルチタイプスプライトとしてロードする
                    UnityEngine.Object[] tSpriteAll = AssetDatabase.LoadAllAssetsAtPath(tPath);

                    if (tSpriteAll != null)
                    {
                        int i, l = tSpriteAll.Length;
                        for (i = 0; i < l; i++)
                        {
                            if (tSpriteAll[i] is UnityEngine.Sprite)
                            {
                                tList.Add(tSpriteAll[i] as UnityEngine.Sprite);
                            }
                        }
                    }
                }

                if (tList.Count > 0)
                {
                    // 存在するので更新する

                    tAtlasSprite = UIAtlasSprite.Create();
                    tAtlasSprite.Set(tList.ToArray());
/*					tAtlasSprite.name = tAtlasTexture.name + "(Instance Only)" ;*/
                    tTarget.atlasSprite = tAtlasSprite;
                }
                else
                {
                    // 存在しないのでクリアする
                    tTarget.atlasSprite = null;
                }

                EditorUtility.SetDirty(tTarget);
            }
        }
        /// <summary>
        /// 文字単位のオフセット位置の設定
        /// </summary>
        /// <param name="tCodeOffset"></param>
        public void SetCodeOffset(Vector3[] tCodeOffset)
        {
            ImageNumber tImageNumber = _imageNumber;

            if (tImageNumber == null)
            {
                return;
            }
            tImageNumber.SetCodeOffset(tCodeOffset);
        }
        override protected void OnLateUpdate()
        {
            if (autoSizeFitting == true)
            {
                ImageNumber   t = _imageNumber;
                RectTransform r = _rectTransform;
                if (r != null && t != null)
                {
                    Vector2 tSize = r.sizeDelta;

                    if (r.anchorMin.x == r.anchorMax.x)
                    {
                        tSize.x = t.preferredWidth;
                    }
                    if (r.anchorMin.y == r.anchorMax.y)
                    {
                        tSize.y = t.preferredHeight;
                    }

                    r.sizeDelta = tSize;
                }
            }
        }
        /// <summary>
        /// スンスペクター描画
        /// </summary>
        public override void OnInspectorGUI()
        {
            // とりあえずデフォルト
//			DrawDefaultInspector() ;

            //--------------------------------------------

            // ターゲットのインスタンス
            ImageNumber tTarget = target as ImageNumber;

            // Graphic の基本情報を描画する
            DrawBasis(tTarget);

            EditorGUILayout.Separator();                // 少し区切りスペース

            // アトラス
            DrawAtlas(tTarget);

            // 1文字あたりの大きさ
            Vector2 tCodeScale = EditorGUILayout.Vector2Field("Code Scale", tTarget.codeScale);

            if (tCodeScale != tTarget.codeScale && tCodeScale.x > 0 && tCodeScale.y > 0)
            {
                Undo.RecordObject(tTarget, "ImageNumber : Code Scale Change");                          // アンドウバッファに登録
                tTarget.codeScale = tCodeScale;
                EditorUtility.SetDirty(tTarget);
//				UnityEditor.SceneManagement.EditorSceneManager.MarkSceneDirty( UnityEditor.SceneManagement.EditorSceneManager.GetActiveScene() ) ;
            }

            // 文字間隔
            float tCodeSpace = EditorGUILayout.FloatField("Code Space", tTarget.codeSpace);

            if (tCodeSpace != tTarget.codeSpace)
            {
                Undo.RecordObject(tTarget, "ImageNumber : Code Space Change");                          // アンドウバッファに登録
                tTarget.codeSpace = tCodeSpace;
                EditorUtility.SetDirty(tTarget);
//				UnityEditor.SceneManagement.EditorSceneManager.MarkSceneDirty( UnityEditor.SceneManagement.EditorSceneManager.GetActiveScene() ) ;
            }

            // データ配列
            SerializedObject   tSO = new SerializedObject(tTarget);
            SerializedProperty tSP = tSO.FindProperty("codeOffset");

            if (tSP != null)
            {
                EditorGUILayout.PropertyField(tSP, new GUIContent("codeOffset"), true);
            }
            tSO.ApplyModifiedProperties();

            // コードアンカー
            TextAnchor tAlignment = ( TextAnchor )EditorGUILayout.EnumPopup("Alignment", tTarget.alignment);

            if (tAlignment != tTarget.alignment)
            {
                Undo.RecordObject(tTarget, "ImageNumber : Alignement Change");                          // アンドウバッファに登録
                tTarget.alignment = tAlignment;
                EditorUtility.SetDirty(tTarget);
//				UnityEditor.SceneManagement.EditorSceneManager.MarkSceneDirty( UnityEditor.SceneManagement.EditorSceneManager.GetActiveScene() ) ;
            }

            EditorGUILayout.Separator();                // 少し区切りスペース

            // 表示する値
            GUI.backgroundColor = new Color(0.0f, 1.0f, 1.0f, 1.0f);                    // GUIの下地を灰にする
            int tValue = EditorGUILayout.IntField("Value", tTarget.value, GUILayout.Width(200f));

            GUI.backgroundColor = Color.white;
            if (tValue != tTarget.value)
            {
                // 変化があった場合のみ処理する
                Undo.RecordObject(tTarget, "ImageNumber : Value Change");                       // アンドウバッファに登録
                tTarget.value = tValue;
                EditorUtility.SetDirty(tTarget);
//				UnityEditor.SceneManagement.EditorSceneManager.MarkSceneDirty( UnityEditor.SceneManagement.EditorSceneManager.GetActiveScene() ) ;
            }

            EditorGUILayout.Separator();                // 少し区切りスペース

            //-----------------------------------------------------

            EditorGUIUtility.labelWidth = 60f;
            EditorGUIUtility.fieldWidth = 30f;

            GUILayout.BeginHorizontal();                // 横並び
            {
                // 縦方向揃え
                GUILayout.Label("Digit", GUILayout.Width(40.0f));                       // null でないなら 74
                int tDigitInteger = EditorGUILayout.IntField(tTarget.digitInteger, GUILayout.Width(40f));
                if (tDigitInteger != tTarget.digitInteger)
                {
                    // 変化があった場合のみ処理する
                    Undo.RecordObject(tTarget, "ImageNumber : Digit Integer Change");                           // アンドウバッファに登録
                    tTarget.digitInteger = tDigitInteger;
                    EditorUtility.SetDirty(tTarget);
//					UnityEditor.SceneManagement.EditorSceneManager.MarkSceneDirty( UnityEditor.SceneManagement.EditorSceneManager.GetActiveScene() ) ;
                }

                GUILayout.Label(".", GUILayout.Width(10.0f));                           // null でないなら 74

                int tDigitDecimal = EditorGUILayout.IntField(tTarget.digitDecimal, GUILayout.Width(40f));
                if (tDigitDecimal != tTarget.digitDecimal)
                {
                    // 変化があった場合のみ処理する
                    Undo.RecordObject(tTarget, "ImageNumber : Digit Decimal Change");                           // アンドウバッファに登録
                    tTarget.digitDecimal = tDigitDecimal;
                    EditorUtility.SetDirty(tTarget);
//					UnityEditor.SceneManagement.EditorSceneManager.MarkSceneDirty( UnityEditor.SceneManagement.EditorSceneManager.GetActiveScene() ) ;
                }

                // 適当なスペース
                GUILayout.Label("", GUILayout.Width(5f));

                // カンマ
                GUILayout.Label("Comma", GUILayout.Width(50.0f));                       // null でないなら 74
                int tComma = EditorGUILayout.IntField(tTarget.comma, GUILayout.Width(40f));
                if (tComma != tTarget.comma)
                {
                    // 変化があった場合のみ処理する
                    Undo.RecordObject(tTarget, "ImageNumber : Comma Change");                           // アンドウバッファに登録
                    tTarget.comma = tComma;
                    EditorUtility.SetDirty(tTarget);
//					UnityEditor.SceneManagement.EditorSceneManager.MarkSceneDirty( UnityEditor.SceneManagement.EditorSceneManager.GetActiveScene() ) ;
                }
            }
            GUILayout.EndHorizontal();                          // 横並び終了

            EditorGUIUtility.labelWidth = 116f;
            EditorGUIUtility.fieldWidth = 40f;

            // 符号を表示するか否か
            GUILayout.BeginHorizontal();                // 横並び
            {
                // 各種GUIのデフォルトリソースのロードを有効にするか
                bool tPlusSign = EditorGUILayout.Toggle(tTarget.plusSign, GUILayout.Width(16f));
                if (tPlusSign != tTarget.plusSign)
                {
                    Undo.RecordObject(tTarget, "ImageNumber : Plus Sign Change");                               // アンドウバッファに登録
                    tTarget.plusSign = tPlusSign;
                    EditorUtility.SetDirty(tTarget);
//					UnityEditor.SceneManagement.EditorSceneManager.MarkSceneDirty( UnityEditor.SceneManagement.EditorSceneManager.GetActiveScene() ) ;
                }
                GUILayout.Label("Plus Sign", GUILayout.Width(80f));
//			}
//			GUILayout.EndHorizontal() ;		// 横並び終了

                GUILayout.Label("", GUILayout.Width(10f));

                // 符号を表示するか否か
//			GUILayout.BeginHorizontal() ;	// 横並び
//			{
                // 各種GUIのデフォルトリソースのロードを有効にするか
                bool tZeroSign = EditorGUILayout.Toggle(tTarget.zeroSign, GUILayout.Width(16f));
                if (tZeroSign != tTarget.zeroSign)
                {
                    Undo.RecordObject(tTarget, "ImageNumber : Zero Sign Change");                               // アンドウバッファに登録
                    tTarget.zeroSign = tZeroSign;
                    EditorUtility.SetDirty(tTarget);
                }
                GUILayout.Label("Zero Sign", GUILayout.Width(80f));
            }
            GUILayout.EndHorizontal();                          // 横並び終了

//			GUILayout.Label( "", GUILayout.Width( 10f ) ) ;

            // 0埋め
            GUILayout.BeginHorizontal();                // 横並び
            {
                // 各種GUIのデフォルトリソースのロードを有効にするか
                bool tZeroPadding = EditorGUILayout.Toggle(tTarget.zeroPadding, GUILayout.Width(16f));
                if (tZeroPadding != tTarget.zeroPadding)
                {
                    Undo.RecordObject(tTarget, "ImageNumber : Zero Padding Change");                            // アンドウバッファに登録
                    tTarget.zeroPadding = tZeroPadding;
                    EditorUtility.SetDirty(tTarget);
                }
                GUILayout.Label("Zero Padding", GUILayout.Width(80f));
//			}
//			GUILayout.EndHorizontal() ;		// 横並び終了

                GUILayout.Label("", GUILayout.Width(10f));

                // パーセント
//			GUILayout.BeginHorizontal() ;	// 横並び
//			{
                // 各種GUIのデフォルトリソースのロードを有効にするか
                bool tPercent = EditorGUILayout.Toggle(tTarget.percent, GUILayout.Width(16f));
                if (tPercent != tTarget.percent)
                {
                    Undo.RecordObject(tTarget, "ImageNumber : Percent Change");                         // アンドウバッファに登録
                    tTarget.percent = tPercent;
                    EditorUtility.SetDirty(tTarget);
                }
                GUILayout.Label("Percent", GUILayout.Width(80f));
            }
            GUILayout.EndHorizontal();                          // 横並び終了
        }