Пример #1
0
    static float MinusPixelColor(int iPoint, int layer, float v, int EdgeColor)
    {
        if (v != 0 && T4MSC.IsPointBrush(iPoint, layer))
        {
            return(Mathf.Max(Mathf.Floor(v) - EdgeColor, 0));
        }

        return(v);
    }
Пример #2
0
    void Painter()
    {
        if (State != 1)
        {
            State = 1;
        }
        Event e = Event.current;

        if (e.type == EventType.KeyDown && e.keyCode == KeyCode.T)
        {
            if (T4MSC.T4MActived != "Activated")
            {
                T4MSC.T4MActived = "Activated";
            }
            else
            {
                T4MSC.T4MActived = "Deactivated";
            }
        }

        if (T4MSC.T4MPreview && T4MSC.T4MActived == "Activated" && T4MSC.T4MPreview.enabled == false || T4MSC.T4MPreview.enabled == false)
        {
            if (
                T4MSC.PaintPrev != T4MSC.PaintHandle.Follow_Normal_Circle &&
                T4MSC.PaintPrev != T4MSC.PaintHandle.Follow_Normal_WireCircle &&
                T4MSC.PaintPrev != T4MSC.PaintHandle.Hide_preview
                )
            {
                T4MSC.T4MPreview.enabled = true;
            }
        }
        else if (T4MSC.T4MPreview && T4MSC.T4MActived == "Deactivated" && T4MSC.T4MPreview.enabled == true || T4MSC.T4MPreview.enabled == true)
        {
            if (T4MSC.PaintPrev != T4MSC.PaintHandle.Classic)
            {
                T4MSC.T4MPreview.enabled = false;
            }
        }

        if (T4MSC.T4MActived == "Activated")
        {
            HandleUtility.AddDefaultControl(0);
            RaycastHit raycastHit = new RaycastHit();
            Ray        terrain    = HandleUtility.GUIPointToWorldRay(e.mousePosition);
            if (e.type == EventType.KeyDown && e.keyCode == KeyCode.KeypadPlus)
            {
                T4MSC.brushSize += 1;
            }
            else if (e.type == EventType.KeyDown && e.keyCode == KeyCode.KeypadMinus)
            {
                T4MSC.brushSize -= 1;
            }

            if (Physics.Raycast(terrain, out raycastHit, Mathf.Infinity, layerMask))
            {
                if (T4MSC.CurrentSelect.gameObject.GetComponent <T4MObjSC>().ConvertType != "UT")
                {
                    T4MSC.T4MPreview.transform.localEulerAngles = new Vector3(90, 180 + T4MSC.CurrentSelect.localEulerAngles.y, 0);
                }
                else
                {
                    T4MSC.T4MPreview.transform.localEulerAngles = new Vector3(90, T4MSC.CurrentSelect.localEulerAngles.y, 0);
                }
                T4MSC.T4MPreview.transform.position = raycastHit.point;

                if (T4MSC.PaintPrev != T4MSC.PaintHandle.Classic && T4MSC.PaintPrev != T4MSC.PaintHandle.Hide_preview && T4MSC.PaintPrev != T4MSC.PaintHandle.Follow_Normal_WireCircle)
                {
                    Handles.color = new Color(1f, 1f, 0f, 0.05f);
                    Handles.DrawSolidDisc(raycastHit.point, raycastHit.normal, T4MSC.T4MPreview.orthographicSize * 0.9f);
                }
                else if (T4MSC.PaintPrev != T4MSC.PaintHandle.Classic && T4MSC.PaintPrev != T4MSC.PaintHandle.Hide_preview && T4MSC.PaintPrev != T4MSC.PaintHandle.Follow_Normal_Circle)
                {
                    Handles.color = new Color(1f, 1f, 0f, 1f);
                    Handles.DrawWireDisc(raycastHit.point, raycastHit.normal, T4MSC.T4MPreview.orthographicSize * 0.9f);
                }

                if ((e.type == EventType.mouseDrag && e.alt == false && e.shift == false && e.button == 0) || (e.shift == false && e.alt == false && e.button == 0 && ToggleF == false))
                {
                    Vector2 pixelUV    = raycastHit.textureCoord * T4MSC.T4MMaskTexUVCoord;               //0.14f;
                    int     PuX        = Mathf.FloorToInt(pixelUV.x * T4MSC.T4MMaskTex.width);
                    int     PuY        = Mathf.FloorToInt(pixelUV.y * T4MSC.T4MMaskTex.height);
                    int     x          = Mathf.Clamp(PuX - T4MSC.T4MBrushSizeInPourcent / 2, 0, T4MSC.T4MMaskTex.width - 1);
                    int     y          = Mathf.Clamp(PuY - T4MSC.T4MBrushSizeInPourcent / 2, 0, T4MSC.T4MMaskTex.height - 1);
                    int     width      = Mathf.Clamp((PuX + T4MSC.T4MBrushSizeInPourcent / 2), 0, T4MSC.T4MMaskTex.width) - x;
                    int     height     = Mathf.Clamp((PuY + T4MSC.T4MBrushSizeInPourcent / 2), 0, T4MSC.T4MMaskTex.height) - y;
                    Color[] terrainBay = T4MSC.T4MMaskTex.GetPixels(x, y, width, height, 0);
                    if (T4MSC.T4MMaskTex2)
                    {
                        terrainBay2 = T4MSC.T4MMaskTex2.GetPixels(x, y, width, height, 0);
                    }
                    for (int i = 0; i < height; i++)
                    {
                        for (int j = 0; j < width; j++)
                        {
                            int   index    = (i * width) + j;
                            float Stronger = T4MSC.T4MBrushAlpha[Mathf.Clamp((y + i) - (PuY - T4MSC.T4MBrushSizeInPourcent / 2), 0, T4MSC.T4MBrushSizeInPourcent - 1) * T4MSC.T4MBrushSizeInPourcent + Mathf.Clamp((x + j) - (PuX - T4MSC.T4MBrushSizeInPourcent / 2), 0, T4MSC.T4MBrushSizeInPourcent - 1)] * T4MSC.T4MStronger;

                            if (T4MSC.T4MselTexture < 3)
                            {
                                terrainBay[index] = Color.Lerp(terrainBay[index], T4MSC.T4MtargetColor, Stronger);
                            }
                            else
                            {
                                terrainBay[index] = Color.Lerp(terrainBay[index], T4MSC.T4MtargetColor, Stronger);                               //*0.3f);
                                if (T4MSC.T4MMaskTex2)
                                {
                                    terrainBay2[index] = Color.Lerp(terrainBay2[index], T4MSC.T4MtargetColor2, Stronger);                                   ///0.3f);
                                }
                            }
                        }
                    }
                    T4MSC.T4MMaskTex.SetPixels(x, y, width, height, terrainBay, 0);
                    T4MSC.T4MMaskTex.Apply();
                    if (T4MSC.T4MMaskTex2)
                    {
                        T4MSC.T4MMaskTex2.SetPixels(x, y, width, height, terrainBay2, 0);
                        T4MSC.T4MMaskTex2.Apply();
                        UndoObj    = new Texture2D[2];
                        UndoObj[0] = T4MSC.T4MMaskTex;
                        UndoObj[1] = T4MSC.T4MMaskTex2;
                    }
                    else
                    {
                        UndoObj    = new Texture2D[1];
                        UndoObj[0] = T4MSC.T4MMaskTex;
                    }
                    //Undo.RecordObjects(UndoObj, "T4MMask"); //Unity don't work correctly with this for now
                    ToggleF = true;
                }
                else if (e.type == EventType.mouseUp && e.alt == false && e.button == 0 && ToggleF == true)
                {
                    T4MSC.SaveTexture();
                    ToggleF = false;
                }
            }
        }
    }
Пример #3
0
    public static void BrushTerrain_New(ref Color[] terrainBay, ref Color[] terrainBay_sec, int x, int y, int width, int height)
    {
        T4MSC.CreateT4MBrushPoint();

        int CurrentLayer = T4MSC.T4MselTexture;

        for (int i = 0; i < height - 1 && true; i++)
        {
            for (int j = 0; j < width - 1; j++)
            {
                int startIndex = i * width + j;

                int[] IndexList = new int[4] {
                    startIndex, startIndex + 1, startIndex + width, startIndex + width + 1
                };

                int iPoint = (y + i) * (T4MSC.T4MMaskTex.width + 1) + (x + j);
                for (int col = 0; col < 4; col++)
                {
                    int   index      = IndexList[col];
                    Color current    = terrainBay[index] * 255;
                    Color currentSec = terrainBay_sec[index] * 255;
                    int   r          = (int)Mathf.Floor(current.r);
                    int   g          = (int)Mathf.Floor(current.g);
                    int   b          = (int)Mathf.Floor(current.b);
                    int   a          = (int)Mathf.Floor(current.a);

                    int r1 = (int)Mathf.Floor(currentSec.r);
                    int g1 = (int)Mathf.Floor(currentSec.g);
                    int b1 = (int)Mathf.Floor(currentSec.b);
                    int a1 = (int)Mathf.Floor(currentSec.a);

                    int EdgeCol = iEdgeColor[col];
                    if (T4MSC.T4MselTexture == 0)
                    {
                        current.g = MinusPixelColor(iPoint, 1, g, EdgeCol);
                        current.b = MinusPixelColor(iPoint, 2, b, EdgeCol);
                        current.a = MinusPixelColor(iPoint, 3, a, EdgeCol);

                        currentSec.r = MinusPixelColor(iPoint, 4, r1, EdgeCol);
                        currentSec.g = MinusPixelColor(iPoint, 5, g1, EdgeCol);
                        currentSec.b = MinusPixelColor(iPoint, 6, b1, EdgeCol);
                        currentSec.a = MinusPixelColor(iPoint, 7, a1, EdgeCol);

                        if (!T4MSC.IsPointBrush(iPoint, CurrentLayer))
                        {
                            current.r = (Mathf.Floor(current.r) + EdgeCol) % 16;
                        }
                    }
                    else if (T4MSC.T4MselTexture == 1)
                    {
                        current.b = MinusPixelColor(iPoint, 2, b, EdgeCol);
                        current.a = MinusPixelColor(iPoint, 3, a, EdgeCol);

                        currentSec.r = MinusPixelColor(iPoint, 4, r1, EdgeCol);
                        currentSec.g = MinusPixelColor(iPoint, 5, g1, EdgeCol);
                        currentSec.b = MinusPixelColor(iPoint, 6, b1, EdgeCol);
                        currentSec.a = MinusPixelColor(iPoint, 7, a1, EdgeCol);

                        if (!T4MSC.IsPointBrush(iPoint, CurrentLayer))
                        {
                            if (T4MSC.ClearPerviousLayer)
                            {
                                current.r = MinusPixelColor(iPoint, 0, r, EdgeCol);
                            }

                            current.g = (Mathf.Floor(current.g) + EdgeCol) % 16;
                        }
                    }
                    else if (T4MSC.T4MselTexture == 2)
                    {
                        current.a = MinusPixelColor(iPoint, 3, a, EdgeCol);

                        currentSec.r = MinusPixelColor(iPoint, 4, r1, EdgeCol);
                        currentSec.g = MinusPixelColor(iPoint, 5, g1, EdgeCol);
                        currentSec.b = MinusPixelColor(iPoint, 6, b1, EdgeCol);
                        currentSec.a = MinusPixelColor(iPoint, 7, a1, EdgeCol);

                        if (!T4MSC.IsPointBrush(iPoint, CurrentLayer))
                        {
                            if (T4MSC.ClearPerviousLayer)
                            {
                                current.r = MinusPixelColor(iPoint, 0, r, EdgeCol);
                                current.g = MinusPixelColor(iPoint, 1, g, EdgeCol);
                            }

                            current.b = (Mathf.Floor(current.b) + EdgeCol) % 16;
                        }
                    }
                    else if (T4MSC.T4MselTexture == 3)
                    {
                        currentSec.r = MinusPixelColor(iPoint, 4, r1, EdgeCol);
                        currentSec.g = MinusPixelColor(iPoint, 5, g1, EdgeCol);
                        currentSec.b = MinusPixelColor(iPoint, 6, b1, EdgeCol);
                        currentSec.a = MinusPixelColor(iPoint, 7, a1, EdgeCol);

                        if (!T4MSC.IsPointBrush(iPoint, CurrentLayer))
                        {
                            current.a = (Mathf.Floor(current.a) + EdgeCol);
                            if (T4MSC.ClearPerviousLayer)
                            {
                                current.r = MinusPixelColor(iPoint, 0, r, EdgeCol);
                                current.g = MinusPixelColor(iPoint, 1, g, EdgeCol);
                                current.b = MinusPixelColor(iPoint, 2, b, EdgeCol);
                            }
                        }
                    }
                    else if (T4MSC.T4MselTexture == 4)
                    {
                        currentSec.g = MinusPixelColor(iPoint, 5, g1, EdgeCol);
                        currentSec.b = MinusPixelColor(iPoint, 6, b1, EdgeCol);
                        currentSec.a = MinusPixelColor(iPoint, 7, a1, EdgeCol);

                        if (!T4MSC.IsPointBrush(iPoint, CurrentLayer))
                        {
                            currentSec.r = (Mathf.Floor(currentSec.r) + EdgeCol);
                            if (T4MSC.ClearPerviousLayer)
                            {
                                current.r = MinusPixelColor(iPoint, 0, r, EdgeCol);
                                current.g = MinusPixelColor(iPoint, 1, g, EdgeCol);
                                current.b = MinusPixelColor(iPoint, 2, b, EdgeCol);
                                current.a = MinusPixelColor(iPoint, 3, a, EdgeCol);
                            }
                        }
                    }
                    else if (T4MSC.T4MselTexture == 5)
                    {
                        currentSec.b = MinusPixelColor(iPoint, 6, b1, EdgeCol);
                        currentSec.a = MinusPixelColor(iPoint, 7, a1, EdgeCol);

                        if (!T4MSC.IsPointBrush(iPoint, CurrentLayer))
                        {
                            currentSec.g = (Mathf.Floor(currentSec.g) + EdgeCol);
                            if (T4MSC.ClearPerviousLayer)
                            {
                                current.r = MinusPixelColor(iPoint, 0, r, EdgeCol);
                                current.g = MinusPixelColor(iPoint, 1, g, EdgeCol);
                                current.b = MinusPixelColor(iPoint, 2, b, EdgeCol);
                                current.a = MinusPixelColor(iPoint, 3, a, EdgeCol);

                                currentSec.r = MinusPixelColor(iPoint, 4, r1, EdgeCol);
                            }
                        }
                    }
                    else if (T4MSC.T4MselTexture == 6)
                    {
                        currentSec.a = MinusPixelColor(iPoint, 7, a1, EdgeCol);

                        if (!T4MSC.IsPointBrush(iPoint, CurrentLayer))
                        {
                            currentSec.b = (Mathf.Floor(currentSec.b) + EdgeCol);
                            if (T4MSC.ClearPerviousLayer)
                            {
                                current.r = MinusPixelColor(iPoint, 0, r, EdgeCol);
                                current.g = MinusPixelColor(iPoint, 1, g, EdgeCol);
                                current.b = MinusPixelColor(iPoint, 2, b, EdgeCol);
                                current.a = MinusPixelColor(iPoint, 3, a, EdgeCol);

                                currentSec.r = MinusPixelColor(iPoint, 4, r1, EdgeCol);
                                currentSec.g = MinusPixelColor(iPoint, 5, g1, EdgeCol);
                            }
                        }
                    }
                    else if (T4MSC.T4MselTexture == 7)
                    {
                        if (!T4MSC.IsPointBrush(iPoint, CurrentLayer))
                        {
                            currentSec.a = (Mathf.Floor(currentSec.a) + EdgeCol);
                            if (T4MSC.ClearPerviousLayer)
                            {
                                current.r = MinusPixelColor(iPoint, 0, r, EdgeCol);
                                current.g = MinusPixelColor(iPoint, 1, g, EdgeCol);
                                current.b = MinusPixelColor(iPoint, 2, b, EdgeCol);
                                current.a = MinusPixelColor(iPoint, 3, a, EdgeCol);

                                currentSec.r = MinusPixelColor(iPoint, 4, r1, EdgeCol);
                                currentSec.g = MinusPixelColor(iPoint, 5, g1, EdgeCol);
                                currentSec.b = MinusPixelColor(iPoint, 6, g1, EdgeCol);
                            }
                        }
                    }

                    terrainBay[index]     = current / 255;
                    terrainBay_sec[index] = currentSec / 255;
                }

                T4MSC.SetBrushPoint(iPoint, CurrentLayer, true);
                if (T4MSC.ClearPerviousLayer)
                {
                    for (int idx = 0; idx < 8; idx++)
                    {
                        if (idx != CurrentLayer)
                        {
                            T4MSC.SetBrushPoint(iPoint, idx, false);
                        }
                    }
                }
                else
                {
                    for (int idx = CurrentLayer + 1; idx < 8; idx++)
                    {
                        T4MSC.SetBrushPoint(iPoint, idx, false);
                    }
                }
            }
        }
    }
Пример #4
0
    //绘制纹理
    void Painter()
    {
        if (State != 1)
        {
            State = 1;
        }
        Event e = Event.current;

        if (e.type == EventType.KeyDown && e.keyCode == KeyCode.T)
        {
            if (T4MSC.T4MActived != "Activated")
            {
                T4MSC.T4MActived = "Activated";
            }
            else
            {
                T4MSC.T4MActived = "Deactivated";
            }
        }

        if (T4MSC.T4MPreview && T4MSC.T4MActived == "Activated" && T4MSC.T4MPreview.enabled == false || T4MSC.T4MPreview.enabled == false)
        {
            if (
                T4MSC.PaintPrev != T4MSC.PaintHandle.Follow_Normal_Circle &&
                T4MSC.PaintPrev != T4MSC.PaintHandle.Follow_Normal_WireCircle &&
                T4MSC.PaintPrev != T4MSC.PaintHandle.Hide_preview
                )
            {
                Debug.Log("Project true");
                T4MSC.T4MPreview.enabled = true;
            }
        }
        else if (T4MSC.T4MPreview && T4MSC.T4MActived == "Deactivated" && T4MSC.T4MPreview.enabled == true || T4MSC.T4MPreview.enabled == true)
        {
            if (T4MSC.PaintPrev != T4MSC.PaintHandle.Classic)
            {
                Debug.Log("Project false");
                T4MSC.T4MPreview.enabled = false;
            }
        }

        if (T4MSC.T4MActived == "Activated")
        {
            HandleUtility.AddDefaultControl(0);
            RaycastHit raycastHit = new RaycastHit();
            Ray        terrain    = HandleUtility.GUIPointToWorldRay(e.mousePosition);
            if (e.type == EventType.KeyDown && e.keyCode == KeyCode.KeypadPlus)
            {
                T4MSC.brushSize += 1;
            }
            else if (e.type == EventType.KeyDown && e.keyCode == KeyCode.KeypadMinus)
            {
                T4MSC.brushSize -= 1;
            }
            string currentSelect = Selection.transforms[0].name;
            if (Physics.Raycast(terrain, out raycastHit, Mathf.Infinity, layerMask) && raycastHit.collider.name == currentSelect)
            {
                //如果类型是ut说明是从Terrain转化过来的
                if (T4MSC.CurrentSelect.gameObject.GetComponent <T4MObjSC>().ConvertType != "UT")
                {
                    T4MSC.T4MPreview.transform.localEulerAngles = new Vector3(90, 180 + T4MSC.CurrentSelect.localEulerAngles.y, 0);
                }
                else
                {
                    T4MSC.T4MPreview.transform.localEulerAngles = new Vector3(90, T4MSC.CurrentSelect.localEulerAngles.y, 0);
                }

                T4MSC.T4MPreview.transform.position = raycastHit.point;

                //这里不稍微加一点在2019中无法在平面上显示出来
                T4MSC.T4MPreview.transform.position += new Vector3(0, 1, 0);

                //这段是显示画笔用的


                // 三种画笔形式
                if (T4MSC.PaintPrev == T4MSC.PaintHandle.Follow_Normal_Circle)
                {
                    Handles.color = new Color(1f, 1f, 0f, 0.05f);
                    Handles.DrawSolidDisc(raycastHit.point, raycastHit.normal, T4MSC.T4MPreview.orthographicSize * 0.9f);
                    //Debug.Log("Follow_Normal_Circle" + T4MSC.T4MPreview.transform.position + "and" + raycastHit.point);
                }
                else if (T4MSC.PaintPrev == T4MSC.PaintHandle.Follow_Normal_WireCircle)
                {
                    Handles.color = new Color(1f, 1f, 0f, 1f);
                    Handles.DrawWireDisc(raycastHit.point, raycastHit.normal, T4MSC.T4MPreview.orthographicSize * 0.9f);
                    //Debug.Log("Follow_Normal_WireCircle" + T4MSC.T4MPreview.transform.position + "and" + raycastHit.point);
                }

                // Debug.Log(e.type);
                // if(e.type == EventType.MouseDown && UndoObj!=null&&!saveflag)
                // {
                //  // var path = "Assets/testimg/tt.png";
                //  // var bytes   = UndoObj[0].EncodeToPNG ();
                //  saveflag = true;
                //  Undo.RecordObjects(UndoObj, "T4MMask");
                //  // File.WriteAllBytes (path, bytes);
                //  Debug.Log("!!");
                // }
                if (e.type == EventType.MouseUp)
                {
                    saveflag = false;
                }
                if ((e.type == EventType.MouseDrag && e.alt == false && e.shift == false && e.button == 0) || (e.type != EventType.MouseMove && e.shift == false && e.alt == false && e.isMouse && e.button == 0 && ToggleF == false))
                {
                    Vector2 pixelUV = raycastHit.textureCoord * T4MSC.T4MMaskTexUVCoord;                  //0.14f;

                    //转成图片上的坐标
                    int PuX = Mathf.FloorToInt(pixelUV.x * T4MSC.T4MMaskTex.width);
                    int PuY = Mathf.FloorToInt(pixelUV.y * T4MSC.T4MMaskTex.height);

                    //T4MBrushSizeInPourcent是将笔刷大小转化成  1:(T4MMaskTex.width/100)  的大小

                    int x      = Mathf.Clamp(PuX - T4MSC.T4MBrushSizeInPourcent / 2, 0, T4MSC.T4MMaskTex.width - 1);
                    int y      = Mathf.Clamp(PuY - T4MSC.T4MBrushSizeInPourcent / 2, 0, T4MSC.T4MMaskTex.height - 1);
                    int width  = Mathf.Clamp((PuX + T4MSC.T4MBrushSizeInPourcent / 2), 0, T4MSC.T4MMaskTex.width) - x;
                    int height = Mathf.Clamp((PuY + T4MSC.T4MBrushSizeInPourcent / 2), 0, T4MSC.T4MMaskTex.height) - y;

                    //读取选中区块的颜色
                    Color[] terrainBay = T4MSC.T4MMaskTex.GetPixels(x, y, width, height, 0);

                    //如果有两张权重图
                    if (T4MSC.T4MMaskTex2)
                    {
                        terrainBay2 = T4MSC.T4MMaskTex2.GetPixels(x, y, width, height, 0);
                    }
                    for (int i = 0; i < height; i++)
                    {
                        for (int j = 0; j < width; j++)
                        {
                            int index = (i * width) + j;

                            //获取笔刷的a通道值
                            float Stronger = T4MSC.T4MBrushAlpha[Mathf.Clamp((y + i) - (PuY - T4MSC.T4MBrushSizeInPourcent / 2), 0, T4MSC.T4MBrushSizeInPourcent - 1) * T4MSC.T4MBrushSizeInPourcent + Mathf.Clamp((x + j) - (PuX - T4MSC.T4MBrushSizeInPourcent / 2), 0, T4MSC.T4MBrushSizeInPourcent - 1)] * T4MSC.T4MStronger;
                            terrainBay[index] = Color.Lerp(terrainBay[index], T4MSC.T4MtargetColor, Stronger);                           //*0.3f);
                            if (T4MSC.T4MMaskTex2)
                            {
                                terrainBay2[index] = Color.Lerp(terrainBay2[index], T4MSC.T4MtargetColor2, Stronger);                               ///0.3f);
                            }
                        }
                    }
                    if (T4MSC.T4MMaskTex2)
                    {
                        T4MSC.T4MMaskTex2.SetPixels(x, y, width, height, terrainBay2, 0);
                        T4MSC.T4MMaskTex2.Apply();
                    }
                    //这里修改的是Mask贴图也就是权重图,画面上的效果是通过shader读取权重图来显示的
                    // if(UndoObj == null)
                    // {
                    //  UndoObj = new Texture2D[2];
                    //  if(T4MSC.T4MMaskTex2){
                    //      UndoObj[0] = T4MSC.T4MMaskTex;
                    //      UndoObj[1] = T4MSC.T4MMaskTex2;
                    //      T4MSC.T4MMaskTex2.SetPixels(x, y, width,height, terrainBay2, 0);
                    //      T4MSC.T4MMaskTex2.Apply();
                    //  }else{
                    //      UndoObj[0] = T4MSC.T4MMaskTex;
                    //  }
                    // }
                    T4MSC.T4MMaskTex.SetPixels(x, y, width, height, terrainBay, 0);
                    T4MSC.T4MMaskTex.Apply();                     //Unity don't work correctly with this for now
                    //Undo.RecordObjects(UndoObj, "T4MMask");
                    ToggleF = true;
                }
                else if (e.type == EventType.MouseUp && e.alt == false && e.button == 0 && ToggleF == true)
                {
                    T4MSC.SaveTexture();
                    ToggleF = false;
                }
            }            //如果不鼠标没有在范围内
            else
            {
                DestroyImmediate(T4MSC.T4MPreview);
            }
        }
    }