制作UI的过程中,为了节省资源,对称的图一般美术切一半给我们

手动拼图 有时会出现拼接处出现裂缝或重叠

调整大小时也不方便 得一块一块调整

所以就用BaseMeshEffect 的ModifyMesh写了一个脚本

效果是

这样调整这种拼接的UI会方便一些

using UnityEngine;

using System.Collections.Generic;
using UnityEngine.UI; [AddComponentMenu("UI/Effects/TestImageGhost")]
public class TestImageGhost : BaseMeshEffect
{
    public enum Type
    {
        Double,
        Quad,
    }     [SerializeField]
    private Type m_type = Type.Double;     [SerializeField]
    private bool m_UseGraphicAlpha = true;     private Vector2 xy;     public Type GhostType
    {
        get { return m_type; }
        set
        {
            if (m_type == value)
                return;
            m_type = value;             if (graphic != null)
                graphic.SetVerticesDirty();
        }
    } #if UNITY_EDITOR
    protected override void OnValidate()
    {
        xy = this.GetComponent<RectTransform>().sizeDelta;
        base.OnValidate();
        if (graphic != null)
            graphic.SetVerticesDirty();
    }
#endif
    protected override void OnEnable()
    {
        base.OnEnable();
        if (graphic != null)
            graphic.SetVerticesDirty();
        xy = this.GetComponent<RectTransform>().sizeDelta;
        Debug.Log("dfsdf");
    }     public bool useGraphicAlpha
    {
        get { return m_UseGraphicAlpha; }
        set
        {
            m_UseGraphicAlpha = value;
            if (graphic != null)
                graphic.SetVerticesDirty();
        }
    }     protected void ApplyGhostDouble(List<UIVertex> verts, int start, int end, float x1, float y1, float x2, float y2,bool self = false)
    {
        UIVertex vt;         var neededCpacity = verts.Count * ;
        if (verts.Capacity < neededCpacity)
            verts.Capacity = neededCpacity;         for (int i = start; i < end; i++)
        {
            vt = verts[i];
            if(!self)
                verts.Add(vt);//添加一遍mesh             Vector3 v = vt.position;
            int offset = i % ;
            switch (offset)
            {
                case :
                case :
                case : v.x += x1; break;
                case :
                case :
                case : v.x += x2; break;
            }
            switch (offset)
            {
                case :
                case :
                case : v.y += y1; break;
                case :
                case :
                case : v.y += y2; break;
            }             vt.position = v;
            verts[i] = vt;
        }
    }     protected void ApplyGhost(List<UIVertex> verts, int start, int end)
    {
        if (m_type == Type.Double)
        {
            var neededCpacity = verts.Count * ;
            if (verts.Capacity < neededCpacity)
                verts.Capacity = neededCpacity;
            ApplyGhostDouble(verts, start, end, , , -xy.x / ,);
            start = end;
            end = verts.Count;
            ApplyGhostDouble(verts, start, end, xy.x, , -xy.x / , ,true);
        }
        else
        {
            var neededCpacity = verts.Count * ;
            if (verts.Capacity < neededCpacity)
                verts.Capacity = neededCpacity;
            start = ;
            end = verts.Count;
            ApplyGhostDouble(verts, start, end,  , , -xy.x / , xy.y / );
            start = end;
            end = verts.Count;
            ApplyGhostDouble(verts, start, end, xy.x ,, -xy.x / , xy.y / );
            start = end;
            end = verts.Count;
            ApplyGhostDouble(verts, start, end, , -xy.y, -xy.x / , xy.y / );
            start = end;
            end = verts.Count;
            ApplyGhostDouble(verts, start, end, xy.x, -xy.y, -xy.x / , xy.y / , true);
        }
    }     public override void ModifyMesh(VertexHelper vh)
    {
        if (!IsActive())
            return;
        xy = GetComponent<RectTransform>().sizeDelta;         List<UIVertex> output = new List<UIVertex>();
        vh.GetUIVertexStream(output);
        ApplyGhost(output, , output.Count);
        vh.Clear();
        vh.AddUIVertexTriangleStream(output);
    }
}

Unity UGUI 图片 轴对称效果 减少资源的更多相关文章

  1. Unity UGUI在鼠标位置不同时 图片浮动效果

    /// <summary> /// 在鼠标位置不同时 图片浮动效果 /// </summary> public class TiltWindow : MonoBehaviour ...

  2. Unity Shader 效果(1) :图片流光效果

    很多游戏Logo中可以看到这种流光效果,一般的实现方案就是对带有光条的图片uv根据时间进行移动,然后和原图就行叠加实现,不过实现过程中稍稍有点需要注意的地方.之前考虑过风宇冲的实现方式,但是考虑到sh ...

  3. [Unity UGUI]ScrollRect效果大全

    UGUI各种优化效果 本文所实现的UGUI效果需求如下: - 支持缩放滑动效果 - 支持动态缩放循环加载 - 支持大数据固定Item复用加载 - 支持不用Mask遮罩无限循环加载 - 支持Object ...

  4. Unity UGUI图文混排源码(二)

    Unity UGUI图文混排源码(一):http://blog.csdn.net/qq992817263/article/details/51112304 Unity UGUI图文混排源码(二):ht ...

  5. Unity UGUI图文混排源码(一)

    Unity UGUI图文混排源码(一):http://blog.csdn.net/qq992817263/article/details/51112304 Unity UGUI图文混排源码(二):ht ...

  6. Unity UGUI实现图文混排

    目前在unity实现图文混排的好像都是通过自定义字体然后在文本获取字符的位置,用图片替换掉图片标签,这样对于支持英文来说,并没有什么影响.然后对于中文来说就是一个相当麻烦的事了,毕竟图文混排多用于游戏 ...

  7. Unity UGUI Layout自动排版组件用法介绍

    Unity UGUI布局组件 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享 ...

  8. NGUI和UGUI图片字 艺术字(Bitmap图片转文字)制作方法

    用图片字而不是图片 美术和程序的配合,需要程序能够很快抓住问题重点并提出解决方案.美术出的图片字比我们使用的字体更好好看,那么是否要一个个图片去拼成数字呢? NGUI创建图片字 准备材料 美术提供的数 ...

  9. js鼠标滚轮滚动图片切换效果

    效果体验网址:http://keleyi.com/keleyi/phtml/image/12.htm HTML文件代码: <!DOCTYPE html PUBLIC "-//W3C// ...

随机推荐

  1. 理解 ES6 Generator-next()方法

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. D - 湫湫系列故事——减肥记II

    虽然制定了减肥食谱,但是湫湫显然克制不住吃货的本能,根本没有按照食谱行动! 于是,结果显而易见… 但是没有什么能难倒高智商美女湫湫的,她决定另寻对策——吃没关系,咱吃进去再运动运动消耗掉不就好了? 湫 ...

  3. ABAP术语-Function Group

    Function Group 原文:http://www.cnblogs.com/qiangsheng/archive/2008/02/13/1067699.html Group of logical ...

  4. thinkphp验证码实现。

    作为我大天朝的程序员,如果不会点thinkphp框架确实有点说不过去了(虽然作为菜鸟的我才入坑没几个月).不过不会也没关系,很简单的一个php框架.今天为大家介绍的是thinkphp如何实现验证码的功 ...

  5. YII2.0学习二 安装adminlte 后台模板

    控制台切换到安装目录wwwroot/shanghai/ 修改一下composer镜像地址:composer 使用中国镜像 运行 composer require dmstr/yii2-adminlte ...

  6. SSM框架搭建步骤

    首先要导入相关的jar包(spring\spring-core\spring-jdbc\spring-aop\spring-context\spring-webmvc\junit\commons-la ...

  7. Java --本地提交MapReduce作业至集群☞实现 Word Count

    还是那句话,看别人写的的总是觉得心累,代码一贴,一打包,扔到Hadoop上跑一遍就完事了????写个测试样例程序(MapReduce中的Hello World)还要这么麻烦!!!?,还本地打Jar包, ...

  8. uva 540 - Team Queue(插队队列)

    首发:https://mp.csdn.net/mdeditor/80294426 例题5-6 团体队列(Team Queue,UVa540) 有t个团队的人正在排一个长队.每次新来一个人时,如果他有队 ...

  9. UVA11988 Broken Keyboard (a.k.a. Beiju Text)【数组模拟链表】

    参考:https://blog.csdn.net/lianai911/article/details/41831645 #include <iostream> #include <c ...

  10. PHP.38-TP框架商城应用实例-后台14-商品管理-商品扩展分类的删除、修改

    商品分类删除 1.删除商品时,根据商品id删除扩展分类表数据 商品扩展分类修改 1.在控制器GoodsController.class.php/edit()中根据商品id取出对应的所有扩展分类 2.在 ...