精灵颜色随着距离的增加而变化
Sprites color changes as the distance increases
我正在寻找以下场景背后的编程逻辑:我正在尝试将精灵的颜色从蓝色更改为红色,因为它们离 space 上的特定点越来越远.
所以,当精灵距离屏幕中的特定点更远时,它们的 SprriteRenderer 的颜色应该相应地改变。
这是我现在所做的:
if (distanceBetweemCenterAndSprites > 10.0F)
{
sprites[pos]
.GetComponentInChildren<SpriteRenderer>()
.color = new Color(1.0F, 0.0F, 0.0F);
}
代码只是计算中心(点)和精灵之间的距离。如果距离 > 10.0F,所有精灵的颜色都会变成红色。我想要的是颜色的渐进变化(从蓝色 -> 红色),但我似乎找不到这样做的逻辑。
public class ColorShifter : MonoBehaviour
{
public float MinDistance = 1f;
public float MaxDistance = 10f;
public Transform Target;
protected SpriteRenderer SpriteRenderer;
protected void Awake()
{
SpriteRenderer = GetComponent<SpriteRenderer>();
}
protected void Update()
{
var distance = Vector3.Distance(transform.position, Target.transform.position);
var ratio = Mathf.Clamp01((distance - MinDistance) / (MaxDistance - MinDistance));
var inverseRatio = 1f - ratio;
SpriteRenderer.color = new Color(ratio * ratio, 0f, inverseRatio * inverseRatio);
}
}
将此脚本分配给精灵,不要忘记设置 Target
。
这是一个基本的颜色插值。根据您想深入的深度,这个主题可能会变得非常困难。如果您认为这还不够,请搜索颜色插值技术。但我希望这段代码能提供一些想法。
我正在寻找以下场景背后的编程逻辑:我正在尝试将精灵的颜色从蓝色更改为红色,因为它们离 space 上的特定点越来越远.
所以,当精灵距离屏幕中的特定点更远时,它们的 SprriteRenderer 的颜色应该相应地改变。
这是我现在所做的:
if (distanceBetweemCenterAndSprites > 10.0F)
{
sprites[pos]
.GetComponentInChildren<SpriteRenderer>()
.color = new Color(1.0F, 0.0F, 0.0F);
}
代码只是计算中心(点)和精灵之间的距离。如果距离 > 10.0F,所有精灵的颜色都会变成红色。我想要的是颜色的渐进变化(从蓝色 -> 红色),但我似乎找不到这样做的逻辑。
public class ColorShifter : MonoBehaviour
{
public float MinDistance = 1f;
public float MaxDistance = 10f;
public Transform Target;
protected SpriteRenderer SpriteRenderer;
protected void Awake()
{
SpriteRenderer = GetComponent<SpriteRenderer>();
}
protected void Update()
{
var distance = Vector3.Distance(transform.position, Target.transform.position);
var ratio = Mathf.Clamp01((distance - MinDistance) / (MaxDistance - MinDistance));
var inverseRatio = 1f - ratio;
SpriteRenderer.color = new Color(ratio * ratio, 0f, inverseRatio * inverseRatio);
}
}
将此脚本分配给精灵,不要忘记设置 Target
。
这是一个基本的颜色插值。根据您想深入的深度,这个主题可能会变得非常困难。如果您认为这还不够,请搜索颜色插值技术。但我希望这段代码能提供一些想法。