浏览代码

First implementation of fading during loading scenes

/main
Wiecio 3 年前
当前提交
7a89c938
共有 5 个文件被更改,包括 70 次插入4 次删除
  1. 7
      UOP1_Project/Assets/Scenes/Managers/PersistentManagers.unity
  2. 39
      UOP1_Project/Assets/Scripts/SceneManagement/SceneLoader.cs
  3. 5
      UOP1_Project/Assets/Scripts/UI/FadeManager.cs
  4. 15
      UOP1_Project/Assets/ScriptableObjects/Events/UI/FadeCompleteEvent.asset
  5. 8
      UOP1_Project/Assets/ScriptableObjects/Events/UI/FadeCompleteEvent.asset.meta

7
UOP1_Project/Assets/Scenes/Managers/PersistentManagers.unity


m_TrainingDataDestination: TrainingData
m_LightProbeSampleCountMultiplier: 4
m_LightingDataAsset: {fileID: 0}
m_UseShadowmask: 1
m_UseShadowmask: 0
--- !u!196 &4
NavMeshSettings:
serializedVersion: 2

m_EditorClassIdentifier:
_fadeChannelSO: {fileID: 11400000, guid: b40bb60f3ca40164e9d7acc6992bae10, type: 2}
_imageComponent: {fileID: 6952518526949780777}
_onFadeComplete: {fileID: 11400000, guid: cdcce1df25c2dbe4e80bee7ffe4e017b, type: 2}
--- !u!4 &1122701838
Transform:
m_ObjectHideFlags: 0

m_Name:
m_EditorClassIdentifier:
_gameplayScene: {fileID: 11400000, guid: a9c92d087d242344388972b3d1c4aaae, type: 2}
_inputReader: {fileID: 11400000, guid: 945ec0365077176418488737deed54be, type: 2}
_fadeOutComplete: {fileID: 11400000, guid: cdcce1df25c2dbe4e80bee7ffe4e017b, type: 2}
_fadeDuration: 1
_fadeRequest: {fileID: 11400000, guid: b40bb60f3ca40164e9d7acc6992bae10, type: 2}
--- !u!4 &1416216799
Transform:
m_ObjectHideFlags: 0

39
UOP1_Project/Assets/Scripts/SceneManagement/SceneLoader.cs


public class SceneLoader : MonoBehaviour
{
[SerializeField] private GameSceneSO _gameplayScene = default;
[SerializeField] private InputReader _inputReader = default;
[SerializeField] private VoidEventChannelSO _fadeOutComplete = default;
[SerializeField] private float _fadeDuration = 1f;
[Header("Load Events")]
[SerializeField] private LoadEventChannelSO _loadLocation = default;

[SerializeField] private BoolEventChannelSO _toggleLoadingScreen = default;
[SerializeField] private VoidEventChannelSO _onSceneReady = default;
[SerializeField] private FadeChannelSO _fadeRequest = default;
private List<AsyncOperationHandle<SceneInstance>> _loadingOperationHandles = new List<AsyncOperationHandle<SceneInstance>>();
private AsyncOperationHandle<SceneInstance> _gameplayManagerLoadingOpHandle;

private GameSceneSO[] _currentlyLoadedScenes = new GameSceneSO[] { };
private bool _showLoadingScreen;
private bool _isFadeComplete;
private SceneInstance _gameplayManagerSceneInstance = new SceneInstance();

_currentlyLoadedScenes[i].sceneReference.UnLoadScene();
}
LoadNewScenes();
_inputReader.DisableAllInput();
StartCoroutine(HandleFadeRoutine(true, _fadeDuration));
}
private void FadeComplete()
{
_isFadeComplete = true;
}
/// <summary>
/// Request Fade from FadeManager and waits until fade is finished
/// If fade in was performed (closing a scene), calls LoadNewScenes()
/// If fade out was performed (opening a scene), enables gameplay input
/// </summary>
private IEnumerator HandleFadeRoutine(bool fadeIn, float duration)
{
Debug.Log("Started fading");
_isFadeComplete = false;
_fadeOutComplete.OnEventRaised += FadeComplete;
_fadeRequest.Fade(fadeIn, duration);
while(_isFadeComplete == false)
{
yield return null;
}
_fadeOutComplete.OnEventRaised -= FadeComplete;
Debug.Log("Finished Fading");
if(fadeIn)
LoadNewScenes();
else
_inputReader.EnableGameplayInput();
}
/// <summary>

{
_toggleLoadingScreen.RaiseEvent(true);
}
_loadingOperationHandles.Clear();
//Build the array of handles of the temporary scenes to load
for (int i = 0; i < _scenesToLoad.Length; i++)

_toggleLoadingScreen.RaiseEvent(false);
}
StartCoroutine(HandleFadeRoutine(false, _fadeDuration));
}
/// <summary>

5
UOP1_Project/Assets/Scripts/UI/FadeManager.cs


{
[SerializeField] private FadeChannelSO _fadeChannelSO;
[SerializeField] private Image _imageComponent;
[SerializeField] private VoidEventChannelSO _onFadeComplete;
private bool _isCurrentlyFading = false;

{
Color startColor = _imageComponent.color;
if (fadeIn)
endColor = Color.clear;
endColor = Color.black;
float totalTime = 0f;

_imageComponent.color = Color.Lerp(startColor, endColor, totalTime / duration);
Debug.Log(_imageComponent.color);
yield return null;
}

_onFadeComplete.RaiseEvent();
}
/// <summary>

15
UOP1_Project/Assets/ScriptableObjects/Events/UI/FadeCompleteEvent.asset


%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 7fafac715ff920c4383fed91a38a351e, type: 3}
m_Name: FadeCompleteEvent
m_EditorClassIdentifier:
description:

8
UOP1_Project/Assets/ScriptableObjects/Events/UI/FadeCompleteEvent.asset.meta


fileFormatVersion: 2
guid: cdcce1df25c2dbe4e80bee7ffe4e017b
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:
正在加载...
取消
保存