栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 游戏开发 > Unity3D

Unity中关于Outline和Shadow同时赋值颜色的问题

Unity3D 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Unity中关于Outline和Shadow同时赋值颜色的问题

UGUI中同时赋值Outline和Shadow时出现异常
  • 发现问题
  • 问题复现
  • 问题探究
  • 问题解决
  • 思考延伸

发现问题

项目中使用UGUI的Text控件时,遇到了根据不同情形变更描边(Outline)和阴影(Shadow)颜色的需求。但是编码中发现了小问题,有时同时赋值一个颜色或者分别赋值不同颜色时,只有Outline颜色变化,Shadow并不变化,问题虽然不大但是觉得有点意思,便做测试探究下问题所在。

问题复现

首先,是常规的Text控件挂Outline和Shadow脚本,如下图。

这里也提前标注下,Outline在上,Shadow在下。那么测试代码如下:

结果如下图:

这里就有点奇怪,那如果我们更换下代码的赋值顺序呢?

那么结果如下图:

这样看来好像是跟顺序有那么点关系了。本质上好像是获取的outline变量和shadow变量是同一个,就是结果中的Outline,每次颜色赋值都是在对它进行修改。

问题探究

既然测试结果是这样,只能去看下Outline和Shadow的实现方式了。如下图:

这样一看就比较清晰了,原来Outline是继承自Shadow。与此同时,effectColor的实现也是在父类Shadow中,如下图:

这样就很好理解了,当我们获取Outline时,得到的是Outline,再次获取Shadow时,因为Outline也是继承自Shadow,那么获取的同样也就是Outline这个子类了。

问题解决

既然洞悉了问题发生的原因,那么解决方案也就显而易见了。上文也提前透漏了顺序问题,那就是我们可以把父类Shadow在编辑器中提前,子类Outline置后,那么当依次获取时,就能分别获取到两个脚本了。实现效果如下图:

这样就能分别对两个脚本颜色进行区别赋值了。

如果就想不在乎编辑顺序,那其实也可以根据类型判断进行赋值。前提是通过GetComponents()获得所有的Shadow类型脚本数组。测试如下图:

思考延伸

通过这个小问题拓展下思路,可能还有一些其他的子类与父类脚本在同一个物体上绑定的情况,那么顺序问题可能同样会导致运行结果的异常,这个就需要在项目实现过程中多加注意了。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/900661.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号