附近的人
This commit is contained in:
1 parent
725b510748
commit
2fcd9b23fa
94 files changed
+7063
-2007
No files matched your search
@@ -0,0 +1,163 @@
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
namespace Assets.Scenes.Ride.Scripts
|
||||
{
|
||||
[RequireComponent(typeof(Image))]
|
||||
public class GradientBackGround : MonoBehaviour
|
||||
{
|
||||
public enum GradientType
|
||||
{
|
||||
None,
|
||||
Vertical,
|
||||
VerticalDown,
|
||||
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()
|
||||
{
|
||||
//创建Texture2D
|
||||
Vector2Int 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.VerticalDown:
|
||||
for (int y = imageSize.y - 1; y > 0; y--)
|
||||
{
|
||||
Color pixelColor = GetColorByCurve(1.0f * y / imageSize.y);
|
||||
for (int x = imageSize.x - 1; x > 0; 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();
|
||||
//创建Sprite
|
||||
Sprite 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;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user