IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> Unity中关于Outline和Shadow同时赋值颜色的问题 -> 正文阅读

[游戏开发]Unity中关于Outline和Shadow同时赋值颜色的问题

UGUI中同时赋值Outline和Shadow时出现异常

发现问题

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

问题复现

首先,是常规的Text控件挂Outline和Shadow脚本,如下图。
注意顺序:Outline在上,Shadow在下
这里也提前标注下,Outline在上,Shadow在下。那么测试代码如下:
分别对描边与阴影进行颜色赋值
结果如下图:
只有Outline进行了颜色变化,而且还是错误的颜色赋值,Shadow无变化
这里就有点奇怪,那如果我们更换下代码的赋值顺序呢?
将阴影和描边的颜色赋值顺序调换
那么结果如下图:
更换赋值顺序后运行结果
这样看来好像是跟顺序有那么点关系了。本质上好像是获取的outline变量和shadow变量是同一个,就是结果中的Outline,每次颜色赋值都是在对它进行修改。

问题探究

既然测试结果是这样,只能去看下Outline和Shadow的实现方式了。如下图:
Outline实现
这样一看就比较清晰了,原来Outline是继承自Shadow。与此同时,effectColor的实现也是在父类Shadow中,如下图:
Shadow实现
这样就很好理解了,当我们获取Outline时,得到的是Outline,再次获取Shadow时,因为Outline也是继承自Shadow,那么获取的同样也就是Outline这个子类了。

问题解决

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

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

思考延伸

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

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-12-10 11:22:48  更:2021-12-10 11:23:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 21:31:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码