実現したいこと
UnityのCanvas内にあるボタンを押下すると、1.1秒後にフェードイン・アウトのAnimationがシーン遷移に併せて、実行されるスクリプトです。
やりたいことは、そのボタンを押下するとがシーン遷移が始まる。という内容にしたいです。
発生している問題・エラーメッセージ
現状:実行すると、開始と同時にシーン遷移が開始されます・・・
このスクリプトをコピペしてもフェードイン・アウトのアニメーションがないため分かりずらいですが、
自分でも分かっていますが、Start関数内にOnClick.AddListenerを記述しているため、
もちろん、ボタンを押すどころか、Editorを実行した瞬間にフェードイン・アウトと共にシーン遷移が始まります。。。
分かってはいると記載しましたが、AddListenerの使い方がよく分かっていないせいだと思います。
publicメソッドを使用したくないので、スクリプトからボタンを押したらシーン遷移が開始されるように、
スクリプトをどう変更すればよいのでしょうか。
ググって色々調べましたが、結局分からずじまいになってしまってます💦
すみません、簡単なことだと思いますが少しUnityから離れてて、また再開しています。
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.SceneManagement; 5using UnityEngine.UI; 6 7/// <summary> 8/// Canvas GroupのAlpha値の変化により、指定時間後にAnimationでImageを 9/// ゆっくりフェードイン・アウトを行い、シーン遷移を行うスクリプト 10/// </summary> 11public sealed class LevelLoader : MonoBehaviour 12{ 13 [SerializeField, Tooltip("Scene遷移を行うボタン")] 14 private Button _button; 15 [SerializeField, Tooltip("Scene遷移するまでの時間(秒)")] 16 private float _transitionTime = 1.1f; 17 [SerializeField, Tooltip("Scene遷移時のフェードインアウト\nAnimatorComponentがAttachされているObjectを指定")] 18 private Animator _transition; 19 20 21 void Start() 22 { 23 _button.onClick.AddListener(() => LoadNextLevel()); 24 } 25 26 private void LoadNextLevel() 27 { 28 StartCoroutine(LoadLevel(SceneManager.GetActiveScene().buildIndex + 1)); 29 } 30 31 private IEnumerator LoadLevel(int levelIndex) 32 { 33 _transition.SetTrigger("Start"); // Play Animation 34 yield return new WaitForSeconds(_transitionTime); // Wait 35 SceneManager.LoadSceneAsync(levelIndex); // Load Scene 36 } 37 38} 39
補足情報(FW/ツールのバージョンなど)
Unity ver2021.3.01f
回答1件
あなたの回答
tips
プレビュー