[英]Unity coroutine not running to the end
我對協程有一個奇怪的問題。
基本上,當我將鼠標懸停在一個精靈上時,只要將鼠標指針停留在該精靈上,它就會淡入和淡出,這可以正常工作,但是當鼠標退出該精靈時,我希望該精靈淡出直到其alpha值達到0。
這樣做是因為與在鼠標懸停在對撞機上時每幀調用OnMouseOver函數不同,我在OnMouseExit函數中使用了一個協程。
下面的代碼是我使用的代碼,但是一旦鼠標退出精靈,精靈的alpha會立即設置為0,而不會褪色,我也不知道為什么,因此是我的帖子。
您會注意到在OnMouseExit函數中,最后一行已被注釋掉,我嘗試使用這兩種方法調用協程,兩次都被調用,但是兩次調用都不會發生淡出。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Fader : MonoBehaviour {
public float min_fade_speed;
public float max_fade_speed;
private SpriteRenderer sprite;
private float fade_speed;
// Use this for initialization
void Start () {
fade_speed = Random.Range (min_fade_speed, max_fade_speed);
sprite = GetComponent<SpriteRenderer> ();
reset_color ();
}
void reset_color() {
//Initially transparent
sprite.color = new Color(1, 1, 1, 0.0f);
}
// Update is called once per frame -- currently unused
void Update () {
}
void FadeInAndOut() {
sprite.color = new Color (1, 1, 1, Mathf.SmoothStep (0.0f, 1.0f, Mathf.PingPong(Time.time/fade_speed, 1f)));
}
IEnumerator FadeOut(float alpha_start) {
Debug.Log ("Alpha is: " + alpha_start);
while (sprite.color.a > 0.0f) {
sprite.color = new Color (1, 1, 1, Mathf.SmoothStep (alpha_start, 0.0f, Time.time / fade_speed));
yield return null;
}
}
void onMouseEnter() {
reset_color ();
}
void OnMouseOver() {
FadeInAndOut ();
}
void OnMouseExit() {
float alpha = sprite.color.a;
Debug.Log ("Alpha is: " + alpha);
StartCoroutine ("FadeOut", alpha);
// StartCoroutine(FadeOut(alpha));
}
}
問候
克魯茲
您需要在Coroutine函數中使用一個計數器變量,該變量的計數范圍從0
到fade_speed
。 您可以使用Time.deltaTime
在while
循環中遞增此變量。 當該變量> = fade_speed
,退出while
循環。 要在整個循環中獲得new Color(1, 1, 1, Mathf.Lerp(startingAlpha, 0, counter / fade_speed))
,可以執行new Color(1, 1, 1, Mathf.Lerp(startingAlpha, 0, counter / fade_speed))
您新的FadeOut
功能:
IEnumerator FadeOut(float alpha_start)
{
//This will start decreasing from where it is
float startingAlpha = sprite.color.a;
float counter = 0;
while (counter < fade_speed)
{
counter = counter + Time.deltaTime;
sprite.color = new Color(1, 1, 1, Mathf.Lerp(startingAlpha, 0, counter / fade_speed));
yield return null;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.