NGUI的UISprite动态染色的一种方法
2015-06-11 11:46
597 查看
本文主要参考iwinterice 的 NGUI的UISprite动态染色的一种解决方案 文章。
参考参考,就是既参详又拷贝,-,-|||
相关理论依据,还请去移步 NGUI的UISprite动态染色的一种解决方案 里面去寻找。我这里只有提供一下源码,并对原博文进行了一点点修改,至于修改后的好坏,俺也不知道咯。
首先阐明一下需求,就是几个角色,打怪,扫怪,头像一直blingbling的闪,但是,duang,血量爆掉了,角色挂了,头像就得死灰死灰的样子了。
原博文是去改了UISprite的源码,虽然本人很想去改,但本着不能随意修改源码的原则(因为,你不知道你修改之后对其他人会造成什么影响,而且也为了保持源码的简洁),于是,继承咯
自古以来,起名字就是个文雅的活,本博只是一个有文化的流氓,所以起的名字也比较流氓(=@__@=)哪
有了基本类,是远远不够的,还需要一个Editor内的类,o(╯□╰)o,比较简单,快来瞅瞅~~
用的时候,就是直接将材质球拖到WMaterial内咯,
![](http://images0.cnblogs.com/blog2015/134633/201506/111141003487662.png)
看,连材质球,都是借用的原博文内的东西。我实在是个懒人。
我还提供了 mIsShowColor 这个变量,用来控制显示。使用的示例代码如下:
效果图:
![](http://images0.cnblogs.com/blog2015/134633/201506/111144497384650.png)
![](http://images0.cnblogs.com/blog2015/134633/201506/111145011298468.png)
是死灰死灰的吧。。。。。。。
后来,被告知,还要去改透明度,就是呃,变灰之后,就需要半透明效果。。。
参考参考,就是既参详又拷贝,-,-|||
相关理论依据,还请去移步 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(0, mat.GetTexture(0)); 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内咯,
![](http://images0.cnblogs.com/blog2015/134633/201506/111141003487662.png)
看,连材质球,都是借用的原博文内的东西。我实在是个懒人。
我还提供了 mIsShowColor 这个变量,用来控制显示。使用的示例代码如下:
// 灰度图像 public void ShowAsGray() { spriteIcon.IsShowColor = true; spriteIcon.RefreshPanel(spriteIcon.gameObject); } // 恢复正常图像 public void ShowAsNormal() { spriteIcon.IsShowColor = false; spriteIcon.RefreshPanel(spriteIcon.gameObject); }
效果图:
![](http://images0.cnblogs.com/blog2015/134633/201506/111144497384650.png)
![](http://images0.cnblogs.com/blog2015/134633/201506/111145011298468.png)
是死灰死灰的吧。。。。。。。
后来,被告知,还要去改透明度,就是呃,变灰之后,就需要半透明效果。。。
相关文章推荐
- leetcode--Unique Binary Search Trees
- Android基础系列-----------GUI系统之WindowManagerService
- Android基础系列-----------GUI系统之Android的UI显示概述
- UIAlertView消息文本左对齐操作
- java.sql.SQLException: Incorrect string value
- easyui-ueditor
- [LeetCode] Implement Stack using Queues
- 51nod 1126 求递推序列的第N项 && hdu - 1005 Number Sequence (求周期)
- UI元素状态伪类选择器
- 3 way quick sort
- POJ 1458:Common Subsequence
- POJ 1458:Common Subsequence
- 非常不错的点餐系统应用源码完整版
- leetcode--Unique Binary Search Trees II
- A quick message queue benchmark: ActiveMQ, RabbitMQ, HornetQ, QPID, Apollo
- java 并发编程 AbstractQueuedSynchronizer 加锁和解锁分析
- UITableView的简单介绍和功能
- Null value was assigned to a property of primitive type setter of"原因及解决方
- powerbuilder开发的程序,查询功能中,listview中的属性列重复出现
- 为jenkins的每个build设置description