NGUI的UISprite动态染色的一种方法
本文主要参考iwinterice 的 NGUI的UISprite动态染色的一种解决方案 文章。
参考参考,就是既参详又拷贝,-,-|||
相关理论依据,还请去移步 NGUI的UISprite动态染色的一种解决方案 里面去寻找。我这里只有提供一下源码,并对原博文进行了一点点修改,至于修改后的好坏,俺也不知道咯。
首先阐明一下需求,就是几个角色,打怪,扫怪,头像一直blingbling的闪,但是,duang,血量爆掉了,角色挂了,头像就得死灰死灰的样子了。
原博文是去改了UISprite的源码,虽然本人很想去改,但本着不能随意修改源码的原则(因为,你不知道你修改之后对其他人会造成什么影响,而且也为了保持源码的简洁),于是,继承咯
//----------------------------------------------
// NGUI: Next-Gen UI kit
// Copyright © 2011-2015 Tasharen Entertainment
//---------------------------------------------- using UnityEngine;
using System.Collections.Generic; /// <summary>
/// Sprite is a textured element in the UI hierarchy.
/// 可以赋值一个ColorMaterial
/// </summary> [ExecuteInEditMode]
[AddComponentMenu("NGUI/UI/NGUI SpriteExt")]
public class UISpriteExt : UISprite
{
/// <summary>
/// Retrieve the material used by the font.
/// </summary> [HideInInspector][SerializeField]private Material mColorMaterial;
public Material ColorMaterial
{
get { return mColorMaterial; }
set { mColorMaterial = value; }
}
[System.NonSerialized]bool mIsShowColor = false;
public bool IsShowColor
{
get { return mIsShowColor; }
set { mIsShowColor = value; }
}
public override Material material
{
//get { return (mAtlas != null) ? mAtlas.spriteMaterial : null; }
get
{
Material mat = base.material;
if ( mat == null )
{
mat = (mAtlas != null) ? mAtlas.spriteMaterial : null;
} if (mColorMaterial != null && mIsShowColor)
{
ColorMaterial.SetTexture(, mat.GetTexture());
return ColorMaterial;
}
else
{
return mat;
}
} } GameObject GetMostClosePanel(Transform rootTrans)
{
if (rootTrans.GetComponent<UIPanel>() != null)
{
return rootTrans.gameObject;
}
else if (rootTrans.parent == null)
{
return null;
}
else
{
return GetMostClosePanel(rootTrans.parent);
}
} GameObject panelObj = null;
public bool selfRefresh = true; public void RefreshPanel(GameObject go)
{
if (!selfRefresh)
return; if (panelObj == null)
{
panelObj = GetMostClosePanel(go.transform);
} if (panelObj != null)
{
panelObj.GetComponent<UIPanel>().enabled = false;
panelObj.GetComponent<UIPanel>().enabled = true;
go.SetActive(false);
go.SetActive(true);
}
}
}
自古以来,起名字就是个文雅的活,本博只是一个有文化的流氓,所以起的名字也比较流氓(=@__@=)哪
有了基本类,是远远不够的,还需要一个Editor内的类,o(╯□╰)o,比较简单,快来瞅瞅~~
using UnityEngine;
using UnityEditor;
using System.Collections.Generic; /// <summary>
/// Inspector class used to edit UISpriteExts.
/// </summary> [CanEditMultipleObjects]
[CustomEditor(typeof(UISpriteExt), true)]
public class UISpriteExtInspector : UISpriteInspector
{
/// <summary>
/// Draw the atlas and sprite selection fields.
/// </summary> protected override bool ShouldDrawProperties ()
{
base.ShouldDrawProperties(); SerializedProperty wm = NGUIEditorTools.DrawProperty("WMaterial", serializedObject, "mColorMaterial", GUILayout.MinWidth(20f));
if ( wm!= null )
{
Material mColorMaterial = wm.objectReferenceValue as Material;
}
GUILayout.Space(6f); return true;
}
}
用的时候,就是直接将材质球拖到WMaterial内咯,

看,连材质球,都是借用的原博文内的东西。我实在是个懒人。
我还提供了 mIsShowColor 这个变量,用来控制显示。使用的示例代码如下:
// 灰度图像
public void ShowAsGray()
{
spriteIcon.IsShowColor = true;
spriteIcon.RefreshPanel(spriteIcon.gameObject);
}
// 恢复正常图像
public void ShowAsNormal()
{
spriteIcon.IsShowColor = false;
spriteIcon.RefreshPanel(spriteIcon.gameObject);
}
效果图:
是死灰死灰的吧。。。。。。。
后来,被告知,还要去改透明度,就是呃,变灰之后,就需要半透明效果。。。
NGUI的UISprite动态染色的一种方法的更多相关文章
- 在Oracle中执行动态SQL的几种方法
转载:在Oracle中执行动态SQL的几种方法 以下为内容留存: 在Oracle中执行动态SQL的几种方法 在一般的sql操作中,sql语句基本上都是固定的,如:SELECT t.empno,t.en ...
- vue父组件向子组件动态传值的两种方法
在一些项目需求中需要父组件向子组件动态传值,比如我这里的需求是,父组件动态通过axios获取返回的图片url数组然后传给子组件,上传图片的子组件拿到该数组后进行遍历并展示图片,因为有时候获取到的会是空 ...
- java动态代理的两种方法
动态代理,有两种情况,第一种是有接口的情况下,你可以选择为jdk自带的动态代理的方式来编写程序,但你想要为一个实在的类编写动态代理的方式的话,这时候就必须选择一些开源的lib包,如cglib包,同时还 ...
- SpringBoot中使用Spring Data Jpa 实现简单的动态查询的两种方法
软件152 尹以操 首先谢谢大佬的简书文章:http://www.jianshu.com/p/45ad65690e33# 这篇文章中讲的是spring中使用spring data jpa,使用了xml ...
- OC中动态创建可变数组的问题.有一个数组,数组中有13个元素,先将该数组进行分组,每3个元素为一组,分为若干组,最后用一个数组统一管理这些分组.(要动态创建数组).两种方法
<span style="font-size:24px;">//////第一种方法 // NSMutableArray *arr = [NSMutableArray a ...
- Spring data jpa 实现简单动态查询的通用Specification方法
本篇前提: SpringBoot中使用Spring Data Jpa 实现简单的动态查询的两种方法 这篇文章中的第二种方法 实现Specification 这块的方法 只适用于一个对象针对某一个固定字 ...
- unity游戏开发之NGUI的UISprite染色
游戏的UI开发中常常会遇到染色问题.比如button失效变灰的效果,同一个道具通过策划表配的颜色值染上红绿蓝紫等颜色,效果例如以下 最笨最挫的方法当然是让美术多出几个资源图.这种一个缺点是浪费资源,在 ...
- NGUI制作字体的三种方法
主要参考两篇博文: (1).NGUI制作字体的三种方法 (2).使用位图字体工具BMFont从图片生成自定义字体 1.BMFont下载地址 http://www.angelcode.com/produ ...
- Jquery动态添加的元素绑定事件的3种方法
假设我们点击li标签,弹出他的文本,如果是动态添加的li,点击是没有效果的,压根弹不出来文本. 下面博主分享一下为动态添加的元素绑定事件的三种方法,网上一般都是两种,我在这里多增加了一种. 事件案例: ...
随机推荐
- 表的复制——sql语句
SQL Server 复制表结构及数据到新表 select * into 目标表名 from 源表名(要求目标表不存在,因为在插入时会自动创建) 只复制表结构到新表 CREATE TABLE 新表 S ...
- 【DeepLearning】用于几何匹配的卷积神经网络体系结构
[论文标题]Convolutional neural network architecture for geometric matching (2017CVPR) [论文作者]Ignacio Rocc ...
- 【LeetCode】207. Course Schedule (2 solutions)
Course Schedule There are a total of n courses you have to take, labeled from 0 to n - 1. Some cours ...
- IO 多路复用是什么意思?
在同一个线程里面, 通过拨开关的方式,来同时传输多个I/O流, (学过EE的人现在可以站出来义正严辞说这个叫“时分复用”了). 什么,你还没有搞懂“一个请求到来了,nginx使用epoll接收请求的过 ...
- MySQL常见错误代码及代码说明
1005:创建表失败 1006:创建数据库失败 1007:数据库已存在,创建数据库失败<=================可以忽略 1008:数据库不存在,删除数据库失败<======== ...
- HDU 3657 Game (SAP | Dinic | EK 三种算法的比较)
Game Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- Sqlserver大数据量分区表创建
/* 逆向删除对象 DROP PARTITION SCHEME [PS_BasicPolicy2014]; DROP PARTITION FUNCTION [PF_BasicPolicy2014]; ...
- 【ASP.NET】ASP.NET如何发布Web项目
1.右击需要发布的项目,选择 属性>应用程序 在目标框架中选择.NET的版本,选择的版本的要本机安装的版本相符合,通常可以在“C:\Windows\Microsoft.NET\Framework ...
- Intellij使用-- 导入Eclipse的代码格式化文件
目录[-] 方法 安装插件: 配置插件: 使用插件 测试 对于一个团队来说,使用统一的代码格式是非常重要的,否则在使用版本控制工具时,会出现大量的冲突.在Eclipse里,我们可以通过一些xml来进行 ...
- easyui-linkbutton 设置和获取text文本
<a id="butTransagt" href="#" class="easyui-linkbutton" icon=" ...