- 引入 UnityGameFramework
- 使用 Luban 替代原来的 UGF 的数据表
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
//------------------------------------------------------------
|
||||
// Game Framework
|
||||
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
|
||||
// Homepage: https://gameframework.cn/
|
||||
// Feedback: mailto:ellan@gameframework.cn
|
||||
//------------------------------------------------------------
|
||||
|
||||
using GameFramework;
|
||||
using GameFramework.Event;
|
||||
using UnityEngine.SceneManagement;
|
||||
|
||||
namespace UnityGameFramework.Runtime
|
||||
{
|
||||
/// <summary>
|
||||
/// 激活场景被改变事件。
|
||||
/// </summary>
|
||||
public sealed class ActiveSceneChangedEventArgs : GameEventArgs
|
||||
{
|
||||
/// <summary>
|
||||
/// 激活场景被改变事件编号。
|
||||
/// </summary>
|
||||
public static readonly int EventId = typeof(ActiveSceneChangedEventArgs).GetHashCode();
|
||||
|
||||
/// <summary>
|
||||
/// 初始化激活场景被改变事件的新实例。
|
||||
/// </summary>
|
||||
public ActiveSceneChangedEventArgs()
|
||||
{
|
||||
LastActiveScene = default(Scene);
|
||||
ActiveScene = default(Scene);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取激活场景被改变事件编号。
|
||||
/// </summary>
|
||||
public override int Id
|
||||
{
|
||||
get
|
||||
{
|
||||
return EventId;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取上一个被激活的场景。
|
||||
/// </summary>
|
||||
public Scene LastActiveScene
|
||||
{
|
||||
get;
|
||||
private set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取被激活的场景。
|
||||
/// </summary>
|
||||
public Scene ActiveScene
|
||||
{
|
||||
get;
|
||||
private set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 创建激活场景被改变事件。
|
||||
/// </summary>
|
||||
/// <param name="lastActiveScene">上一个被激活的场景。</param>
|
||||
/// <param name="activeScene">被激活的场景。</param>
|
||||
/// <returns>创建的激活场景被改变事件。</returns>
|
||||
public static ActiveSceneChangedEventArgs Create(Scene lastActiveScene, Scene activeScene)
|
||||
{
|
||||
ActiveSceneChangedEventArgs activeSceneChangedEventArgs = ReferencePool.Acquire<ActiveSceneChangedEventArgs>();
|
||||
activeSceneChangedEventArgs.LastActiveScene = lastActiveScene;
|
||||
activeSceneChangedEventArgs.ActiveScene = activeScene;
|
||||
return activeSceneChangedEventArgs;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 清理激活场景被改变事件。
|
||||
/// </summary>
|
||||
public override void Clear()
|
||||
{
|
||||
LastActiveScene = default(Scene);
|
||||
ActiveScene = default(Scene);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 41e284ba4b2e7b044b63702496b5b31f
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,119 @@
|
||||
//------------------------------------------------------------
|
||||
// Game Framework
|
||||
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
|
||||
// Homepage: https://gameframework.cn/
|
||||
// Feedback: mailto:ellan@gameframework.cn
|
||||
//------------------------------------------------------------
|
||||
|
||||
using GameFramework;
|
||||
using GameFramework.Event;
|
||||
|
||||
namespace UnityGameFramework.Runtime
|
||||
{
|
||||
/// <summary>
|
||||
/// 加载场景时加载依赖资源事件。
|
||||
/// </summary>
|
||||
public sealed class LoadSceneDependencyAssetEventArgs : GameEventArgs
|
||||
{
|
||||
/// <summary>
|
||||
/// 加载场景时加载依赖资源事件编号。
|
||||
/// </summary>
|
||||
public static readonly int EventId = typeof(LoadSceneDependencyAssetEventArgs).GetHashCode();
|
||||
|
||||
/// <summary>
|
||||
/// 初始化加载场景时加载依赖资源事件的新实例。
|
||||
/// </summary>
|
||||
public LoadSceneDependencyAssetEventArgs()
|
||||
{
|
||||
SceneAssetName = null;
|
||||
DependencyAssetName = null;
|
||||
LoadedCount = 0;
|
||||
TotalCount = 0;
|
||||
UserData = null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取加载场景时加载依赖资源事件编号。
|
||||
/// </summary>
|
||||
public override int Id
|
||||
{
|
||||
get
|
||||
{
|
||||
return EventId;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取场景资源名称。
|
||||
/// </summary>
|
||||
public string SceneAssetName
|
||||
{
|
||||
get;
|
||||
private set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取被加载的依赖资源名称。
|
||||
/// </summary>
|
||||
public string DependencyAssetName
|
||||
{
|
||||
get;
|
||||
private set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取当前已加载依赖资源数量。
|
||||
/// </summary>
|
||||
public int LoadedCount
|
||||
{
|
||||
get;
|
||||
private set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取总共加载依赖资源数量。
|
||||
/// </summary>
|
||||
public int TotalCount
|
||||
{
|
||||
get;
|
||||
private set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取用户自定义数据。
|
||||
/// </summary>
|
||||
public object UserData
|
||||
{
|
||||
get;
|
||||
private set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 创建加载场景时加载依赖资源事件。
|
||||
/// </summary>
|
||||
/// <param name="e">内部事件。</param>
|
||||
/// <returns>创建的加载场景时加载依赖资源事件。</returns>
|
||||
public static LoadSceneDependencyAssetEventArgs Create(GameFramework.Scene.LoadSceneDependencyAssetEventArgs e)
|
||||
{
|
||||
LoadSceneDependencyAssetEventArgs loadSceneDependencyAssetEventArgs = ReferencePool.Acquire<LoadSceneDependencyAssetEventArgs>();
|
||||
loadSceneDependencyAssetEventArgs.SceneAssetName = e.SceneAssetName;
|
||||
loadSceneDependencyAssetEventArgs.DependencyAssetName = e.DependencyAssetName;
|
||||
loadSceneDependencyAssetEventArgs.LoadedCount = e.LoadedCount;
|
||||
loadSceneDependencyAssetEventArgs.TotalCount = e.TotalCount;
|
||||
loadSceneDependencyAssetEventArgs.UserData = e.UserData;
|
||||
return loadSceneDependencyAssetEventArgs;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 清理加载场景时加载依赖资源事件。
|
||||
/// </summary>
|
||||
public override void Clear()
|
||||
{
|
||||
SceneAssetName = null;
|
||||
DependencyAssetName = null;
|
||||
LoadedCount = 0;
|
||||
TotalCount = 0;
|
||||
UserData = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1d79041cd45038b48acd126c6b44038a
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,95 @@
|
||||
//------------------------------------------------------------
|
||||
// Game Framework
|
||||
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
|
||||
// Homepage: https://gameframework.cn/
|
||||
// Feedback: mailto:ellan@gameframework.cn
|
||||
//------------------------------------------------------------
|
||||
|
||||
using GameFramework;
|
||||
using GameFramework.Event;
|
||||
|
||||
namespace UnityGameFramework.Runtime
|
||||
{
|
||||
/// <summary>
|
||||
/// 加载场景失败事件。
|
||||
/// </summary>
|
||||
public sealed class LoadSceneFailureEventArgs : GameEventArgs
|
||||
{
|
||||
/// <summary>
|
||||
/// 加载场景失败事件编号。
|
||||
/// </summary>
|
||||
public static readonly int EventId = typeof(LoadSceneFailureEventArgs).GetHashCode();
|
||||
|
||||
/// <summary>
|
||||
/// 初始化加载场景失败事件的新实例。
|
||||
/// </summary>
|
||||
public LoadSceneFailureEventArgs()
|
||||
{
|
||||
SceneAssetName = null;
|
||||
ErrorMessage = null;
|
||||
UserData = null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取加载场景失败事件编号。
|
||||
/// </summary>
|
||||
public override int Id
|
||||
{
|
||||
get
|
||||
{
|
||||
return EventId;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取场景资源名称。
|
||||
/// </summary>
|
||||
public string SceneAssetName
|
||||
{
|
||||
get;
|
||||
private set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取错误信息。
|
||||
/// </summary>
|
||||
public string ErrorMessage
|
||||
{
|
||||
get;
|
||||
private set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取用户自定义数据。
|
||||
/// </summary>
|
||||
public object UserData
|
||||
{
|
||||
get;
|
||||
private set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 创建加载场景失败事件。
|
||||
/// </summary>
|
||||
/// <param name="e">内部事件。</param>
|
||||
/// <returns>创建的加载场景失败事件。</returns>
|
||||
public static LoadSceneFailureEventArgs Create(GameFramework.Scene.LoadSceneFailureEventArgs e)
|
||||
{
|
||||
LoadSceneFailureEventArgs loadSceneFailureEventArgs = ReferencePool.Acquire<LoadSceneFailureEventArgs>();
|
||||
loadSceneFailureEventArgs.SceneAssetName = e.SceneAssetName;
|
||||
loadSceneFailureEventArgs.ErrorMessage = e.ErrorMessage;
|
||||
loadSceneFailureEventArgs.UserData = e.UserData;
|
||||
return loadSceneFailureEventArgs;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 清理加载场景失败事件。
|
||||
/// </summary>
|
||||
public override void Clear()
|
||||
{
|
||||
SceneAssetName = null;
|
||||
ErrorMessage = null;
|
||||
UserData = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2b164a3668d54e5418bb662588aa3805
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,95 @@
|
||||
//------------------------------------------------------------
|
||||
// Game Framework
|
||||
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
|
||||
// Homepage: https://gameframework.cn/
|
||||
// Feedback: mailto:ellan@gameframework.cn
|
||||
//------------------------------------------------------------
|
||||
|
||||
using GameFramework;
|
||||
using GameFramework.Event;
|
||||
|
||||
namespace UnityGameFramework.Runtime
|
||||
{
|
||||
/// <summary>
|
||||
/// 加载场景成功事件。
|
||||
/// </summary>
|
||||
public sealed class LoadSceneSuccessEventArgs : GameEventArgs
|
||||
{
|
||||
/// <summary>
|
||||
/// 加载场景成功事件编号。
|
||||
/// </summary>
|
||||
public static readonly int EventId = typeof(LoadSceneSuccessEventArgs).GetHashCode();
|
||||
|
||||
/// <summary>
|
||||
/// 初始化加载场景成功事件的新实例。
|
||||
/// </summary>
|
||||
public LoadSceneSuccessEventArgs()
|
||||
{
|
||||
SceneAssetName = null;
|
||||
Duration = 0f;
|
||||
UserData = null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取加载场景成功事件编号。
|
||||
/// </summary>
|
||||
public override int Id
|
||||
{
|
||||
get
|
||||
{
|
||||
return EventId;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取场景资源名称。
|
||||
/// </summary>
|
||||
public string SceneAssetName
|
||||
{
|
||||
get;
|
||||
private set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取加载持续时间。
|
||||
/// </summary>
|
||||
public float Duration
|
||||
{
|
||||
get;
|
||||
private set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取用户自定义数据。
|
||||
/// </summary>
|
||||
public object UserData
|
||||
{
|
||||
get;
|
||||
private set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 创建加载场景成功事件。
|
||||
/// </summary>
|
||||
/// <param name="e">内部事件。</param>
|
||||
/// <returns>创建的加载场景成功事件。</returns>
|
||||
public static LoadSceneSuccessEventArgs Create(GameFramework.Scene.LoadSceneSuccessEventArgs e)
|
||||
{
|
||||
LoadSceneSuccessEventArgs loadSceneSuccessEventArgs = ReferencePool.Acquire<LoadSceneSuccessEventArgs>();
|
||||
loadSceneSuccessEventArgs.SceneAssetName = e.SceneAssetName;
|
||||
loadSceneSuccessEventArgs.Duration = e.Duration;
|
||||
loadSceneSuccessEventArgs.UserData = e.UserData;
|
||||
return loadSceneSuccessEventArgs;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 清理加载场景成功事件。
|
||||
/// </summary>
|
||||
public override void Clear()
|
||||
{
|
||||
SceneAssetName = null;
|
||||
Duration = 0f;
|
||||
UserData = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 05add94fc5037024c87844fd64e1ab71
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,95 @@
|
||||
//------------------------------------------------------------
|
||||
// Game Framework
|
||||
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
|
||||
// Homepage: https://gameframework.cn/
|
||||
// Feedback: mailto:ellan@gameframework.cn
|
||||
//------------------------------------------------------------
|
||||
|
||||
using GameFramework;
|
||||
using GameFramework.Event;
|
||||
|
||||
namespace UnityGameFramework.Runtime
|
||||
{
|
||||
/// <summary>
|
||||
/// 加载场景更新事件。
|
||||
/// </summary>
|
||||
public sealed class LoadSceneUpdateEventArgs : GameEventArgs
|
||||
{
|
||||
/// <summary>
|
||||
/// 加载场景更新事件编号。
|
||||
/// </summary>
|
||||
public static readonly int EventId = typeof(LoadSceneUpdateEventArgs).GetHashCode();
|
||||
|
||||
/// <summary>
|
||||
/// 初始化加载场景更新事件的新实例。
|
||||
/// </summary>
|
||||
public LoadSceneUpdateEventArgs()
|
||||
{
|
||||
SceneAssetName = null;
|
||||
Progress = 0f;
|
||||
UserData = null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取加载场景更新事件编号。
|
||||
/// </summary>
|
||||
public override int Id
|
||||
{
|
||||
get
|
||||
{
|
||||
return EventId;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取场景资源名称。
|
||||
/// </summary>
|
||||
public string SceneAssetName
|
||||
{
|
||||
get;
|
||||
private set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取加载场景进度。
|
||||
/// </summary>
|
||||
public float Progress
|
||||
{
|
||||
get;
|
||||
private set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取用户自定义数据。
|
||||
/// </summary>
|
||||
public object UserData
|
||||
{
|
||||
get;
|
||||
private set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 创建加载场景更新事件。
|
||||
/// </summary>
|
||||
/// <param name="e">内部事件。</param>
|
||||
/// <returns>创建的加载场景更新事件。</returns>
|
||||
public static LoadSceneUpdateEventArgs Create(GameFramework.Scene.LoadSceneUpdateEventArgs e)
|
||||
{
|
||||
LoadSceneUpdateEventArgs loadSceneUpdateEventArgs = ReferencePool.Acquire<LoadSceneUpdateEventArgs>();
|
||||
loadSceneUpdateEventArgs.SceneAssetName = e.SceneAssetName;
|
||||
loadSceneUpdateEventArgs.Progress = e.Progress;
|
||||
loadSceneUpdateEventArgs.UserData = e.UserData;
|
||||
return loadSceneUpdateEventArgs;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 清理加载场景更新事件。
|
||||
/// </summary>
|
||||
public override void Clear()
|
||||
{
|
||||
SceneAssetName = null;
|
||||
Progress = 0f;
|
||||
UserData = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9a8da542d25a6ee4b8e094e89c28bd7e
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,477 @@
|
||||
//------------------------------------------------------------
|
||||
// Game Framework
|
||||
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
|
||||
// Homepage: https://gameframework.cn/
|
||||
// Feedback: mailto:ellan@gameframework.cn
|
||||
//------------------------------------------------------------
|
||||
|
||||
using GameFramework;
|
||||
using GameFramework.Resource;
|
||||
using GameFramework.Scene;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEngine.SceneManagement;
|
||||
|
||||
namespace UnityGameFramework.Runtime
|
||||
{
|
||||
/// <summary>
|
||||
/// 场景组件。
|
||||
/// </summary>
|
||||
[DisallowMultipleComponent]
|
||||
[AddComponentMenu("Game Framework/Scene")]
|
||||
public sealed class SceneComponent : GameFrameworkComponent
|
||||
{
|
||||
private const int DefaultPriority = 0;
|
||||
|
||||
private ISceneManager m_SceneManager = null;
|
||||
private EventComponent m_EventComponent = null;
|
||||
private readonly SortedDictionary<string, int> m_SceneOrder = new SortedDictionary<string, int>(StringComparer.Ordinal);
|
||||
private Camera m_MainCamera = null;
|
||||
private Scene m_GameFrameworkScene = default(Scene);
|
||||
|
||||
[SerializeField]
|
||||
private bool m_EnableLoadSceneUpdateEvent = true;
|
||||
|
||||
[SerializeField]
|
||||
private bool m_EnableLoadSceneDependencyAssetEvent = true;
|
||||
|
||||
/// <summary>
|
||||
/// 获取当前场景主摄像机。
|
||||
/// </summary>
|
||||
public Camera MainCamera
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_MainCamera;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 游戏框架组件初始化。
|
||||
/// </summary>
|
||||
protected override void Awake()
|
||||
{
|
||||
base.Awake();
|
||||
|
||||
m_SceneManager = GameFrameworkEntry.GetModule<ISceneManager>();
|
||||
if (m_SceneManager == null)
|
||||
{
|
||||
Log.Fatal("Scene manager is invalid.");
|
||||
return;
|
||||
}
|
||||
|
||||
m_SceneManager.LoadSceneSuccess += OnLoadSceneSuccess;
|
||||
m_SceneManager.LoadSceneFailure += OnLoadSceneFailure;
|
||||
|
||||
if (m_EnableLoadSceneUpdateEvent)
|
||||
{
|
||||
m_SceneManager.LoadSceneUpdate += OnLoadSceneUpdate;
|
||||
}
|
||||
|
||||
if (m_EnableLoadSceneDependencyAssetEvent)
|
||||
{
|
||||
m_SceneManager.LoadSceneDependencyAsset += OnLoadSceneDependencyAsset;
|
||||
}
|
||||
|
||||
m_SceneManager.UnloadSceneSuccess += OnUnloadSceneSuccess;
|
||||
m_SceneManager.UnloadSceneFailure += OnUnloadSceneFailure;
|
||||
|
||||
m_GameFrameworkScene = SceneManager.GetSceneAt(GameEntry.GameFrameworkSceneId);
|
||||
if (!m_GameFrameworkScene.IsValid())
|
||||
{
|
||||
Log.Fatal("Game Framework scene is invalid.");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
private void Start()
|
||||
{
|
||||
BaseComponent baseComponent = GameEntry.GetComponent<BaseComponent>();
|
||||
if (baseComponent == null)
|
||||
{
|
||||
Log.Fatal("Base component is invalid.");
|
||||
return;
|
||||
}
|
||||
|
||||
m_EventComponent = GameEntry.GetComponent<EventComponent>();
|
||||
if (m_EventComponent == null)
|
||||
{
|
||||
Log.Fatal("Event component is invalid.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (baseComponent.EditorResourceMode)
|
||||
{
|
||||
m_SceneManager.SetResourceManager(baseComponent.EditorResourceHelper);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_SceneManager.SetResourceManager(GameFrameworkEntry.GetModule<IResourceManager>());
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取场景名称。
|
||||
/// </summary>
|
||||
/// <param name="sceneAssetName">场景资源名称。</param>
|
||||
/// <returns>场景名称。</returns>
|
||||
public static string GetSceneName(string sceneAssetName)
|
||||
{
|
||||
if (string.IsNullOrEmpty(sceneAssetName))
|
||||
{
|
||||
Log.Error("Scene asset name is invalid.");
|
||||
return null;
|
||||
}
|
||||
|
||||
int sceneNamePosition = sceneAssetName.LastIndexOf('/');
|
||||
if (sceneNamePosition + 1 >= sceneAssetName.Length)
|
||||
{
|
||||
Log.Error("Scene asset name '{0}' is invalid.", sceneAssetName);
|
||||
return null;
|
||||
}
|
||||
|
||||
string sceneName = sceneAssetName.Substring(sceneNamePosition + 1);
|
||||
sceneNamePosition = sceneName.LastIndexOf(".unity");
|
||||
if (sceneNamePosition > 0)
|
||||
{
|
||||
sceneName = sceneName.Substring(0, sceneNamePosition);
|
||||
}
|
||||
|
||||
return sceneName;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取场景是否已加载。
|
||||
/// </summary>
|
||||
/// <param name="sceneAssetName">场景资源名称。</param>
|
||||
/// <returns>场景是否已加载。</returns>
|
||||
public bool SceneIsLoaded(string sceneAssetName)
|
||||
{
|
||||
return m_SceneManager.SceneIsLoaded(sceneAssetName);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取已加载场景的资源名称。
|
||||
/// </summary>
|
||||
/// <returns>已加载场景的资源名称。</returns>
|
||||
public string[] GetLoadedSceneAssetNames()
|
||||
{
|
||||
return m_SceneManager.GetLoadedSceneAssetNames();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取已加载场景的资源名称。
|
||||
/// </summary>
|
||||
/// <param name="results">已加载场景的资源名称。</param>
|
||||
public void GetLoadedSceneAssetNames(List<string> results)
|
||||
{
|
||||
m_SceneManager.GetLoadedSceneAssetNames(results);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取场景是否正在加载。
|
||||
/// </summary>
|
||||
/// <param name="sceneAssetName">场景资源名称。</param>
|
||||
/// <returns>场景是否正在加载。</returns>
|
||||
public bool SceneIsLoading(string sceneAssetName)
|
||||
{
|
||||
return m_SceneManager.SceneIsLoading(sceneAssetName);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取正在加载场景的资源名称。
|
||||
/// </summary>
|
||||
/// <returns>正在加载场景的资源名称。</returns>
|
||||
public string[] GetLoadingSceneAssetNames()
|
||||
{
|
||||
return m_SceneManager.GetLoadingSceneAssetNames();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取正在加载场景的资源名称。
|
||||
/// </summary>
|
||||
/// <param name="results">正在加载场景的资源名称。</param>
|
||||
public void GetLoadingSceneAssetNames(List<string> results)
|
||||
{
|
||||
m_SceneManager.GetLoadingSceneAssetNames(results);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取场景是否正在卸载。
|
||||
/// </summary>
|
||||
/// <param name="sceneAssetName">场景资源名称。</param>
|
||||
/// <returns>场景是否正在卸载。</returns>
|
||||
public bool SceneIsUnloading(string sceneAssetName)
|
||||
{
|
||||
return m_SceneManager.SceneIsUnloading(sceneAssetName);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取正在卸载场景的资源名称。
|
||||
/// </summary>
|
||||
/// <returns>正在卸载场景的资源名称。</returns>
|
||||
public string[] GetUnloadingSceneAssetNames()
|
||||
{
|
||||
return m_SceneManager.GetUnloadingSceneAssetNames();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取正在卸载场景的资源名称。
|
||||
/// </summary>
|
||||
/// <param name="results">正在卸载场景的资源名称。</param>
|
||||
public void GetUnloadingSceneAssetNames(List<string> results)
|
||||
{
|
||||
m_SceneManager.GetUnloadingSceneAssetNames(results);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 检查场景资源是否存在。
|
||||
/// </summary>
|
||||
/// <param name="sceneAssetName">要检查场景资源的名称。</param>
|
||||
/// <returns>场景资源是否存在。</returns>
|
||||
public bool HasScene(string sceneAssetName)
|
||||
{
|
||||
if (string.IsNullOrEmpty(sceneAssetName))
|
||||
{
|
||||
Log.Error("Scene asset name is invalid.");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!sceneAssetName.StartsWith("Assets/", StringComparison.Ordinal) || !sceneAssetName.EndsWith(".unity", StringComparison.Ordinal))
|
||||
{
|
||||
Log.Error("Scene asset name '{0}' is invalid.", sceneAssetName);
|
||||
return false;
|
||||
}
|
||||
|
||||
return m_SceneManager.HasScene(sceneAssetName);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 加载场景。
|
||||
/// </summary>
|
||||
/// <param name="sceneAssetName">场景资源名称。</param>
|
||||
public void LoadScene(string sceneAssetName)
|
||||
{
|
||||
LoadScene(sceneAssetName, DefaultPriority, null);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 加载场景。
|
||||
/// </summary>
|
||||
/// <param name="sceneAssetName">场景资源名称。</param>
|
||||
/// <param name="priority">加载场景资源的优先级。</param>
|
||||
public void LoadScene(string sceneAssetName, int priority)
|
||||
{
|
||||
LoadScene(sceneAssetName, priority, null);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 加载场景。
|
||||
/// </summary>
|
||||
/// <param name="sceneAssetName">场景资源名称。</param>
|
||||
/// <param name="userData">用户自定义数据。</param>
|
||||
public void LoadScene(string sceneAssetName, object userData)
|
||||
{
|
||||
LoadScene(sceneAssetName, DefaultPriority, userData);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 加载场景。
|
||||
/// </summary>
|
||||
/// <param name="sceneAssetName">场景资源名称。</param>
|
||||
/// <param name="priority">加载场景资源的优先级。</param>
|
||||
/// <param name="userData">用户自定义数据。</param>
|
||||
public void LoadScene(string sceneAssetName, int priority, object userData)
|
||||
{
|
||||
if (string.IsNullOrEmpty(sceneAssetName))
|
||||
{
|
||||
Log.Error("Scene asset name is invalid.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!sceneAssetName.StartsWith("Assets/", StringComparison.Ordinal) || !sceneAssetName.EndsWith(".unity", StringComparison.Ordinal))
|
||||
{
|
||||
Log.Error("Scene asset name '{0}' is invalid.", sceneAssetName);
|
||||
return;
|
||||
}
|
||||
|
||||
m_SceneManager.LoadScene(sceneAssetName, priority, userData);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 卸载场景。
|
||||
/// </summary>
|
||||
/// <param name="sceneAssetName">场景资源名称。</param>
|
||||
public void UnloadScene(string sceneAssetName)
|
||||
{
|
||||
UnloadScene(sceneAssetName, null);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 卸载场景。
|
||||
/// </summary>
|
||||
/// <param name="sceneAssetName">场景资源名称。</param>
|
||||
/// <param name="userData">用户自定义数据。</param>
|
||||
public void UnloadScene(string sceneAssetName, object userData)
|
||||
{
|
||||
if (string.IsNullOrEmpty(sceneAssetName))
|
||||
{
|
||||
Log.Error("Scene asset name is invalid.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!sceneAssetName.StartsWith("Assets/", StringComparison.Ordinal) || !sceneAssetName.EndsWith(".unity", StringComparison.Ordinal))
|
||||
{
|
||||
Log.Error("Scene asset name '{0}' is invalid.", sceneAssetName);
|
||||
return;
|
||||
}
|
||||
|
||||
m_SceneManager.UnloadScene(sceneAssetName, userData);
|
||||
m_SceneOrder.Remove(sceneAssetName);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 设置场景顺序。
|
||||
/// </summary>
|
||||
/// <param name="sceneAssetName">场景资源名称。</param>
|
||||
/// <param name="sceneOrder">要设置的场景顺序。</param>
|
||||
public void SetSceneOrder(string sceneAssetName, int sceneOrder)
|
||||
{
|
||||
if (string.IsNullOrEmpty(sceneAssetName))
|
||||
{
|
||||
Log.Error("Scene asset name is invalid.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!sceneAssetName.StartsWith("Assets/", StringComparison.Ordinal) || !sceneAssetName.EndsWith(".unity", StringComparison.Ordinal))
|
||||
{
|
||||
Log.Error("Scene asset name '{0}' is invalid.", sceneAssetName);
|
||||
return;
|
||||
}
|
||||
|
||||
if (SceneIsLoading(sceneAssetName))
|
||||
{
|
||||
m_SceneOrder[sceneAssetName] = sceneOrder;
|
||||
return;
|
||||
}
|
||||
|
||||
if (SceneIsLoaded(sceneAssetName))
|
||||
{
|
||||
m_SceneOrder[sceneAssetName] = sceneOrder;
|
||||
RefreshSceneOrder();
|
||||
return;
|
||||
}
|
||||
|
||||
Log.Error("Scene '{0}' is not loaded or loading.", sceneAssetName);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 刷新当前场景主摄像机。
|
||||
/// </summary>
|
||||
public void RefreshMainCamera()
|
||||
{
|
||||
m_MainCamera = Camera.main;
|
||||
}
|
||||
|
||||
private void RefreshSceneOrder()
|
||||
{
|
||||
if (m_SceneOrder.Count > 0)
|
||||
{
|
||||
string maxSceneName = null;
|
||||
int maxSceneOrder = 0;
|
||||
foreach (KeyValuePair<string, int> sceneOrder in m_SceneOrder)
|
||||
{
|
||||
if (SceneIsLoading(sceneOrder.Key))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (maxSceneName == null)
|
||||
{
|
||||
maxSceneName = sceneOrder.Key;
|
||||
maxSceneOrder = sceneOrder.Value;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (sceneOrder.Value > maxSceneOrder)
|
||||
{
|
||||
maxSceneName = sceneOrder.Key;
|
||||
maxSceneOrder = sceneOrder.Value;
|
||||
}
|
||||
}
|
||||
|
||||
if (maxSceneName == null)
|
||||
{
|
||||
SetActiveScene(m_GameFrameworkScene);
|
||||
return;
|
||||
}
|
||||
|
||||
Scene scene = SceneManager.GetSceneByName(GetSceneName(maxSceneName));
|
||||
if (!scene.IsValid())
|
||||
{
|
||||
Log.Error("Active scene '{0}' is invalid.", maxSceneName);
|
||||
return;
|
||||
}
|
||||
|
||||
SetActiveScene(scene);
|
||||
}
|
||||
else
|
||||
{
|
||||
SetActiveScene(m_GameFrameworkScene);
|
||||
}
|
||||
}
|
||||
|
||||
private void SetActiveScene(Scene activeScene)
|
||||
{
|
||||
Scene lastActiveScene = SceneManager.GetActiveScene();
|
||||
if (lastActiveScene != activeScene)
|
||||
{
|
||||
SceneManager.SetActiveScene(activeScene);
|
||||
m_EventComponent.Fire(this, ActiveSceneChangedEventArgs.Create(lastActiveScene, activeScene));
|
||||
}
|
||||
|
||||
RefreshMainCamera();
|
||||
}
|
||||
|
||||
private void OnLoadSceneSuccess(object sender, GameFramework.Scene.LoadSceneSuccessEventArgs e)
|
||||
{
|
||||
if (!m_SceneOrder.ContainsKey(e.SceneAssetName))
|
||||
{
|
||||
m_SceneOrder.Add(e.SceneAssetName, 0);
|
||||
}
|
||||
|
||||
m_EventComponent.Fire(this, LoadSceneSuccessEventArgs.Create(e));
|
||||
RefreshSceneOrder();
|
||||
}
|
||||
|
||||
private void OnLoadSceneFailure(object sender, GameFramework.Scene.LoadSceneFailureEventArgs e)
|
||||
{
|
||||
Log.Warning("Load scene failure, scene asset name '{0}', error message '{1}'.", e.SceneAssetName, e.ErrorMessage);
|
||||
m_EventComponent.Fire(this, LoadSceneFailureEventArgs.Create(e));
|
||||
}
|
||||
|
||||
private void OnLoadSceneUpdate(object sender, GameFramework.Scene.LoadSceneUpdateEventArgs e)
|
||||
{
|
||||
m_EventComponent.Fire(this, LoadSceneUpdateEventArgs.Create(e));
|
||||
}
|
||||
|
||||
private void OnLoadSceneDependencyAsset(object sender, GameFramework.Scene.LoadSceneDependencyAssetEventArgs e)
|
||||
{
|
||||
m_EventComponent.Fire(this, LoadSceneDependencyAssetEventArgs.Create(e));
|
||||
}
|
||||
|
||||
private void OnUnloadSceneSuccess(object sender, GameFramework.Scene.UnloadSceneSuccessEventArgs e)
|
||||
{
|
||||
m_EventComponent.Fire(this, UnloadSceneSuccessEventArgs.Create(e));
|
||||
m_SceneOrder.Remove(e.SceneAssetName);
|
||||
RefreshSceneOrder();
|
||||
}
|
||||
|
||||
private void OnUnloadSceneFailure(object sender, GameFramework.Scene.UnloadSceneFailureEventArgs e)
|
||||
{
|
||||
Log.Warning("Unload scene failure, scene asset name '{0}'.", e.SceneAssetName);
|
||||
m_EventComponent.Fire(this, UnloadSceneFailureEventArgs.Create(e));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b6242b052eb207b40b22e8fe77a315ba
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,83 @@
|
||||
//------------------------------------------------------------
|
||||
// Game Framework
|
||||
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
|
||||
// Homepage: https://gameframework.cn/
|
||||
// Feedback: mailto:ellan@gameframework.cn
|
||||
//------------------------------------------------------------
|
||||
|
||||
using GameFramework;
|
||||
using GameFramework.Event;
|
||||
|
||||
namespace UnityGameFramework.Runtime
|
||||
{
|
||||
/// <summary>
|
||||
/// 卸载场景失败事件。
|
||||
/// </summary>
|
||||
public sealed class UnloadSceneFailureEventArgs : GameEventArgs
|
||||
{
|
||||
/// <summary>
|
||||
/// 加载场景失败事件编号。
|
||||
/// </summary>
|
||||
public static readonly int EventId = typeof(UnloadSceneFailureEventArgs).GetHashCode();
|
||||
|
||||
/// <summary>
|
||||
/// 初始化卸载场景失败事件的新实例。
|
||||
/// </summary>
|
||||
public UnloadSceneFailureEventArgs()
|
||||
{
|
||||
SceneAssetName = null;
|
||||
UserData = null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取加载场景失败事件编号。
|
||||
/// </summary>
|
||||
public override int Id
|
||||
{
|
||||
get
|
||||
{
|
||||
return EventId;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取场景资源名称。
|
||||
/// </summary>
|
||||
public string SceneAssetName
|
||||
{
|
||||
get;
|
||||
private set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取用户自定义数据。
|
||||
/// </summary>
|
||||
public object UserData
|
||||
{
|
||||
get;
|
||||
private set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 创建卸载场景失败事件。
|
||||
/// </summary>
|
||||
/// <param name="e">内部事件。</param>
|
||||
/// <returns>创建的卸载场景失败事件。</returns>
|
||||
public static UnloadSceneFailureEventArgs Create(GameFramework.Scene.UnloadSceneFailureEventArgs e)
|
||||
{
|
||||
UnloadSceneFailureEventArgs unloadSceneFailureEventArgs = ReferencePool.Acquire<UnloadSceneFailureEventArgs>();
|
||||
unloadSceneFailureEventArgs.SceneAssetName = e.SceneAssetName;
|
||||
unloadSceneFailureEventArgs.UserData = e.UserData;
|
||||
return unloadSceneFailureEventArgs;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 清理卸载场景失败事件。
|
||||
/// </summary>
|
||||
public override void Clear()
|
||||
{
|
||||
SceneAssetName = null;
|
||||
UserData = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: cfd40f0f395caf8498a268f03c5fea22
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,83 @@
|
||||
//------------------------------------------------------------
|
||||
// Game Framework
|
||||
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
|
||||
// Homepage: https://gameframework.cn/
|
||||
// Feedback: mailto:ellan@gameframework.cn
|
||||
//------------------------------------------------------------
|
||||
|
||||
using GameFramework;
|
||||
using GameFramework.Event;
|
||||
|
||||
namespace UnityGameFramework.Runtime
|
||||
{
|
||||
/// <summary>
|
||||
/// 卸载场景成功事件。
|
||||
/// </summary>
|
||||
public sealed class UnloadSceneSuccessEventArgs : GameEventArgs
|
||||
{
|
||||
/// <summary>
|
||||
/// 加载场景成功事件编号。
|
||||
/// </summary>
|
||||
public static readonly int EventId = typeof(UnloadSceneSuccessEventArgs).GetHashCode();
|
||||
|
||||
/// <summary>
|
||||
/// 初始化卸载场景成功事件的新实例。
|
||||
/// </summary>
|
||||
public UnloadSceneSuccessEventArgs()
|
||||
{
|
||||
SceneAssetName = null;
|
||||
UserData = null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取加载场景成功事件编号。
|
||||
/// </summary>
|
||||
public override int Id
|
||||
{
|
||||
get
|
||||
{
|
||||
return EventId;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取场景资源名称。
|
||||
/// </summary>
|
||||
public string SceneAssetName
|
||||
{
|
||||
get;
|
||||
private set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取用户自定义数据。
|
||||
/// </summary>
|
||||
public object UserData
|
||||
{
|
||||
get;
|
||||
private set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 创建卸载场景成功事件。
|
||||
/// </summary>
|
||||
/// <param name="e">内部事件。</param>
|
||||
/// <returns>创建的卸载场景成功事件。</returns>
|
||||
public static UnloadSceneSuccessEventArgs Create(GameFramework.Scene.UnloadSceneSuccessEventArgs e)
|
||||
{
|
||||
UnloadSceneSuccessEventArgs unloadSceneSuccessEventArgs = ReferencePool.Acquire<UnloadSceneSuccessEventArgs>();
|
||||
unloadSceneSuccessEventArgs.SceneAssetName = e.SceneAssetName;
|
||||
unloadSceneSuccessEventArgs.UserData = e.UserData;
|
||||
return unloadSceneSuccessEventArgs;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 清理卸载场景成功事件。
|
||||
/// </summary>
|
||||
public override void Clear()
|
||||
{
|
||||
SceneAssetName = null;
|
||||
UserData = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c38ffda9363f4c64686888e44d017e1f
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Reference in New Issue
Block a user