2017-05-01 9 views
1

Je ne comprends pas très bien ce code donc j'ai du mal à le modifier.Comment faire en sorte que ce script reste plus longtemps jour et nuit?

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 

public class SunScript : MonoBehaviour { 
    public float duration = 1.0F; 
    public Light lt; 
    void Start() { 
     lt = GetComponent<Light>(); 
    } 
    void Update() { 
     float phi = Time.time/duration * 0.1f * Mathf.PI; 
     float amplitude = Mathf.Cos(phi) * 0.5F + 0.5F; 
     lt.intensity = amplitude; 
    } 
} 

Ceci déplace l'intensité de la lumière de haut en bas dans un cycle. Cependant, je voudrais qu'il reste à son plus brillant et son plus faible pendant un moment avant qu'il ne commence à reculer dans l'autre sens. Comment dois-je faire cela?

+0

Can't vous venez inscrease la variable de durée? –

+1

Trouver une ploter de mathématiques en ligne comme [ce] (http://fooplot.com/#W3sidHlwZSI6MCwiZXEiOiJjb3MoeC8xLjAqMC4xKnBpKSowLjUrMC41IiwiY29sb3IiOiIjMDAwMDAwIn0seyJ0eXBlIjoxMDAwLCJ3aW5kb3ciOlsiLTMuNjg3NDk5OTk5OTk5OTk2NCIsIjE2LjYyNDk5OTk5OTk5OTk5IiwiLTYuMDMxMjQ5OTk5OTk5OTk2NCIsIjYuNDY4NzQ5OTk5OTk5OTk2NCJdfV0-) et de mettre votre équation mathématique à l'aide time.time comme paramètre x. Ensuite, modifiez votre équation comme vous le désirez. – Logman

+0

@ Louis-Roch Tessier Je veux seulement augmenter le plus clair et le plus sombre, pas le temps intermédiaire. La durée contrôle le cycle entier. – TrumpetDude

Répondre

1

Qu'en est-il de remplacer Mathf.Cos(phi) l'une des fonctions these au lieu d'un simple cosinus?

En utilisant l'équation au bas de cette page:

float amplitude = Mathf.Sin(Mathf.PI/2f * Mathf.Cos(phi)) * 0.5f + 0.5f; 

Pour la formule avec le terme b, vous pouvez le faire (en utilisant des variables temporaires supplémentaires pour le rendre un peu plus lisible).

float b = // whatever your b parameter is or have this declared as a class field that you can set in the Unity editor 
float cosine = Mathf.Cos(phi); 
float numerator = 1f + (b * b); 
float denominator = 1f + (b * b * cosine * cosine); 
float amplitude = (Mathf.Sqrt(numerator/denominator) * cosine) * 0.5f + 0.5f; 
+0

Cela fera la transition de jour à nuit/nuit en jour plus vite. –

+0

Cela fonctionne mieux que ce que j'avais, mais le graphique ci-dessus (celui avec tous les trucs b^2) semble mieux. Comment pourrais-je convertir cette équation en code C#? – TrumpetDude

+0

J'ai ajouté l'équation b à ma réponse. –

0

Vous pouvez également utiliser l'unité AnimationCurve pour y parvenir:

public class SunScript : MonoBehaviour 
{ 
    public float duration = 1.0F; 
    public AnimationCurve curve; 

    private Light lt; 

    void Start() 
    { 
     lt = GetComponent<Light>(); 
    } 

    void Update() 
    { 
     lt.intensity = curve.Evaluate((Time.time % duration)/duration); 
    } 
} 

Assurez-vous simplement que votre courbe est de à suivant l'axe X et faire les valeurs que vous voulez sur l'axe Y

Hope this helps,