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

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

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

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

Unity

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

Q&A

解決済

2回答

9401閲覧

Unity-タイトル画面でスタートボタンを押したらフェードアウトしながらシーン遷移したい

izumiasa

総合スコア13

C#

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

Unity

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

0グッド

1クリップ

投稿2019/03/12 17:39

編集2019/03/12 23:06

タイトル画面でスタートボタンを押したらフェードアウトしながらオープニングへシーン遷移したいのですが、上手くいきません。

スタートボタンを押すと瞬時に消えて次のシーンが瞬時に現れる状態です。
フェードアウトが終わってから次のシーンが実行されるようにしたいです。
いろんなところを参考にし試してみたのですが、どれも出来ませんでした。

何かいい方法はないでしょうか。
よろしくお願いいたします。

イメージ説明

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; //パネルのイメージを操作するのに必要 using UnityEngine.SceneManagement; public class FadeController : MonoBehaviour { float fadeSpeed = 0.02f; //透明度が変わるスピードを管理 float red, green, blue, alfa; //パネルの色、不透明度を管理 public bool isFadeOut = false; //フェードアウト処理の開始、完了を管理するフラグ public bool isFadeIn = false; //フェードイン処理の開始、完了を管理するフラグ Image fadeImage; //透明度を変更するパネルのイメージ void Start() { fadeImage = GetComponent<Image>(); red = fadeImage.color.r; green = fadeImage.color.g; blue = fadeImage.color.b; alfa = fadeImage.color.a; } void Update() { if (isFadeIn) { StartFadeIn(); } if (isFadeOut) { StartFadeOut(); } } void StartFadeIn() { alfa -= fadeSpeed; //a)不透明度を徐々に下げる SetAlpha(); //b)変更した不透明度パネルに反映する if (alfa <= 0) { //c)完全に透明になったら処理を抜ける isFadeIn = false; fadeImage.enabled = false; //d)パネルの表示をオフにする } } void StartFadeOut() { fadeImage.enabled = true; // a)パネルの表示をオンにする alfa += fadeSpeed; // b)不透明度を徐々にあげる SetAlpha(); // c)変更した透明度をパネルに反映する if (alfa >= 1) { // d)完全に不透明になったら処理を抜ける isFadeOut = false; } } void SetAlpha() { fadeImage.color = new Color(red, green, blue, alfa); } // スタートボタンを押したら実行する public void GameStart() { SceneManager.LoadScene("Opening"); } }

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

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

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

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

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

Bongo

2019/03/12 21:58

いろいろ試されたご様子ですが、そのダメだったコードと、それを実行するとどのような不具合が発生するのかを質問文に追記いただけますと回答が付きやすくなるかと思います。もしかすると、それをいくらか修正することで正しく動作させられるかもしれません。
izumiasa

2019/03/12 23:10

Bongo様 アドバイスありがとうございます。 現在のコードを追記いたしました。 流れとしましては、 フェードインでタイトル画面表示→New Game押下でフェードアウト後Openingシーンへ遷移 のようにしたいのですが、フェードアウトのみ実行されない状況です。
guest

回答2

0

ベストアンサー

GameStart()を呼び出すだけだとそのままシーン遷移するのですぐ切り替わるのは仕様です。
FadeOut処理を呼んで、なおかつフェードアウトが終わったことを検知してから遷移処理を始める必要があります。

あんまりきれいなやり方じゃないですが、下記ならたぶん動くと思います。
changeSceneNameという変数名にシーン名が入っていれば、フェードアウト後にそのシーンに遷移します。変数にセットされていなければフェードアウトだけして終わります。

なのでGameStartでは、isFadeOutをtrueにしてフェードアウト処理を開始するのと共に、遷移したいシーン名をセットしています。

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; //パネルのイメージを操作するのに必要 5using UnityEngine.SceneManagement; 6 7public class FadeController : MonoBehaviour { 8 9 float fadeSpeed = 0.02f; //透明度が変わるスピードを管理 10 float red, green, blue, alfa; //パネルの色、不透明度を管理 11 12 public bool isFadeOut = false; //フェードアウト処理の開始、完了を管理するフラグ 13 public bool isFadeIn = false; //フェードイン処理の開始、完了を管理するフラグ 14 public string changeSceneName; // フェードアウト処理後、シーン遷移する場合のシーン名 15 16 Image fadeImage; //透明度を変更するパネルのイメージ 17 18 void Start() { 19 20 fadeImage = GetComponent<Image>(); 21 red = fadeImage.color.r; 22 green = fadeImage.color.g; 23 blue = fadeImage.color.b; 24 alfa = fadeImage.color.a; 25 } 26 27 void Update() { 28 if (isFadeIn) { 29 StartFadeIn(); 30 } 31 32 if (isFadeOut) { 33 StartFadeOut(); 34 } 35 } 36 37 void StartFadeIn() { 38 alfa -= fadeSpeed; //a)不透明度を徐々に下げる 39 SetAlpha(); //b)変更した不透明度パネルに反映する 40 if (alfa <= 0) { //c)完全に透明になったら処理を抜ける 41 isFadeIn = false; 42 fadeImage.enabled = false; //d)パネルの表示をオフにする 43 } 44 } 45 46 void StartFadeOut() { 47 fadeImage.enabled = true; // a)パネルの表示をオンにする 48 alfa += fadeSpeed; // b)不透明度を徐々にあげる 49 SetAlpha(); // c)変更した透明度をパネルに反映する 50 if (alfa >= 1) { // d)完全に不透明になったら処理を抜ける 51 isFadeOut = false; 52 53 if(changeSceneName != "") { 54 Debug.Log(changeSceneName + "に遷移します。"); 55 SceneManager.LoadScene(changeSceneName); 56 } 57 } 58 } 59 60 void SetAlpha() { 61 fadeImage.color = new Color(red, green, blue, alfa); 62 } 63 64 // スタートボタンを押したら実行する 65 public void GameStart() { 66 isFadeOut = true; 67 changeSceneName = "Opening"; 68 } 69}

投稿2019/03/13 02:06

編集2019/03/13 02:07
hogefugapiyo

総合スコア3302

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

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

izumiasa

2019/03/13 02:34 編集

ありがとうございます。 早速試してみましたが、タイトル画面が出ずにOpeningシーンから始まってしまいました。 ChangeSceneNameを空欄にもしてみましたが、タイトル画面は出るものの、フェードアウトがされませんでした。 こちらのスクリプトをNew Gameボタンにアタッチし、それをインスペクターのボタンスクリプトのクリック時()のところへ持って行き、Editor And Runtime、GameStart()を選択しています。 スクリプトのアタッチ方法が正しくないのでしょうか。
hogefugapiyo

2019/03/13 03:04

スクリプトを読む感じだとフェードイン・アウト用のImageが既にヒエラルキーに配置されており それに対してこのスクリプトをアタッチしていますよね? なのでButton側ではそのImageにアタッチされているスクリプトからメソッドを参照して呼び出します。 ・Image(フェード用画像…スクリプトをアタッチ、テスト用にインスペクターからIsFadeinにチェック) ・Button(OnClickでImageをアタッチ、GameStart()を選択) これでシーンをスタートして、まずフェードインが行われるかを確認します。 次にButtonをクリックしてフェードアウトが始まるかをチェックしてみてください
izumiasa

2019/03/13 03:43

無事フェードアウトができました。 度々のご回答と丁寧なご対応ありがとうございました…!
guest

0

以下の記事は参考にならないでしょうか?

Unityでフェードイン/フェードアウトを実装する方法 | tama-lab

投稿2019/03/12 22:02

nskydiving

総合スコア6500

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

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

izumiasa

2019/03/13 03:48

こちらの記事では上手く解決出来なかった為、受付中に他の方から頂いたコードで無事に実装できました。 ご丁寧にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問