[Shader]对NGUI的UISprite和UITexture进行裁剪

这篇博客介绍了如何在Unity3D中利用Shader对NGUI的UISprite和UITexture进行裁剪,避免了多次资源复制的需求。作者从创建Shader开始,逐步遇到问题并思考解决方案,分享了实现过程中的经验与思考。
摘要由CSDN通过智能技术生成
由于最近比较忙,所以很多我在其它地方发布的博文都没有同步到这里。我会在后面慢慢重新补回来。对各位关注我博客的读者也表示抱歉!
版权所有,转载须注明出处!
喜欢火影、喜欢Java、喜欢unity3D、喜欢游戏开发的都可以加入木叶村Q群:379076227


0、随便聊

本人真正学习Shader的时间莫过于今年春节在家的两天时间,虽然短短两天。但是已经深深喜欢上Shader。深受其魅力吸引。
但是平常主要做的还是服务端和客户端的开发,偏逻辑向。所以好久也没碰Shader了。
但是昨天在一个群里有人讨论NGUI不能对Sprite进行裁剪。比如把一个方形的,显示成一个圆形的。如下图:


这个应该是挺常见的,或许你会说,美术直接帮你裁成圆的不就可以吗。有时候可以,有时候不行。什么时候不行呢?当你在游戏中有些地方使用方形的,有些地方使用圆形的。这时候就不能让美术帮你裁了。不然不就有两份资源了。

本文读者最好已经知道怎么使用NGUI创建图集,使用它的UISprite和UITexture。


本文编写测试环境为:
系统:Win7 X64引擎:Unity3D V4.3.3

插件:NGUI 3.5.7


1、开始动手

作为一个学习过两天Shader的人,我觉得,这应该难不倒我。因此,我立马在U3D的Project面板中噼里啪啦一阵狂搞。创建一个Shader。



2、编写第一版Shader。

双击我们上面创建的Shader。因为这个是给NGUI用的。然后我就依照NGUI的Shader命名,给我们的Shader命名为:Unlit/Transparent Colored Mask
Shader代码如下:

Shader "Unlit/Transparent Colored Mask"
{
        Properties
        {
                _MainTex ("Base (RGB), Alpha (A)", 2D) = "black" {}
                _Mask ("Mask Alpha (A)", 2D) = "white" {}
        }
        
        SubShader
        {
                LOD 100


                Tags
                {
                        "Queue" = "Transparent"
                        "IgnoreProjector" = "True"
                        "RenderType" = "Transparent"
                }
                
                Cull Off
                Lighting Off
                ZWrite Off
                Fog { Mode Off }
                Offset -1, -1
                Blend SrcAlpha OneMinusSrcAlpha


                Pass
                {
                        CGPROGRAM
                        #pragma vertex vert
                     
NGUI(Newton Game Dynamics Integration)和UGUIUnity UI)是Unity引擎中两种不同的UI系统。它们的主要区别在于设计目的、灵活性和更新时间线上。 1. **NGUI**:最初由Tasharen Entertainment开发,专注于游戏内交互界面,尤其是在2D游戏中表现优秀。它提供了一个简单直观的拖拽式UI编辑器,支持丰富的事件处理和组件系统。NGUIUnity 5之前是一个独立的包,但现在已经整合到Unity的标准库中,作为Legacy UI的一部分。 2. **UGUI**:是UnityUnity 5开始引入的新一代UI系统,是为2D和3D游戏设计的现代UI解决方案。它采用数据驱动的属性系统,提供了更高级的组件和布局选项,以及响应式设计,支持自适应布局。UGUI更加灵活,可以无缝集成到项目中,并且更容易进行性能优化。 **主要区别:** - **技术栈**:NGUI使用的是脚本组件系统,而UGUI是基于数据驱动的,支持更现代化的编程模型。 - **组件和事件**:UGUI提供了更多的组件类型和内置事件系统,使得设计更复杂交互界面更方便。 - **性能**:随着技术的发展,UGUI通常被认为在性能上优于NGUI,尤其是在大型场景和复杂交互时。 - **学习曲线**:对于新手来说,UGUI可能学习起来更快,因为它有直观的可视化编辑工具。 **相关问题**: 1. NGUI适合哪种类型的项目? 2. UGUI的响应式设计是如何工作的? 3. 如何在Unity项目中切换NGUI和UGUI
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值