###前提・実現したいこと
Unity・C#初心者です。
あるスプライトにプレイヤーが接触したらそのスプライトの透明度が変わるコードを書いています。
下記のようなコードで、OnTriggerEnter2Dでフェードアウト・OnTriggerExit2Dでフェードインさせることができました。
しかし、フェードアウト中にOnTriggerExit2Dを呼び出すと思うように動作しませんでした。
nowOpacityという変数を作ってフェード中(Whileの繰り返し処理中)に値を代入、もしフェードアウト中にOnTriggerExit2D(フェードイン)が呼び出されても、0からではなくnowOpacityに代入された値からフェードインを開始する(逆の場合も)ということがしたいのですが、どのように書けばよいのでしょうか。
Unityのバージョンは5.6.1f1
言語はC#
MonoDevelopでスクリプトを書いています。
###該当のソースコード
フェードイン・フェードアウトさせたいスプライトにアタッチしたコードです。
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class SpriteManager : MonoBehaviour { 6 7 public GameObject sprite; 8 public float fadeSpeed = 0.5f; // 分かりやすいようにフェード速度を遅くして確認しました 9 private float nowOpacity; 10 11 IEnumerator FadeOutSprite() { 12 Color spriteColor = sprite.GetComponent<SpriteRenderer>().color; 13 // フェードアウト 14 while(spriteColor.a >= 0) { 15 spriteColor.a -= Time.deltaTime * fadeSpeed; 16 sprite.GetComponent<SpriteRenderer>().color = 17 new Color(spriteColor.r, spriteColor.g, spriteColor.b, spriteColor.a); 18 nowOpacity = spriteColor.a; 19 yield return null; 20 } 21 } 22 23 IEnumerator FadeInSprite() { 24 Color spriteColor = sprite.GetComponent<SpriteRenderer>().color; 25 26 // フェードイン 27 while(spriteColor.a <= 1) { 28 spriteColor.a += Time.deltaTime * fadeSpeed; 29 sprite.GetComponent<SpriteRenderer>().color = 30 new Color(spriteColor.r, spriteColor.g, spriteColor.b, spriteColor.a); 31 nowOpacity = spriteColor.a; 32 yield return null; 33 } 34 } 35 36 void OnTriggerEnter2D () { 37 Color spriteColor = sprite.GetComponent<SpriteRenderer>().color; 38 spriteColor.a = nowOpacity; 39 StartCoroutine(FadeOutSprite()); 40 } 41 42 void OnTriggerExit2D () { 43 Color spriteColor = sprite.GetComponent<SpriteRenderer>().color; 44 spriteColor.a = nowOpacity; 45 StartCoroutine (FadeInSprite ()); 46 } 47}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。