私はコルーチンに奇妙な問題があります。ユニティコルーチンが最後まで実行されていません
基本的に私はスプライト上にマウスを置くとマウスポインタが上にある限りフェードイン/フェードアウトしますが、これはうまくいきますが、マウスがスプライトを終了すると、そのアルファ値が0になるまでスプライトをフェードアウトさせます
これを行うには、マウスがコライダー上にある間にすべてのフレームと呼ばれるOnMouseOver関数とは異なり、私は自分のOnMouseExit関数で呼び出されるコルーチンを使用します。
以下のコードは、私が使用しているものですが、マウスがスプライトを終了するとすぐに、スプライトのアルファが0に設定されます。フェードアウトせずに、理由はわかりません。
最後の行はコメントアウトされていますが、私は両方のメソッドを使ってコルーチンを呼び出そうとしましたが、どちらの呼び出しも呼び出されますが、どちらの呼び出しでもフェードアウトは発生しません。
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を使用するとコードが壊れてしまい、スプライトのアルファがそのまま残ってしまうことがあります。 – Crouzilles