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

问题描述:

我在寻找下列场景背后的编程逻辑:我试图从蓝色 - >红色更改精灵的颜色,因为它们越来越远离特定点空间。随着距离的增加,精灵的颜色发生变化

因此,由于Sprite和距离屏幕某个特定点的距离更远,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

这是一个基本的颜色插值。取决于你想要潜水的深度,这个话题会变得非常困难。如果您认为它不够用,请搜索色彩插值技术。但我希望这个代码给出一些想法。

+0

非常感谢。有用! – Daqs 2015-04-05 19:53:56