코 루틴에 이상한 문제가 있습니다.유니 코드 코 루틴이 끝까지 실행되지 않음
기본적으로 내가 마우스를 스프라이트 위에 올리면 마우스 포인터가 위에 오도록하여 효과가 있지만, 마우스가 스프라이트를 종료하면 알파 값이 0이 될 때까지 스프라이트가 희미 해지기를 원합니다.
이렇게하려면 마우스가 콜 라이더 위에있을 때마다 모든 프레임이라고하는 OnMouseOver 함수와 달리 내 OnMouseExit 함수에서 호출되는 코 루틴을 사용합니다.
아래 코드는 마우스가 스프라이트를 종료하자마자 스프라이트의 알파가 0으로 바로 설정되어 페이드 아웃하지 않고 이유를 알 수 없기 때문에 내 포스트입니다.
OnMouseExit 함수에서 마지막 줄을 주석 처리했음을 알 수 있습니다. 두 메서드를 모두 사용하여 coroutine을 호출하려고 시도했지만 두 호출 모두 호출되지만 둘 중 하나의 호출에서는 페이드 아웃이 발생하지 않습니다.
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));
}
}
안부
Crouz
아마 보간 시간이 여기에 수정되지 않습니다. 확인할 로그를 기록하십시오. 'Time.time' 대신'Time.deltaTime'을 사용하면 문제가 해결 될 수 있습니다. –
@Gunnar B, deltaTime을 사용하면 코드가 손상되고 Sprite의 알파는 그대로 유지되며 0.0f로 이동하지도 않습니다. – Crouzilles