Unity代码分享——一个快速显示所有Sprite为Image_icon的帮助类

Posted avi9111

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity代码分享——一个快速显示所有Sprite为Image_icon的帮助类相关的知识,希望对你有一定的参考价值。

第一版,后面肯定会改的

改版二:。。。

using UnityEngine;
using UnityEngine.UI;
#if UNITY_EDITOR
//TODO:快速变化
#endif
/// <summary>
/// 加载所有小图UI到场景中,可做压测用,也可以体验ugui的overdraw
/// </summary>
public class LoadAllSpriteSource : MonoBehaviour
{
    //需要两个变量,rootCanvase + 资源(可以是读表,ScriptableObject, 预制体Ref,需要改)
    public GameObject spriteSource;
    public Canvas canva;
    int offsetX = 50;//Sprite的平均尺寸,一般icon 也可能很小10 * 10,这里取平均
    int offsetY = 50;
    void Start()
    {
        var inst = Instantiate(spriteSource);
        //SpriteSource.Inst.Find()
        SpriteSource ss = inst.GetComponent<SpriteSource>();

        for (int i = 0; i < ss.m_Objects.Count; i++)
        {
            //TODO:如果你的项目资源很多,几千个?要考虑加一个数量条件,跳出循环
            int x = i / 20;//好像是很简单的list,转 x-y 格子;只是随便用,所以没考虑0-1问题;
            int y = i % 20;
            Sprite sp = ss.m_Objects[i] as Sprite;
            var newUi = new GameObject();
            newUi.transform.SetParent(canva.transform,false);
            var img = newUi.AddComponent<Image>();
            img.sprite = sp;
            newUi.transform.position = newUi.transform.position + new Vector3(x * offsetX, y * offsetY,0);//2D ui还是xy就好了,但若想做overdraw压测,只要改成xz,y轴不偏移则明显看到效果
        }
    }
    //TODO:自创建测试场景
    public void CreateScene()
    {
        
    }
}
using UnityEngine;
using UnityEngine.UI;
#if UNITY_EDITOR
//TODO:快速变化
#endif
/// <summary>
/// 加载所有小图UI到场景中,可做压测用,也可以体验ugui的overdraw
/// </summary>
public class LoadAllSpriteSource : MonoBehaviour
{
    //需要两个变量,rootCanvase + 资源(可以是读表,ScriptableObject, 预制体Ref,需要改)
    public GameObject spriteSource;
    public Canvas canva;
    int offsetX = 50;//Sprite的平均尺寸,一般icon 也可能很小10 * 10,这里取平均
    int offsetY = 50;
    void Start()
    {
        var inst = Instantiate(spriteSource);
        //SpriteSource.Inst.Find()
        SpriteSource ss = inst.GetComponent<SpriteSource>();

        for (int i = 0; i < ss.m_Objects.Count; i++)
        {
            //TODO:如果你的项目资源很多,几千个?要考虑加一个数量条件,跳出循环
            int x = i / 20;//好像是很简单的list,转 x-y 格子;只是随便用,所以没考虑0-1问题;
            int y = i % 20;
            Sprite sp = ss.m_Objects[i] as Sprite;
            var newUi = new GameObject();
            newUi.transform.SetParent(canva.transform,false);
            var img = newUi.AddComponent<Image>();
            img.sprite = sp;
            newUi.transform.position = newUi.transform.position + new Vector3(x * offsetX, y * offsetY,0);//2D ui还是xy就好了,但若想做overdraw压测,只要改成xz,y轴不偏移则明显看到效果
        }
    }
    //TODO:自创建测试场景
    public void CreateScene()
    {
        
    }
}

以上是关于Unity代码分享——一个快速显示所有Sprite为Image_icon的帮助类的主要内容,如果未能解决你的问题,请参考以下文章

Unity2.5D Sprite层级显示遮挡问题处理

100个 Unity实用技能 | Unity中自定义 2D Sprite 精灵图显示顺序

100个 Unity实用技能 | Unity中自定义 2D Sprite 精灵图显示顺序

unity sprite pivot 怎么用代码 动态修改

Unity学习笔记:Sprite切割图片及使用

Unity2D 为啥sprite在scene中显示而game界面中没有?