Jump to content
Unity Insider Forum

Bloom+LensFlares Intensity per Script erhöhen


unityalphanoob

Recommended Posts

Ich versuche gerade erfolglos die Intensity von dem "BloomAndLensFlares" Script per Script genau nach 40 Sekunden zu erhöhen.

 

So ungefähr sollte es klappen:

function Start () {

BloomAndLensFlares.Intensity = 0;

yield WaitForSeconds (40);

BloomAndLensFlares.Intensity = 20;

}

 

Eigentlich soll die Intensity sich langsam erhöhen und nicht von von einem Frame zum Anderen.

Deshalb sollte ich eigentlich die Update-Function verwenden, aber da kenne ich mich leider noch nicht mit den Zeitverhältnissen aus.

 

Ich denke ihr wisst was ich meine ;)

 

Bitte um Hilfe!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich weiß jetzt nicht wie das mit dem erhöhen funktioniert aber zur Zeit:

 

Das mit dem yield WaitforSeconds funktioniert soweit ich weiß nur in Coroutinen.

 

So wie du es da machst erhöst du die intensity ja plötzlich , aber du willst ja nur ein bisschen jeden Frame oder ?

 

Time.delta Time gibt dir an wieviel Zeit zwischen 2 Frames vergangen ist. Du könntest die Itensity z.B. jeden Frame um diesen Wert erhöhen bis er 20 erreicht hat.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

 

so wie du das jetzt machst wartet er einfach 40 Sekunden und setzt dann die Intensity auf 20. Du musst jeden Frame die Werte aktualisieren.

 

Zum Beispiel kannst du eine Update Funktion schreiben. Dann brauchst du noch eine Variable mit der Zeit bei der du dann jeden Frame Time.deltaTime abziehst. Damit hasst du dann einen Countdown. Sobald die Variable <= 0 ist kannst du mit dem herunterzählen aufhören.

 

Die Instensity bestimmst du dann mit Mathf.Lerp

 

Das könnte so aussehen (ungetestet!):

 

var timer : float; // Achtung ich komme ehr aus der C# Welt, d.h. bin ich mir jetzt nicht sicher ob das so richtig ist.
function Start()
{
   timer = 40.0f;
}
function Update()
{
   if (timer > 0.0f)
    timer -= Time.deltaTime;
   BloomAndLensFlares.Intensity = Mathf.Lerp(0.0f, 20.0f, timer);
}

 

Aber wie gesagt der Code ist ungetestet und enthält möglicherweise Fehler. Ausserdem ist es gut möglich, das ess bessere Wege gibt.

 

MfG Nico

Link zu diesem Kommentar
Auf anderen Seiten teilen

var timer : float; // Achtung ich komme ehr aus der C# Welt, d.h. bin ich mir jetzt nicht sicher ob das so richtig ist.
function Start()
{
timer = 40.0f;
}
function Update()
{
if (timer > 0.0f)
		timer -= Time.deltaTime;
BloomAndLensFlares.Intensity = Mathf.Lerp(0.0f, 20.0f, timer);
}

 

 

Ist so ungefähr das was ich auch meinte.

Aber da sind schon Fehler drin

1. Du zählst runter aber passt dennoch die Intensity jeden Frame an und dimmst bis auf 0

(anstatt nach 40 sekunden zu erhöhen)

2.Zu beginn hat dein timer den Wert 40 und ist somit größer wie der Maximalwert 20

3. Der 3. Wert von Math.Lerp sollte zwischen 0 und 1 liegen

 

Richtiger wäre es (nach meinem Halbwissen);

var timer : float;
var wert : float;
function Start()
{
   timer = 40.0f;
   wert = 0.0f
}
function Update()
{
   if (timer > 0.0f){
	    timer -= Time.deltaTime;
   }
   elseif(wert < 1){
   BloomAndLensFlares.Intensity = Mathf.Lerp(10.0f, 20.0f, wert);
   wert += Time.deltatime;
   }
}

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ist so ungefähr das was ich auch meinte.

Aber da sind schon Fehler drin

1. Du zählst runter aber passt dennoch die Intensity jeden Frame an und dimmst bis auf 0

(anstatt nach 40 sekunden zu erhöhen)

2.Zu beginn hat dein timer den Wert 40 und ist somit größer wie der Maximalwert 20

3. Der 3. Wert von Math.Lerp sollte zwischen 0 und 1 liegen

 

Richtiger wäre es (nach meinem Halbwissen);

var timer : float;
var wert : float;
function Start()
{
timer = 40.0f;
wert = 0.0f
}
function Update()
{
if (timer > 0.0f){
		timer -= Time.deltaTime;
}
elseif(wert < 1){
BloomAndLensFlares.Intensity = Mathf.Lerp(10.0f, 20.0f, wert);
wert += Time.deltatime;
}
}

 

Zuerst einmal danke ;)

 

EDIT: der countdown funktioniert, wen der aber abgelaufen ist passiert irgendwie nix :/

Link zu diesem Kommentar
Auf anderen Seiten teilen

wert ändert sich eigentlich schon aber soweit ich das beurteilen kann fehlt da auch noch mehr.

Kann man BloomAndLensFlares.Intensity einfach so benutzen ?

 

Jetzt läufts. Zumindest läuft der Countdown ab und die Intensity erhöht sich.

Hier das halbwegs laufende Script:

Leider erhöht sich die Intensity schlagartig nachdem der Countdown zu Ende geht.

var timer : float;

var wert : float;

 

function Start()

{

timer = 5.0f;

wert = 0.0f;

}

 

 

function Update()

{

if (timer > 0.0f)

{

timer -= Time.deltaTime;

}

else if(wert < 1)

{

BloomAndLensFlares.bloomIntensity = Mathf.Lerp(10.0f, 20.0f, wert);

wert += Time.deltatime;

}

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...