【发布时间】:2017-11-20 17:22:09
【问题描述】:
对于一个项目,我需要根据播放器/查看器与它的距离来修改 Unity 中 UI 文本的 alpha 值。如果他比“visibleDistance”更近,它应该是完全可见的/alpha 值为 1。
距离从查看器行为中的 OnTriggerStay(Collider other) 传递到文本的游戏对象上的此函数:
public void UpdateTransparency(float maxDistance, float distance){
maxDistance -= visibleDistance;
float tmp = maxDistance/distance;
tmp = 1/tmp;
text.color = Color.Lerp(text.color, Color.clear, tmp);
}
如果我打印出 tmp,它会给出“正确的外观”值,但文本的颜色没有发生任何变化(文本在 Start 函数中正确分配)。文本呈现在世界空间画布上。
如果有人可以帮助我,那就太好了 :) 提前致谢!
更新:用下面的修改解决方案修复它:
public void UpdateTransparency (Vector3 viewerPos, float maxDistance){
float distanceApart = Vector3.Distance(viewerPos, this.transform.position));
float lerp = mapValue(distanceApart, maxDistance-3f, maxDistance, 0f, 1f);
Color lerpColor = text.color;
lerpColor.a = Mathf.Lerp(1, 0, lerp);
text.color = lerpColor;
}
float mapValue(float mainValue, float inValueMin, float inValueMax, float outValueMin, float outValueMax)
{
return (mainValue - inValueMin) * (outValueMax - outValueMin) / (inValueMax - inValueMin) + outValueMin;
}
谢谢大家。
【问题讨论】:
-
你认为“正确的”价值观是什么? 'tmp' 应该在 0 - 1 的范围内。
-
距离比 visibleDistance 近的时候大于 1,应该没问题吧?如果您介于 maxDistance 和可见距离之间,则值介于 0 和 1 之间,但颜色不会改变。
标签: c# user-interface unity3d colors alpha