그라데이션 장면

10476 단어 Unity
기본적으로 Dotween이 한 거야.
크로스 렌즈로 유지해야 하는 단식이어야 하기 때문에 싱레톤 모노베하뷰는 다음과 같은 내용을 사용했다.
https://qiita.com/valbeat/items/4b0175755b0cc47d4f6e
FadeSceneManager.cs
using System.Collections;
using System.Collections.Generic;
using DG.Tweening;
using ProjectLabyrinth.Utilities.Inputs;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

namespace ProjectLabyrinth.Main.FadeSystem
{
    public class FadeSceneManager : SingletonMonoBehaviour<FadeSceneManager>
    {
        private CanvasGroup fadeCanvas;

        private static float expectedfadetime;
        //シーン遷移にかかると予想される時間
        public static float expectedFadetime
        {
            get { return expectedfadetime; }
        }

        // Use this for initialization
        void Awake()
        {
            var prefab = (GameObject)Resources.Load("FadeCanvas");

            var instance = Instantiate(prefab);

            fadeCanvas = instance.GetComponent<CanvasGroup>();

            DontDestroyOnLoad(fadeCanvas);
            DontDestroyOnLoad(fadeCanvas.GetComponentInChildren<Image>());

            //http://nn-hokuson.hatenablog.com/entry/2017/05/29/204702
            SceneManager.activeSceneChanged += OnActiveSceneChanged;
        }

        private Sequence sequence;

        public void ChangeSceneWithFade(float fadeiotime, float fadewaittime, string nextscenename)
        {
            var operation = SceneManager.LoadSceneAsync(nextscenename); //次シーンの読み込み開始
            operation.allowSceneActivation = false;//シーンの変更をブロック

            expectedfadetime = fadeiotime + fadewaittime;

            sequence = DOTween.Sequence();

            sequence
                    //.OnStart(InputManager.Instance.StopInput)      //入力停止
                    .Append(fadeCanvas.DOFade(1f, fadeiotime))     //フェードアウト
                    .AppendCallback(() =>
                    {
                        sequence.Pause();                          //シーンが変わるまで停止
                        operation.allowSceneActivation = true;     //シーンの変更を許可
                    })
                    .AppendInterval(fadewaittime)                  //暗転中に停止
                    .Append(fadeCanvas.DOFade(0f, fadeiotime))     //フェードイン
                    //.OnComplete(InputManager.Instance.StartInput); //入力再開

            sequence.Play();
        }

        void OnActiveSceneChanged(Scene prevScene, Scene nextScene)
        {
            sequence.Play();
        }
    }
}
사용 예
FadeSceneManager.Instance.ChangeSceneWithFade(1f, 0f, "Stage1");

간단한 해설


화면에 덮는 검은색 그림을 준비해야 한다.

검은색 이미지의 설정 예는 바로 이런 느낌이다.UI→Image를 마우스 오른쪽 버튼으로 클릭하여 추가할 수 있습니다.RectTransform의 위치 지정 방법을 변경하는 설정을 잊지 마십시오. 화면 전체를 담백하게 하고 담백하게 합니다.
이 그림은 투명도를 최대화합니다.
var prefab = (GameObject)Resources.Load("FadeCanvas");
구문을 사용합니다.스크립트에서 Prefab을 만드는 방법을 참고했습니다.
https://qiita.com/2dgames_jp/items/8a28fd9cf625681faf87
처음과 마지막
OnStart(InputManager.Instance.StopInput)

OnComplete(InputManager.Instance.StartInput)
이것은 자체 InputManager 입력을 중지하는 함수입니다.단계의 시작, 끝 등은 이런 호출 방식을 통해 시기를 조정할 수 있으니 참고하세요.
ChangeScene WithFade의 매개 변수는 다음과 같습니다.
페이드 인 타임
필드 전환 완료 후, 어두워진 상태에서 대기 시간 추가
nextcenename: 다음 장면의 이름
네.
ChangeScene WithFade에서는 α 값을 변경하여 처리됩니다.
Append Callback으로 자신을 멈추게 하세요.
.AppendCallback(() =>
{
    sequence.Pause();                          //シーンが変わるまで停止
    operation.allowSceneActivation = true;     //シーンの変更を許可
})
이로써 암전이 완료되면 장면이 로드되고 전환될 때까지 검게 변한 상태에서 멈추고, 전환할 때 Onactive ScenneChanged가 호출되어 명전이 시작된다.

좋은 웹페이지 즐겨찾기