Unity 图片切割九宫格

 将图片一张图切割成多个小图,不仅仅是九宫格

效果如图所示

我这里直接把切割后的图片付给了Button

被切割的图片属性要做一下设置

脚本如下: 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class SixImage : MonoBehaviour
{

    //小图的宽和高
    public int m_iMinWidth;
    public int m_iMinHeight;
    //一行有多少个小图
    public int m_iMinPicRowCount = 3;
    //一列有多少个小图
    public int m_iMinPicColumnCount = 3;
    //需要切割的大图
    public Texture2D m_texPlayer;
    //小图数组
    private Texture2D[,] m_texPlayers;

    //切割后的图片
    public Transform transforms;

    void Start()
    {
        m_iMinPicRowCount = 3;
        m_iMinPicColumnCount = 3;
        m_texPlayers = new Texture2D[m_iMinPicRowCount, m_iMinPicColumnCount];

    }

    // Update is called once per frame
    void Update()
    {

    }

    /// <summary>
    /// 切图
    /// </summary>
    /// <param name="i"></param>
    /// <param name="j"></param>
    //切图
    public void DePackTexture(int i, int j)
    {
        //通过大图宽高计算出每次切图的大小
        m_iMinHeight = m_texPlayer.height / m_iMinPicColumnCount;
        m_iMinWidth = m_texPlayer.width / m_iMinPicRowCount;

        int cur_x = i * m_iMinWidth;
        int cur_y = j * m_iMinHeight;
        Texture2D newTexture = new Texture2D(m_iMinWidth, m_iMinHeight);
        for (int m = cur_y; m < cur_y + m_iMinHeight; m++)
        {
            for (int n = cur_x; n < cur_x + m_iMinWidth; n++)
            {
                //核心 通过从大图拿到的像素点赋值给小图
                newTexture.SetPixel(n - cur_x, m - cur_y, m_texPlayer.GetPixel(n, m));
            }
        }
        //Apply一下 更新贴图
        newTexture.Apply();
        //储存到数组
        m_texPlayers[i, j] = newTexture;

    }

    public void button() 
    {
        //切割图片
        for (int i = 0; i < m_iMinPicRowCount; i++)
        {
            for (int j = 0; j < m_iMinPicColumnCount; j++)
            {
                DePackTexture(i, j);
            }
        }


        
        for (int i = 2; i >= 0; i--)
        {
            for (int j= 0; j < 3; j++)
            {
                
                Sprite sprite = Sprite.Create(m_texPlayers[j, i], new Rect(0, 0, m_texPlayers[i, j].width, m_texPlayers[i, j].height), Vector2.zero);
                GameObject go = Resources.Load<GameObject>("Image");
                GameObject g = Instantiate(go);
                g.GetComponent<Image>().sprite = sprite;
                g.transform.SetParent(transforms);

            }
        }


    }
   
}
发布了22 篇原创文章 · 获赞 6 · 访问量 1602

猜你喜欢

转载自blog.csdn.net/li1214661543/article/details/105437955