質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

1600閲覧

Unity シーン開始時にフェードアウトがじっこうされない

groggy_egg

総合スコア24

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2020/09/05 01:59

編集2020/09/08 00:35

Unity 2019.4.9f1(64bit)を使用

シーン開始時にフェードアウトを実行したいのですが
エディターのPlayボタンを押した後、
実行完了時のログが表示されるだけでフェードアウト自体が実行されません

フェードインアウトのコードはこちらのFaceCamera2を使用しています。
Inspectorでスライダーを動かしたときはフェードアウトが出来ました。

Fade.cs

C#

1public class Fade : MonoBehaviour 2{ 3 IFade fade; 4 5 void Start () 6 { 7 Init (); 8 fade.Range = cutoutRange; 9 } 10 11 float cutoutRange; 12 13 void Init () 14 { 15 fade = GetComponent<IFade> (); 16 } 17 18 void OnValidate () 19 { 20 Init (); 21 fade.Range = cutoutRange; 22 } 23 24 IEnumerator FadeoutCoroutine (float time, System.Action action) 25 { 26 float endTime = Time.timeSinceLevelLoad + time * (cutoutRange); 27 28 var endFrame = new WaitForEndOfFrame (); 29 30 while (Time.timeSinceLevelLoad <= endTime) { 31 cutoutRange = (endTime - Time.timeSinceLevelLoad) / time; 32 fade.Range = cutoutRange; 33 yield return endFrame; 34 } 35 cutoutRange = 0; 36 fade.Range = cutoutRange; 37 38 if (action != null) { 39 action (); 40 } 41 } 42 43 IEnumerator FadeinCoroutine (float time, System.Action action) 44 { 45 float endTime = Time.timeSinceLevelLoad + time * (1 - cutoutRange); 46 47 var endFrame = new WaitForEndOfFrame (); 48 49 while (Time.timeSinceLevelLoad <= endTime) { 50 cutoutRange = 1 - ((endTime - Time.timeSinceLevelLoad) / time); 51 fade.Range = cutoutRange; 52 yield return endFrame; 53 } 54 cutoutRange = 1; 55 fade.Range = cutoutRange; 56 57 if (action != null) { 58 action (); 59 } 60 } 61 62 public Coroutine FadeOut (float time, System.Action action) 63 { 64 StopAllCoroutines (); 65 return StartCoroutine (FadeoutCoroutine (time, action)); 66 } 67 68 public Coroutine FadeOut (float time) 69 { 70 return FadeOut (time, null); 71 } 72 73 public Coroutine FadeIn (float time, System.Action action) 74 { 75 StopAllCoroutines (); 76 return StartCoroutine (FadeinCoroutine (time, action)); 77 } 78 79 public Coroutine FadeIn (float time) 80 { 81 return FadeIn (time, null); 82 } 83}

フェード用スクリプトFadeCtrl.csと実行用スクリプトUICtrl.csは
同じGameObjectにアタッチして実行しています。

FadeCtrl.cs

C#

1 [SerializeField] Fade fade; 2 public void doFadeOut(float t) 3 { 4 fade.FadeOut(t, () => Debug.Log("EndFadeOut")); 5 }

UICtrl.cs

C#

1 static FadeCtrl fade; 2 bool isFadeOut; 3 4 void Start() 5 { 6 fade = GetComponent<FadeCtrl>(); 7 isFadeOut = false; 8 } 9 void Update() 10 { 11 if (isFadeOut == false) 12 { 13 fade.doFadeOut(1f); 14 isFadeOut = true; 15 } 16 17 }

試しにdoFadeOut()をStart()やupdate()からコルーチンで呼び出してStartCoroutine()したのですができませんでした。
(Start()とupdate()内のStartCoroutine()は片方ずつコメントアウトした状態で実行しました)

C#

1 2 public static IEnumerator startFadeOut(float t) 3 { 4 fade.doFadeOut(t); 5 yield return new WaitForSeconds(t); 6 } 7 8------------------------------------------------- 9 void Start() 10 { 11 //StartCoroutine(startFadeOut(1f)); //フェードアウト 12 } 13------------------------------------------------- 14 void Update() 15 { 16 if (isFadeOut == false) 17 { 18 StartCoroutine(startFadeOut(1f)); //フェードアウト 19 isFadeOut = true; 20 } 21 22 } 23

なぜ動かないのか、どう直せばいいのかわからないのでアドバイスお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

フェードアウト前に暗転状態になっていないことが原因でした。
FadeImageのCutoutRangeを1にしてから実行することで正常に動作しました。

投稿2020/09/09 00:00

groggy_egg

総合スコア24

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問