初始化仓库

This commit is contained in:
SepComet
2026-02-08 17:08:52 +08:00
commit 8763955323
1132 changed files with 285326 additions and 0 deletions
@@ -0,0 +1,425 @@
//------------------------------------------------------------
// Game Framework
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
// Homepage: https://gameframework.cn/
// Feedback: mailto:ellan@gameframework.cn
//------------------------------------------------------------
using GameFramework;
using GameFramework.Localization;
using GameFramework.Resource;
using System;
using UnityEngine;
namespace UnityGameFramework.Runtime
{
/// <summary>
/// 基础组件。
/// </summary>
[DisallowMultipleComponent]
[AddComponentMenu("Game Framework/Base")]
public sealed class BaseComponent : GameFrameworkComponent
{
private const int DefaultDpi = 96; // default windows dpi
private float m_GameSpeedBeforePause = 1f;
[SerializeField]
private bool m_EditorResourceMode = true;
[SerializeField]
private Language m_EditorLanguage = Language.Unspecified;
[SerializeField]
private string m_TextHelperTypeName = "UnityGameFramework.Runtime.DefaultTextHelper";
[SerializeField]
private string m_VersionHelperTypeName = "UnityGameFramework.Runtime.DefaultVersionHelper";
[SerializeField]
private string m_LogHelperTypeName = "UnityGameFramework.Runtime.DefaultLogHelper";
[SerializeField]
private string m_CompressionHelperTypeName = "UnityGameFramework.Runtime.DefaultCompressionHelper";
[SerializeField]
private string m_JsonHelperTypeName = "UnityGameFramework.Runtime.DefaultJsonHelper";
[SerializeField]
private int m_FrameRate = 30;
[SerializeField]
private float m_GameSpeed = 1f;
[SerializeField]
private bool m_RunInBackground = true;
[SerializeField]
private bool m_NeverSleep = true;
/// <summary>
/// 获取或设置是否使用编辑器资源模式(仅编辑器内有效)。
/// </summary>
public bool EditorResourceMode
{
get
{
return m_EditorResourceMode;
}
set
{
m_EditorResourceMode = value;
}
}
/// <summary>
/// 获取或设置编辑器语言(仅编辑器内有效)。
/// </summary>
public Language EditorLanguage
{
get
{
return m_EditorLanguage;
}
set
{
m_EditorLanguage = value;
}
}
/// <summary>
/// 获取或设置编辑器资源辅助器。
/// </summary>
public IResourceManager EditorResourceHelper
{
get;
set;
}
/// <summary>
/// 获取或设置游戏帧率。
/// </summary>
public int FrameRate
{
get
{
return m_FrameRate;
}
set
{
Application.targetFrameRate = m_FrameRate = value;
}
}
/// <summary>
/// 获取或设置游戏速度。
/// </summary>
public float GameSpeed
{
get
{
return m_GameSpeed;
}
set
{
Time.timeScale = m_GameSpeed = value >= 0f ? value : 0f;
}
}
/// <summary>
/// 获取游戏是否暂停。
/// </summary>
public bool IsGamePaused
{
get
{
return m_GameSpeed <= 0f;
}
}
/// <summary>
/// 获取是否正常游戏速度。
/// </summary>
public bool IsNormalGameSpeed
{
get
{
return m_GameSpeed == 1f;
}
}
/// <summary>
/// 获取或设置是否允许后台运行。
/// </summary>
public bool RunInBackground
{
get
{
return m_RunInBackground;
}
set
{
Application.runInBackground = m_RunInBackground = value;
}
}
/// <summary>
/// 获取或设置是否禁止休眠。
/// </summary>
public bool NeverSleep
{
get
{
return m_NeverSleep;
}
set
{
m_NeverSleep = value;
Screen.sleepTimeout = value ? SleepTimeout.NeverSleep : SleepTimeout.SystemSetting;
}
}
/// <summary>
/// 游戏框架组件初始化。
/// </summary>
protected override void Awake()
{
base.Awake();
InitTextHelper();
InitVersionHelper();
InitLogHelper();
Log.Info("Game Framework Version: {0}", GameFramework.Version.GameFrameworkVersion);
Log.Info("Game Version: {0} ({1})", GameFramework.Version.GameVersion, GameFramework.Version.InternalGameVersion);
Log.Info("Unity Version: {0}", Application.unityVersion);
#if UNITY_5_3_OR_NEWER || UNITY_5_3
InitCompressionHelper();
InitJsonHelper();
Utility.Converter.ScreenDpi = Screen.dpi;
if (Utility.Converter.ScreenDpi <= 0)
{
Utility.Converter.ScreenDpi = DefaultDpi;
}
m_EditorResourceMode &= Application.isEditor;
if (m_EditorResourceMode)
{
Log.Info("During this run, Game Framework will use editor resource files, which you should validate first.");
}
Application.targetFrameRate = m_FrameRate;
Time.timeScale = m_GameSpeed;
Application.runInBackground = m_RunInBackground;
Screen.sleepTimeout = m_NeverSleep ? SleepTimeout.NeverSleep : SleepTimeout.SystemSetting;
#else
Log.Error("Game Framework only applies with Unity 5.3 and above, but current Unity version is {0}.", Application.unityVersion);
GameEntry.Shutdown(ShutdownType.Quit);
#endif
#if UNITY_5_6_OR_NEWER
Application.lowMemory += OnLowMemory;
#endif
}
private void Start()
{
}
private void Update()
{
GameFrameworkEntry.Update(Time.deltaTime, Time.unscaledDeltaTime);
}
private void OnApplicationQuit()
{
#if UNITY_5_6_OR_NEWER
Application.lowMemory -= OnLowMemory;
#endif
StopAllCoroutines();
}
private void OnDestroy()
{
GameFrameworkEntry.Shutdown();
}
/// <summary>
/// 暂停游戏。
/// </summary>
public void PauseGame()
{
if (IsGamePaused)
{
return;
}
m_GameSpeedBeforePause = GameSpeed;
GameSpeed = 0f;
}
/// <summary>
/// 恢复游戏。
/// </summary>
public void ResumeGame()
{
if (!IsGamePaused)
{
return;
}
GameSpeed = m_GameSpeedBeforePause;
}
/// <summary>
/// 重置为正常游戏速度。
/// </summary>
public void ResetNormalGameSpeed()
{
if (IsNormalGameSpeed)
{
return;
}
GameSpeed = 1f;
}
internal void Shutdown()
{
Destroy(gameObject);
}
private void InitTextHelper()
{
if (string.IsNullOrEmpty(m_TextHelperTypeName))
{
return;
}
Type textHelperType = Utility.Assembly.GetType(m_TextHelperTypeName);
if (textHelperType == null)
{
Log.Error("Can not find text helper type '{0}'.", m_TextHelperTypeName);
return;
}
Utility.Text.ITextHelper textHelper = (Utility.Text.ITextHelper)Activator.CreateInstance(textHelperType);
if (textHelper == null)
{
Log.Error("Can not create text helper instance '{0}'.", m_TextHelperTypeName);
return;
}
Utility.Text.SetTextHelper(textHelper);
}
private void InitVersionHelper()
{
if (string.IsNullOrEmpty(m_VersionHelperTypeName))
{
return;
}
Type versionHelperType = Utility.Assembly.GetType(m_VersionHelperTypeName);
if (versionHelperType == null)
{
throw new GameFrameworkException(Utility.Text.Format("Can not find version helper type '{0}'.", m_VersionHelperTypeName));
}
GameFramework.Version.IVersionHelper versionHelper = (GameFramework.Version.IVersionHelper)Activator.CreateInstance(versionHelperType);
if (versionHelper == null)
{
throw new GameFrameworkException(Utility.Text.Format("Can not create version helper instance '{0}'.", m_VersionHelperTypeName));
}
GameFramework.Version.SetVersionHelper(versionHelper);
}
private void InitLogHelper()
{
if (string.IsNullOrEmpty(m_LogHelperTypeName))
{
return;
}
Type logHelperType = Utility.Assembly.GetType(m_LogHelperTypeName);
if (logHelperType == null)
{
throw new GameFrameworkException(Utility.Text.Format("Can not find log helper type '{0}'.", m_LogHelperTypeName));
}
GameFrameworkLog.ILogHelper logHelper = (GameFrameworkLog.ILogHelper)Activator.CreateInstance(logHelperType);
if (logHelper == null)
{
throw new GameFrameworkException(Utility.Text.Format("Can not create log helper instance '{0}'.", m_LogHelperTypeName));
}
GameFrameworkLog.SetLogHelper(logHelper);
}
private void InitCompressionHelper()
{
if (string.IsNullOrEmpty(m_CompressionHelperTypeName))
{
return;
}
Type compressionHelperType = Utility.Assembly.GetType(m_CompressionHelperTypeName);
if (compressionHelperType == null)
{
Log.Error("Can not find compression helper type '{0}'.", m_CompressionHelperTypeName);
return;
}
Utility.Compression.ICompressionHelper compressionHelper = (Utility.Compression.ICompressionHelper)Activator.CreateInstance(compressionHelperType);
if (compressionHelper == null)
{
Log.Error("Can not create compression helper instance '{0}'.", m_CompressionHelperTypeName);
return;
}
Utility.Compression.SetCompressionHelper(compressionHelper);
}
private void InitJsonHelper()
{
if (string.IsNullOrEmpty(m_JsonHelperTypeName))
{
return;
}
Type jsonHelperType = Utility.Assembly.GetType(m_JsonHelperTypeName);
if (jsonHelperType == null)
{
Log.Error("Can not find JSON helper type '{0}'.", m_JsonHelperTypeName);
return;
}
Utility.Json.IJsonHelper jsonHelper = (Utility.Json.IJsonHelper)Activator.CreateInstance(jsonHelperType);
if (jsonHelper == null)
{
Log.Error("Can not create JSON helper instance '{0}'.", m_JsonHelperTypeName);
return;
}
Utility.Json.SetJsonHelper(jsonHelper);
}
private void OnLowMemory()
{
Log.Info("Low memory reported...");
ObjectPoolComponent objectPoolComponent = GameEntry.GetComponent<ObjectPoolComponent>();
if (objectPoolComponent != null)
{
objectPoolComponent.ReleaseAllUnused();
}
ResourceComponent resourceCompoent = GameEntry.GetComponent<ResourceComponent>();
if (resourceCompoent != null)
{
resourceCompoent.ForceUnloadUnusedAssets(true);
}
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: f98acd7d3bd2bf54dadf9644f60e5cb9
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,147 @@
//------------------------------------------------------------
// Game Framework
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
// Homepage: https://gameframework.cn/
// Feedback: mailto:ellan@gameframework.cn
//------------------------------------------------------------
using GameFramework;
using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
namespace UnityGameFramework.Runtime
{
/// <summary>
/// 游戏入口。
/// </summary>
public static class GameEntry
{
private static readonly GameFrameworkLinkedList<GameFrameworkComponent> s_GameFrameworkComponents = new GameFrameworkLinkedList<GameFrameworkComponent>();
/// <summary>
/// 游戏框架所在的场景编号。
/// </summary>
internal const int GameFrameworkSceneId = 0;
/// <summary>
/// 获取游戏框架组件。
/// </summary>
/// <typeparam name="T">要获取的游戏框架组件类型。</typeparam>
/// <returns>要获取的游戏框架组件。</returns>
public static T GetComponent<T>() where T : GameFrameworkComponent
{
return (T)GetComponent(typeof(T));
}
/// <summary>
/// 获取游戏框架组件。
/// </summary>
/// <param name="type">要获取的游戏框架组件类型。</param>
/// <returns>要获取的游戏框架组件。</returns>
public static GameFrameworkComponent GetComponent(Type type)
{
LinkedListNode<GameFrameworkComponent> current = s_GameFrameworkComponents.First;
while (current != null)
{
if (current.Value.GetType() == type)
{
return current.Value;
}
current = current.Next;
}
return null;
}
/// <summary>
/// 获取游戏框架组件。
/// </summary>
/// <param name="typeName">要获取的游戏框架组件类型名称。</param>
/// <returns>要获取的游戏框架组件。</returns>
public static GameFrameworkComponent GetComponent(string typeName)
{
LinkedListNode<GameFrameworkComponent> current = s_GameFrameworkComponents.First;
while (current != null)
{
Type type = current.Value.GetType();
if (type.FullName == typeName || type.Name == typeName)
{
return current.Value;
}
current = current.Next;
}
return null;
}
/// <summary>
/// 关闭游戏框架。
/// </summary>
/// <param name="shutdownType">关闭游戏框架类型。</param>
public static void Shutdown(ShutdownType shutdownType)
{
Log.Info("Shutdown Game Framework ({0})...", shutdownType);
BaseComponent baseComponent = GetComponent<BaseComponent>();
if (baseComponent != null)
{
baseComponent.Shutdown();
baseComponent = null;
}
s_GameFrameworkComponents.Clear();
if (shutdownType == ShutdownType.None)
{
return;
}
if (shutdownType == ShutdownType.Restart)
{
SceneManager.LoadScene(GameFrameworkSceneId);
return;
}
if (shutdownType == ShutdownType.Quit)
{
Application.Quit();
#if UNITY_EDITOR
UnityEditor.EditorApplication.isPlaying = false;
#endif
return;
}
}
/// <summary>
/// 注册游戏框架组件。
/// </summary>
/// <param name="gameFrameworkComponent">要注册的游戏框架组件。</param>
internal static void RegisterComponent(GameFrameworkComponent gameFrameworkComponent)
{
if (gameFrameworkComponent == null)
{
Log.Error("Game Framework component is invalid.");
return;
}
Type type = gameFrameworkComponent.GetType();
LinkedListNode<GameFrameworkComponent> current = s_GameFrameworkComponents.First;
while (current != null)
{
if (current.Value.GetType() == type)
{
Log.Error("Game Framework component type '{0}' is already exist.", type.FullName);
return;
}
current = current.Next;
}
s_GameFrameworkComponents.AddLast(gameFrameworkComponent);
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: dd346220e820e384b816477cdf1e1bb2
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,25 @@
//------------------------------------------------------------
// Game Framework
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
// Homepage: https://gameframework.cn/
// Feedback: mailto:ellan@gameframework.cn
//------------------------------------------------------------
using UnityEngine;
namespace UnityGameFramework.Runtime
{
/// <summary>
/// 游戏框架组件抽象类。
/// </summary>
public abstract class GameFrameworkComponent : MonoBehaviour
{
/// <summary>
/// 游戏框架组件初始化。
/// </summary>
protected virtual void Awake()
{
GameEntry.RegisterComponent(this);
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: bbf5faef1b7b7d24c8375006438a0cd0
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,30 @@
//------------------------------------------------------------
// Game Framework
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
// Homepage: https://gameframework.cn/
// Feedback: mailto:ellan@gameframework.cn
//------------------------------------------------------------
namespace UnityGameFramework.Runtime
{
/// <summary>
/// 关闭游戏框架类型。
/// </summary>
public enum ShutdownType : byte
{
/// <summary>
/// 仅关闭游戏框架。
/// </summary>
None = 0,
/// <summary>
/// 关闭游戏框架并重启游戏。
/// </summary>
Restart,
/// <summary>
/// 关闭游戏框架并退出游戏。
/// </summary>
Quit,
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 6e19747752388e14bbe312e0f4c44e00
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: