Unity_运行时大图切割成小图

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System;
public class ImageSplice : MonoBehaviour
{
    public List<Sprite> Sprlist;   //存储切出来的图片
    public GameObject ImagePrefab;   //Image的预制体  
    [SerializeField]
    private Texture2D MainTexture;   //要裁切的原图

    private float Image_w;  //图片的宽
    private float Image_h;    //图片的高

    public int Count_row = 5;   //纵向要切多少
    public int Count_col = 4;     //横向要切多少
    private RectTransform Cnavas;   //画布必须要  要用画布计算图片的摆放图片的宽和高
    public Action OffsetEvent;  //图片偏移  绑定图片身上的偏移方法  
    public Action AssemblageEvent;  //绑定图片身上的组合方法


    public GridLayoutGroup _gridLayout;
    private void Start()
    {
        Cnavas = GameObject.Find("Canvas").GetComponent<RectTransform>();
        Sprlist = new List<Sprite>();
        Image_w = MainTexture.width / Count_col;
        Image_h = MainTexture.height / Count_row;

        _gridLayout.constraint = GridLayoutGroup.Constraint.FixedRowCount;
        _gridLayout.constraintCount = Count_row;

        CutTheFigure();
    }
    //裁切图片  
    private void CutTheFigure()
    {
        for (int x = 0; x < Count_row; x++)
        {
            for (int y = 0; y < Count_col; y++)
            {
                //图片的坐标是OpenGl坐标  要裁切的图片   图片的矩形   锚点  
                Sprite cc_spr = Sprite.Create(MainTexture, 
                    new Rect(y * Image_w, MainTexture.height - x * Image_h - Image_h, Image_w, Image_h), 
                    new Vector2(0, 1));
                Sprlist.Add(cc_spr);
            }
        }
        AddImage();
    }
    private void AddImage()
    {
        int index = 0;
        Image_w = Cnavas.rect.width / Count_col;   //给实例化之后的图片重新计算宽高
        Image_h = Cnavas.rect.height / Count_row;
        //_gridLayout.cellSize = new Vector2(Image_w, Image_h);//方法1

        for (int x = 0; x < Count_row; x++)
        {
            for (int y = 0; y < Count_col; y++)
            {
                GameObject _image = Instantiate(ImagePrefab);
                //_image.transform.SetParent(_gridLayout.transform);//方法1
                //方法二
                _image.transform.SetParent(transform);
                _image.GetComponent<RectTransform>().sizeDelta = new Vector2(Image_w, Image_h); //设置实例化之后的图片的宽高
                _image.GetComponent<RectTransform>().pivot = new Vector2(0, 1);  //设置锚点            
                _image.transform.position = new Vector3(y * Image_w, Cnavas.rect.height - x * Image_h, 0); //设置坐标
                _image.GetComponent<Image>().sprite = Sprlist[index++];
            }
        }
    }
}

你可能感兴趣的:(Unity)