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,点击是没有效果的,压根弹不出来文本. 下面博主分享一下为动态添加的元素绑定事件的三种方法,网上一般都是两种,我在这里多增加了一种. 事件案例: ...
随机推荐
- DOM API详解
来源于:http://zxc0328.github.io/2016/01/23/learning-dom-part1/ https://zxc0328.github.io/2016/01/26/lea ...
- Tomcat无法访问中文路径的解决办法
来源于:http://sccassiel.blog.51cto.com/5398709/1141821/ 修改tomcat下的conf/server.xml文件下的 <Connector por ...
- HTTP 接口响应数据解析
转自:https://blog.csdn.net/hubanbei2010/article/details/79878567 作为产品线的支撑角色QA/CI/CD等,http api解析是互联网公司中 ...
- 键盘录入, if语句
1.运算符 (1).算数运算符 A:+ - * / % ++ -- 注意:%运算符号取决于被摸数. ++ --的两种用法:1.单独使用 ,都 ...
- CreateDialog 注意事项
CreateDialog创建非模态对话框时 其内部 会发送几条消息例如: WM_INITDIALOG,WM_SETFONT DS_SETFONT , DS_SHELLFONT. 所以如果在另一个Ca ...
- Tex
关于Tex,有许多概念.许多软件.这些软件是做什么的,要解决哪些问题,今日好好总结一下. 就像任何领域一旦引入代数系统,一切都会变得井然有序一样.就像用五行八卦描述事物,事物的规律就变得清晰一样,类比 ...
- iOS 10 的一个重要更新-自定义的通知界面
续上篇,在简单闹钟的例子上,在通知界面上显示图片动画,并用通知关联的按钮更新通知界面.介绍 iOS 10 通知 API 的扩展:自定义通知显示界面. 新框架可以统一处理本地通知和远程推送,同时增加了一 ...
- C++11开发中的Atomic原子操作
C++11开发中的Atomic原子操作 Nicol的博客铭 原文 https://taozj.org/2016/09/C-11%E5%BC%80%E5%8F%91%E4%B8%AD%E7%9A%84 ...
- 使用tmpfs的好处
EBS上超高频率的IO写入 这几天注意到我的EC2机器上有非常大量的IO,导致AWS的总体开销增加了很多.比如9月份的帐单中: I/O requests 120,076,984 IOs ...
- eclipse安装activiti designer
方法一:在线安装(可能因网络等原因安装失败) 打开eclipse,在Help->Install New Software后的弹出窗点击add按钮. 在弹出窗口的文本框里输入一下内容 Name: ...