给定一组色值(或者多组色值,每次随机取一组),初始化时创建图片并赋值给UI的Image或3D场景的Sprite。从下/左往上/右,按曲线渐变

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;[RequireComponent(typeof(Image))]
public class BgGradient : MonoBehaviour
{public enum GradientType{None,Vertical,Horizontal,Diagonal}private Image bgImage;[SerializeField, Header("渐变方式")]private GradientType gradientType = GradientType.Vertical;[SerializeField, Header("开始颜色")]private Color startColor = Color.white;[SerializeField, Header("结束颜色")]private Color endColor = Color.black;[SerializeField, Header("渐变曲线(0~1)")]private AnimationCurve gradientCurve = new AnimationCurve(new Keyframe(0,0),new Keyframe(1,1));private void Awake(){bgImage = GetComponent<Image>();}private void Start(){SetGradientColor();}private void Update(){if(Input.GetKeyDown(KeyCode.Alpha1)){gradientType = GradientType.None;SetGradientColor();}if(Input.GetKeyDown(KeyCode.Alpha2)){gradientType = GradientType.Vertical;SetGradientColor();}if(Input.GetKeyDown(KeyCode.Alpha3)){gradientType = GradientType.Horizontal;SetGradientColor();}if(Input.GetKeyDown(KeyCode.Alpha4)){gradientType = GradientType.Diagonal;SetGradientColor();}}private void SetGradientColor(){//创建Texture2DVector2Int imageSize = new Vector2Int(Screen.width,Screen.height);Texture2D texture2D = new Texture2D(imageSize.x,imageSize.y);//遍历像素点switch(gradientType){case GradientType.Vertical:for(int y = 0; y < imageSize.y; y++){Color pixelColor = GetColorByCurve(1.0f * y / imageSize.y);for(int x = 0; x < imageSize.x; x++){texture2D.SetPixel(x,y,pixelColor);}}break;case GradientType.Horizontal:for(int x = 0; x < imageSize.x; x++){Color pixelColor = GetColorByCurve(1.0f * x / imageSize.x);for(int y = 0; y < imageSize.y; y++){texture2D.SetPixel(x,y,pixelColor);}}break;case GradientType.Diagonal:for(int x = 0; x < imageSize.x; x++){for(int y = 0; y < imageSize.y; y++){Color pixelColor = GetColorByCurve(0.5f * x / imageSize.x + 0.5f * y / imageSize.y);texture2D.SetPixel(x,y,pixelColor);}}break;default:for(int x = 0; x < imageSize.x; x++){for(int y = 0; y < imageSize.y; y++){texture2D.SetPixel(x,y,startColor);}}break;}texture2D.Apply();//创建SpriteSprite sprite = Sprite.Create(texture2D,new Rect(0,0,imageSize.x,imageSize.y),new Vector2(0.5f,0.5f));sprite.name = "GradientBg";if(bgImage != null)bgImage.sprite = sprite;}private Color GetColorByCurve(float ratio){float curveValue = gradientCurve.Evaluate(ratio);curveValue = Mathf.Clamp01(curveValue);return Color.Lerp(startColor,endColor,curveValue);}}

      

可以多个颜色渐变···看着不怎么实用···

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;[RequireComponent(typeof(Image))]
public class BgGradientMult : MonoBehaviour
{public enum GradientType{None,Vertical,Horizontal,Diagonal}[System.Serializable]public class GradientColorNode{[Range(0,1)]public float ratio = 0;public Color color = Color.white;public GradientColorNode(float _ratio,Color _color){ratio = _ratio;color = _color;}}private Image bgImage;[SerializeField, Header("渐变方式")]private GradientType gradientType = GradientType.Vertical;[SerializeField, Header("渐变曲线(0~1)")]private AnimationCurve gradientCurve = new AnimationCurve(new Keyframe(0,0),new Keyframe(1,1));[SerializeField, Header("渐变颜色")]private List<GradientColorNode> gradientColorNodeList = new List<GradientColorNode>() { new GradientColorNode(0,Color.white),new GradientColorNode(1,Color.black) };private void Awake(){bgImage = GetComponent<Image>();}private void Start(){SetGradientColor();}private void Update(){if(Input.GetKeyDown(KeyCode.Alpha1)){gradientType = GradientType.None;SetGradientColor();}if(Input.GetKeyDown(KeyCode.Alpha2)){gradientType = GradientType.Vertical;SetGradientColor();}if(Input.GetKeyDown(KeyCode.Alpha3)){gradientType = GradientType.Horizontal;SetGradientColor();}if(Input.GetKeyDown(KeyCode.Alpha4)){gradientType = GradientType.Diagonal;SetGradientColor();}}private void SetGradientColor(){//创建Texture2DVector2Int imageSize = new Vector2Int(Screen.width,Screen.height);Texture2D texture2D = new Texture2D(imageSize.x,imageSize.y);//遍历像素点switch(gradientType){case GradientType.Vertical:for(int y = 0; y < imageSize.y; y++){Color pixelColor = GetColorByCurve(1.0f * y / imageSize.y);for(int x = 0; x < imageSize.x; x++){texture2D.SetPixel(x,y,pixelColor);}}break;case GradientType.Horizontal:for(int x = 0; x < imageSize.x; x++){Color pixelColor = GetColorByCurve(1.0f * x / imageSize.x);for(int y = 0; y < imageSize.y; y++){texture2D.SetPixel(x,y,pixelColor);}}break;case GradientType.Diagonal:for(int x = 0; x < imageSize.x; x++){for(int y = 0; y < imageSize.y; y++){Color pixelColor = GetColorByCurve(0.5f * x / imageSize.x + 0.5f * y / imageSize.y);texture2D.SetPixel(x,y,pixelColor);}}break;default:if(gradientColorNodeList.Count > 0){Color pixelColor = gradientColorNodeList[0].color;for(int x = 0; x < imageSize.x; x++){for(int y = 0; y < imageSize.y; y++){texture2D.SetPixel(x,y,pixelColor);}}}break;}texture2D.Apply();//创建SpriteSprite sprite = Sprite.Create(texture2D,new Rect(0,0,imageSize.x,imageSize.y),new Vector2(0.5f,0.5f));sprite.name = "GradientBg";if(bgImage != null)bgImage.sprite = sprite;}private Color GetColorByCurve(float ratio){for(int i = 1; i < gradientColorNodeList.Count; i++){if(ratio < gradientColorNodeList[i].ratio){float curveValue = (ratio - gradientColorNodeList[i - 1].ratio) / (gradientColorNodeList[i].ratio - gradientColorNodeList[i - 1].ratio);curveValue = gradientCurve.Evaluate(curveValue);return Color.Lerp(gradientColorNodeList[i - 1].color,gradientColorNodeList[i].color,curveValue);}}return Color.white;}}

【Unity】UI或3D场景自动设置渐变色背景相关推荐

  1. Unity UI或3d场景(跟随手机陀螺仪)的晃动效果

    需求 当游戏显示3d场景及其UI的时候.玩家左右晃动手机的时候,UI界面会随之左右偏移.上下晃动的时候,3D场景会随之上下偏移.手机停止晃动的时候,如若偏移的UI或场景,停顿一会后自动恢复到初始默认位 ...

  2. html设置渐变色背景图片,css中渐变色作为背景图来使用总结

    qt中使用样式设置渐变色背景setStyleSheet()函数设置背景的前期是设置的窗口控件有父窗口ui.widget->setStyleSheet("background-color ...

  3. qt 使用样式设置渐变色背景

    qt中使用样式设置渐变色背景 setStyleSheet()函数设置背景的前期是设置的窗口控件有父窗口 ui.widget->setStyleSheet("background-col ...

  4. Android如何设置渐变色背景 渐变shape

    Android如何设置渐变色背景 Android开发过程中,会用到android:backgroud属性来设置背景的颜色,一般情况下我们直接设置一个类似#FFFF0000的值代表是背景颜色,如果想设置 ...

  5. unity像素风3D场景-后处理

    先创建一个C#脚本"PixelateImageEffect",不要再Editor目录下创建C#脚本. 复制如下代码: using System.Collections; using ...

  6. android自定义渐变色,Android如何设置渐变色背景 | 夕辞

    Android开发过程中,会用到android:backgroud属性来设置背景的颜色,一般情况下我们直接设置一个类似#FFFF0000的值代表是背景颜色,如果想设置渐变背景颜色,就需要用到gradi ...

  7. 动态文件、2d、3d、Html设置电脑桌面背景【超实用】

    LivelyWallpaper是一个非常棒的电脑桌面背景设置软件,可用url.html.图片.2d.3d等文件设置为win10桌面背景,且cpu占用极低. 一.下载: 1.https://www.mi ...

  8. Unity UI或3d模型的动画控制(Animation类)

    文章目录 Animation动画控制类 一.动画设置: 二.模型的动作选择: 三.关键方法: 四:实践展示: 五.控制模型移动: Animation动画控制类 在Unity中,我们可以使用2D的Spi ...

  9. Unity基础(三)3D场景搭建

    目录 一.下载新手资源 二.创建基本地形 三.添加场景细节 四,添加水 五,其他 一.下载新手资源 选择窗口->资源商店 点击按钮,打开unity资源商店网站,搜索(Starter Assets ...

最新文章

  1. Python中的标识符有哪些基础原则?
  2. 运维工具SaltStack
  3. QMetaObject::connectSlotsByName: No matching signal for问题的解决方法
  4. 第三节:深度剖析各类数据结构(Array、List、Queue、Stack)及线程安全问题和yeild关键字
  5. usb 键盘码表_键盘鼠标对应码表-delphi键值
  6. ubuntu vscode_17. ubuntu设为服务器+vscode远程开发
  7. VS Code 运行Vue项目
  8. 文件不能超过200k_为什么答题时上传的文件大小不允许
  9. JavaScript通过百度OCR实现图像文字识别及常见错误解释
  10. 计算机自带游戏打不开,win10系统自带游戏打不开的还原步骤
  11. 现有开发语言以及适用范围
  12. C#使用Microsoft.Office.Interop.Word操作word书签位置插入Wingdings 2复选框
  13. UART数据发送和接收(Verilog)
  14. CCR炒币机器人:炒币分三类人
  15. 【非广告】2021 入门级的 Java 程序员学习路线图 1.0
  16. 深圳商报 | 跨境电商大会聚焦跨境收款难题
  17. 火星人敏捷开发手册免费培训 By 火星人陈勇
  18. wpsppt加载项在哪里_《wps表格加载项在哪里》 WPS版的EXCEL中 加载宏和数据分析在哪?...
  19. 庖丁解牛 | 图解 RocketMQ 核心原理
  20. [转]Mysql的HandlerSocket插件

热门文章

  1. 《Multi-Scale Residual Learning-using a Cycle Spinning CNN for Single Image De-Raining》
  2. matlab atem(),非特定人的英文
  3. 一个关于jboss Halting VM的情况处理
  4. win11家庭版如何彻底关闭病毒实时保护
  5. local_policy.jar和US_export_policy.jar资源免费下载
  6. 史记十表-卷十六-秦楚之际月表第四
  7. Unity的UGUI使用Text和Image实现文字下划线
  8. Apple MacPad Pro会是什么样?
  9. 亿道丨三防平板丨工业平板丨比消费类平板好在哪?
  10. 王者荣耀微信登录服务器无反应,王者荣耀微信登不上去怎么办?登陆失败解决方法...