随着距离的增加,精灵的颜色会发生变化

时间:2015-04-05 17:07:23

标签: c# colors unity3d sprite

我正在寻找以下场景背后的编程逻辑:我正在尝试从Blue更改精灵的颜色 - >红色因为它们越来越远离特定的太空点。

因此,作为距离屏幕中特定点更远的精灵,其SprriteRenderer的颜色应相应更改。

这就是我现在所做的:

        if (distanceBetweemCenterAndSprites > 10.0F)
        {
            sprites[pos]
               .GetComponentInChildren<SpriteRenderer>()
               .color = new Color(1.0F, 0.0F, 0.0F);
        }

代码只是计算中心(点)和精灵之间的距离。如果距离&gt; 10.0F,所有精灵的颜色变成红色。我想要的是渐进的颜色变化(从蓝色 - >红色),但我似乎找不到这样做的逻辑。

1 个答案:

答案 0 :(得分:1)

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

这是一种基本的颜色插值。根据您想要潜水的深度,这个主题可能变得非常艰难。如果您认为不够,请搜索颜色插值技术。但我希望这段代码能给出一些想法。