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

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

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

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

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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

Q&A

解決済

1回答

2380閲覧

コルーチンによるトランジションを伴うシーン遷移ができない

Zer0_Sumeragi

総合スコア2

C#

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

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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

0グッド

0クリップ

投稿2021/12/10 03:38

編集2021/12/10 03:46

前提・実現したいこと

現在unityでトランジションを行ってからシーンをロードして次のシーンに行くスクリプトを作成しているのですが、発生している問題・エラーメッセージ欄のエラーが発生し、和訳したところ、「コルーチンを使うならオブジェクトを有効化してください」的な文面が表示されました。

発生している問題・エラーメッセージ

下記のエラーが発生しています。

Coroutine couldn't be started because the the game object 'FadeCanvas' is inactive! UnityEngine.MonoBehaviour:StartCoroutine (System.Collections.IEnumerator) FadeManager:LoadScene (string,single) (at Assets/Transition/Fade/Scripts/FadeManager.cs:66) FadeTester:Update () (at Assets/Transition/Fade/Scripts/FadeTester.cs:18)

該当のソースコード

コード①:ロード処理を行うコード

c#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5using UnityEngine.SceneManagement; 6 7public class FadeManager : MonoBehaviour 8{ 9 [SerializeField]Fade fade;//コード②を呼び出すためのもの 10 11 private static GameObject loadingUI;//背景UI 12 private static GameObject loadText;//ロード中の文字 13 14 private bool oneTime = false; 15 16 private static FadeManager instance; 17 public static FadeManager Instance 18 { 19 get 20 { 21 if (instance == null) 22 { 23 Init(); 24 } 25 return instance; 26 } 27 } 28 29 IEnumerator fadeCor = null; 30 AsyncOperation async; 31 32 private FadeManager() { } 33 34 private static void Init() 35 { 36 loadingUI = (GameObject)Resources.Load("FadeCanvas");//背景を設置 37 Instantiate(loadingUI, new Vector3(0f, 0f, 0f), Quaternion.identity); 38 loadingUI.gameObject.SetActive(true); 39 40 loadText = GameObject.Find("LoadText");//テキストを探知 41 loadText.gameObject.SetActive(true); 42 43 DontDestroyOnLoad(loadingUI.gameObject);//ロードしても消さない 44 45 loadingUI.AddComponent<FadeManager>();//範囲にこのスクリプトをアタッチ 46 instance = loadingUI.GetComponent<FadeManager>(); 47 } 48 49 public void LoadScene(string sceneName, float interval = 0.5f) //シーン名と切り替え所要時間 50 { 51 if (fadeCor != null)//重複ロード対策 52 { 53 StopCoroutine(fadeCor); 54 } 55 fadeCor = null; 56 57 fadeCor = Fade(sceneName, interval); 58 StartCoroutine(fadeCor); 59 } 60 61 private IEnumerator Fade(string sceneName, float interval) 62 { 63 Text text = loadText.GetComponent<Text>(); 64 65 float time = 0f;//時間をセット 66 loadingUI.gameObject.SetActive(true);//範囲を有効化 67 68 while (time <= interval)//時間が切り替え所要時間を超えるまで 69 { 70 if (oneTime == false) 71 { 72 fade.FadeIn(interval);//コード②によるトランジションの呼び出し 73 oneTime = true; 74 } 75 76 //float fadeAlpha = Mathf.Lerp(0f, 1f, time / interval);//透明度を減らす(100→0) 77 ////loadingUI.color = new Color(0f, 0f, 0f, fadeAlpha);//色は黒(黄色にしたい) 78 time += Time.deltaTime;//時間加算 79 yield return null;//nullを返す 80 } 81 async = SceneManager.LoadSceneAsync(sceneName);//非同期ロード 82 async.allowSceneActivation = false; 83 loadText.gameObject.SetActive(true); 84 while (async.progress < 0.9f)//読み込み進捗が90%を超えるまで 85 {//0.3秒毎に文字の点の数を切り替える 86 time += Time.deltaTime; 87 if (time < 0.3f) { text.text = "よみこみちゅう"; } 88 else if (time < 0.6f) { text.text = "よみこみちゅう."; } 89 else if (time < 0.9f) { text.text = "よみこみちゅう.."; } 90 else if (time < 1.2f) { text.text = "よみこみちゅう..."; } 91 else { time = 0f; } 92 yield return null; 93 } 94 yield return new WaitForSeconds(0.5f);//0.5秒待機 95 loadText.gameObject.SetActive(false); 96 async.allowSceneActivation = true; 97 98 oneTime = false; 99 time = 0f;//時間リセット 100 while (time <= interval)//時間が切り替え所要時間を超えるまで 101 { 102 if (oneTime == false) 103 { 104 fade.FadeOut(interval); 105 oneTime = true; 106 } 107 108 //float fadeAlpha = Mathf.Lerp(1f, 0f, time / interval);//透明度を増やす(0→100) 109 //loadingUI.color= new Color(0f, 0f, 0f, fadeAlpha); 110 time += Time.deltaTime;//時間加算 111 yield return null;//nullを返す 112 } 113 Destroy(loadingUI); 114 } 115} 116

コード②:フェードインを行うスクリプト

c#

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

試したこと

オブジェクトの無効化がされているであろう場所に'gameObject.SetActive(true);'を配置するも、解決せず

補足情報(FW/ツールのバージョンなど)

開発環境:unity ver.2020.3.10f1
コンパイラ:VisualStudio2019

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

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

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

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

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

Y0241-N

2021/12/10 04:16

エラー文を見るにエラー発生箇所はFadeTester.csの18行目となっていますが、FadeTester.csはFade.csとイコールなんでしょうか? またFadeManeger.csがScene上にあるオブジェクトにアタッチされていて、FadeCanvasを呼び出し、Fade.csの処理を実行するというような構造でしょうか? 発生しているエラー的にResourceに配置しているFadeCanvasオブジェクトが非アクティブで配置されていませんか?
Zer0_Sumeragi

2021/12/10 06:02

FadeTester.csはFade.csとイコールなのか: FadeTesterはただEnterが押されたら①のスクリプトを呼び出すだけなので今回省略しました。 一応FadeTesterのコードを張っておきます。 ```c# using System.Collections; using System.Collections.Generic; using UnityEngine; public class FadeTester : MonoBehaviour { // Start is called before the first frame update void Start() { } // Update is called once per frame void Update() { if (Input.GetKey(KeyCode.Return)) { FadeManager.Instance.LoadScene("Main"); } } } ``` 構造は?: FadeManager(①のスクリプト)は呼び出しがあった時自動的にSceneに呼び出され、それ以外のときはシーンに存在しません。 非アクティブ化されたままなのでは?: Resourceの該当Prefabを確認しましたが非アクティブ化されてはいませんでした。
guest

回答1

0

ベストアンサー

勘違いならすいません
参照とってるのがあくまでもリソースのほうなので、そっちActiveにして動きます?

cs

1 loadingUI = (GameObject)Resources.Load("FadeCanvas"); 2 // ↑ リソースからロードしただけで、別に生成されているオブジェクトではない 3 4 Instantiate(loadingUI, new Vector3(0f, 0f, 0f), Quaternion.identity); 5 // ↑ リソースからロードしたのをインスタンス化しているが、参照は取ってない? 6 7 loadingUI.gameObject.SetActive(true); 8 // ↑ リソースからロードしたものをActive(true)にしようとしている

投稿2021/12/10 04:06

hogefugapiyo

総合スコア3302

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

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

Zer0_Sumeragi

2021/12/10 06:08

どうやらそうだったみたいです... `Instantiate(loadingUI, new Vector3(0f, 0f, 0f), Quaternion.identity);`だったのを`loadingUI = Instantiate(loadingUI, new Vector3(0f, 0f, 0f), Quaternion.identity);`としたら該当のエラーは発生しなくなりました。 ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問