2016-08-30 83 views
0

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

的可能的复制[从RGB颜色不正确统一C#(http://stackoverflow.com/questions/38899817/colors-from-rgb-are-not-correct-unity-c-sharp) – Serlite

回答

1

你传入255或值是超过1f给需要0f1f值的参数。这就是为什么它不起作用。 1f是完全不透明的,而0的alpha是完全透明的。使smokeAlpha之间的值介于0f1f之间,然后将其传递给您的新颜色,然后它应该工作。

smokeColor.rsmokeColor.gsmokeColor.b,因为你是从smokeParticles可变让他们和你是不是修改它们就像你正在修改的阿尔法变量(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; 
+1

是的......正是我错过了。谢谢。 – Roger