2017-12-02 9 views
0

私は1秒間に黒から青までの2色の間で遷移しようとしていますが、それは正しいとは言えません。現在、ボタンをクリックすると、色は黒のままで、決して青に変わりません。修正する必要があるのは何ですか?ありがとうございました!2色の間でのLerping

private Color startColor = Color.black; 
     private Color endColor = new Color(0.0f, 0.71f, 1.0f, 1.0f); 
     private float duration = 1.0F; 

     void OnButtonClick() 
     { 
      AppData.SelectedPageConfig = Page ; 
      AnalyticsWrapper.CustomEvent ("SelectPicture", new Dictionary<string, object> { 
       { "PictureName", Page.name }   
      }) ; 

      StartCoroutine(DoChangeColor()); 
      StartCoroutine(DoChangeSceneDelay()); 
     } 

     IEnumerator DoChangeColor() 
     { 
      float lerp = Mathf.PingPong(Time.deltaTime, duration)/duration; 

      transform.Find("Creature Color Crop").transform.Find("Creature Image").GetComponent<Image>().color = Color.Lerp(startColor, endColor, lerp); 

      yield return new WaitForEndOfFrame(); 
     } 

     IEnumerator DoChangeSceneDelay() 
     { 
      yield return new WaitForSeconds(2); 
      SceneManager.LoadScene("ColoringBook_ColoringScreen"); 
     } 
+0

の両方が一度だけ実行されている、あなたはそれが最終的な色に達しているかどうかをチェックDoChangeColor() ''内部ループ(と繰り返しを持っている必要があります色が変わるまで変わる) – UnholySheep

答えて

2

だけrotatingまたは時間をかけてGameObjecssを移動するように、XXXLerp機能はまだ同じように機能します。 lerpの仕組みを理解するには、それを読む価値があります。変更する唯一のものはQuaternion.LerpColor.Lerpです。

bool changingColor = false; 

IEnumerator lerpColor(Image targetImage, Color fromColor, Color toColor, float duration) 
{ 
    if (changingColor) 
    { 
     yield break; 
    } 
    changingColor = true; 
    float counter = 0; 

    while (counter < duration) 
    { 
     counter += Time.deltaTime; 

     float colorTime = counter/duration; 
     Debug.Log(colorTime); 

     //Change color 
     targetImage.color = Color.Lerp(fromColor, toColor, counter/duration); 
     //Wait for a frame 
     yield return null; 
    } 
    changingColor = false; 
} 

使用:あなたのコルーチンの

Image imageToLerp; 

void Start() 
{ 
    imageToLerp = transform.Find("Creature Color Crop").transform.Find("Creature Image").GetComponent<Image>(); 
    StartCoroutine(lerpColor(imageToLerp, Color.black, Color.blue, 1f)); 
}