与玩家健康相关的烟雾不透明度

Smoke Opacity Relative to Player Health

我有一个发射烟雾的粒子系统。我试图根据玩家的健康状况制作烟雾的表观厚度或暗度。为此,我将相对车辆损坏(0 到 100)应用于粒子系统起始颜色的 alpha。即使我将玩家伤害除以某个数字(6 是下面的片段使用的数字),烟雾的黑暗也超出了我的预期。例如,30 的 alpha 看起来和 255 一样暗。有什么想法吗?更好的方法吗?

var smokeColor = smokeParticles.startColor;
float smokeAlpha = (255 / 100) * (vehicleDamage / 6);
if (smokeAlpha > 255)
{
    smokeAlpha = 255;
}

print("smoke alpha " + smokeAlpha.ToString());
var newcolor = new Color(smokeColor.r, smokeColor.g, smokeColor.b, smokeAlpha);
smokeParticles.startColor = newcolor;

您正在将 255 或大于 1f 的值传递给需要 0f1f 值的参数。这就是为什么它不起作用。 1f 是完全不透明的,而 0 的 alpha 是完全透明的。使 smokeAlpha 成为 0f1f 之间的值,然后将其传递给您的新 Color 然后它应该可以工作。

您的 smokeColor.rsmokeColor.gsmokeColor.b 看起来不错,因为您是从 smokeParticles 变量中获取它们,并且您没有像修改方式那样修改它们alpha 变量(smokeAlpha).

如果您确实希望 smokeAlpha 变量使用 0255 的值范围,那么您必须将最终值除以 255

var smokeColor = smokeParticles.startColor;
float smokeAlpha = (255 / 100) * (vehicleDamage / 6);
if (smokeAlpha > 255)
{
    smokeAlpha = 255;
}

smokeAlpha = smokeAlpha / 255f; //Add this

print("smoke alpha " + smokeAlpha.ToString());
var newcolor = new Color(smokeColor.r, smokeColor.g, smokeColor.b, smokeAlpha);
smokeParticles.startColor = newcolor;