相对于玩家健康的烟雾不透明度

时间:2016-08-30 23:37:46

标签: c# unity3d particle-system

我有一个发出烟雾的粒子系统。我试图使烟雾的明显厚度或黑暗相对于玩家的健康状况。为此,我将相对车辆损坏(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;

1 个答案:

答案 0 :(得分:1)

您正在将255或超过1f的值传递给期望0f1f值的参数。这就是它不起作用的原因。 1f完全不透明,0的alpha完全透明。将smokeAlpha设置为0f1f之间的值,然后将其传递给新颜色,然后它就可以正常工作。

您的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;