2016-08-30 28 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