55 lines
1.8 KiB
C#
55 lines
1.8 KiB
C#
using UnityEngine;
|
||
using System.Collections;
|
||
|
||
// アタッチしたSprite Rendererの色を操作してフェードアウトさせるスクリプト
|
||
[RequireComponent(typeof(SpriteRenderer))]
|
||
public class FadeOutSprite : MonoBehaviour
|
||
{
|
||
private SpriteRenderer spriteRenderer;
|
||
public float fadeDuration = 1.0f; // 消えるまでの時間(秒)
|
||
public float startDelay = 0.5f; // 表示してからフェードを開始するまでの待ち時間(秒)
|
||
|
||
private void Awake()
|
||
{
|
||
spriteRenderer = GetComponent<SpriteRenderer>();
|
||
}
|
||
|
||
private void OnEnable()
|
||
{
|
||
// オブジェクトが有効になったときにフェードアニメーションを開始
|
||
StartCoroutine(FadeOutCoroutine());
|
||
}
|
||
|
||
private IEnumerator FadeOutCoroutine()
|
||
{
|
||
// 1. 最初は完全に表示
|
||
SetAlpha(1f);
|
||
|
||
// 2. 指定時間待機(画像がはっきり見える時間)
|
||
yield return new WaitForSeconds(startDelay);
|
||
|
||
// 3. アルファ値を徐々に減らすフェードアウト
|
||
float timer = 0f;
|
||
Color initialColor = spriteRenderer.color;
|
||
|
||
while (timer < fadeDuration)
|
||
{
|
||
timer += Time.deltaTime;
|
||
// 経過時間に基づいてアルファ値を計算(1 -> 0)
|
||
float alpha = Mathf.Lerp(1f, 0f, timer / fadeDuration);
|
||
SetAlpha(alpha);
|
||
yield return null; // 次のフレームまで待機
|
||
}
|
||
|
||
// 4. 完全に消えたら自身を破棄(再利用しない場合)
|
||
SetAlpha(0f);
|
||
Destroy(gameObject);
|
||
}
|
||
|
||
private void SetAlpha(float alpha)
|
||
{
|
||
Color current = spriteRenderer.color;
|
||
current.a = alpha; // Alpha値を更新
|
||
spriteRenderer.color = current;
|
||
}
|
||
} |