### UnityGameFramework
**此框架参考:**
`GameFramework`:[https://github.com/EllanJiang/GameFramework](https://github.com/EllanJiang/GameFramework)
`UniRx`: [https://github.com/neuecc/UniRx](https://github.com/neuecc/UniRx)
`UniTask`: [https://github.com/Cysharp/UniTask](https://github.com/Cysharp/UniTask)
`odin-serializer`: [https://github.com/TeamSirenix/odin-serializer](https://github.com/TeamSirenix/odin-serializer)
---
### Demo
`XLua Demo`实现: [https://github.com/coding2233/UnityGameFramework-xLua](https://github.com/coding2233/UnityGameFramework-xLua)
`ILRuntime`为老版实现,需要在当前仓库切换到`ILRuntime`分支
---
### 内置模块介绍
---
### DataTable
DataTable为了配置修改不再动态生成或修改对应的序列化的类,进行全动态的解析。
为了做到通用性解析,配置表有一定的规则,以Excel操作的配置表为例。
* 每一行前面第一列带`#`号代表忽略。前面四行是固定的
* 第一行是配置表的名称;
* 第二行是配置表的键值;
* 第三行为当前列的数据类型,`[bool,int,long,float,double,string,Vector2,Vector3,Color]`,`Vector2`示例`100,100`,`Color`示例`#F0F`或者`#FF00FF`;
* 第四行是每一列的说明。
* 实际数据以第五行,第二列开始,第二列的数据一定为`int`类型的唯一识别`id`
* 最后用excel导出为`Unicode 文本`格式即可。
配置表示例
|||||||||
|-|-|-|-|-|-|-|-|
|#|关卡配置表|
|#|Id|LevelSort|UIFormId|LevelName|LevelDesc|Leveldubing|IsHide|
|#|int|int|int|string|string|int|bool|
|#|关卡Id|关卡排序|界面编号|关卡名称|关卡描述|配音|是否隐藏|
||20010001|1|300|测试名称|测试说明|2352|false|
||20010002|2|200|测试名称02|测试说明02|23521|false|
使用示例
```csharp
//DataTable加载事件监听
GameMode.Event.AddListener<LoadDataTableEventArgs>(OnLoadDataTable);
//加载DataTable
GameMode.DataTable.LoadDataTable("Assets/Game/DataTable/GameCheckpoint.txt");
//DataTable加载事件回调
private void OnLoadDataTable(object sender,IEventArgs e)
{
LoadDataTableEventArgs ne = e as LoadDataTableEventArgs;
if(ne!=null)
{
IDataTable idt = ne.Data;
TableData td=idt[20010012]["UIFormId"];
int uiFormId = (int)td;
Debug.Log($"#################################:{ne.Message}");
foreach (var item in idt)
{
Debug.Log($"-------------------------------------------------------");
TableData td02 = idt[item];
foreach (var item02 in td02)
{
Debug.Log(item02.ToString());
}
}
}
}
//使用已加载的DataTable
IDataTable idt = GameMode.DataTable.GetDataTable("Assets/Game/DataTable/GameCheckpoint.txt");
```
`IDataTable`是当前配置表的所有数据的集合,可使用`foreach`获取到数据的`key`值,`TableData`是具体数据存储对象,主要支持上述的第三行的基本类型。
#### 一、事件模块 `EventManager`
整个框架以事件作为驱动,以达到各个功能之间的解耦效果。除了可以自定义扩展事件以外,框架中还会自带一些事件,后面再详细列表。
1. 新建事件,新建一个类并继承`GameEventArgs`
```csharp
/// <summary>
/// 场景加载中事件
/// </summary>
public class SceneLoadingEventArgs : GameEventArgs<SceneLoadingEventArgs>
{
/// <summary>
/// 场景名称
/// </summary>
public string SceneName;
/// <summary>
/// 场景加载进度
/// </summary>
public float Progress;
}
```
2. 订阅事件
```csharp
GameFrameworkMode.GetModule<EventManager>().AddListener<SceneLoadingEventArgs>(OnSceneLoadingCallbak);
```
3. 取消事件订阅
```csharp
GameFrameworkMode.GetModule<EventManager>().RemoveListener<SceneLoadingEventArgs>(OnSceneLoadingCallbak);
```
4. 事件回调的函数实现
```csharp
private void OnSceneLoadingCallbak(object sender, IEventArgs e)
{
SceneLoadingEventArgs ne = (SceneLoadingEventArgs) e;
//...
}
```
5. 事件触发
```csharp
//第一种方式 带参数触发事件
GameFrameworkMode.GetModule<EventManager>()
.Trigger(this, new SceneLoadingEventArgs() {SceneName = "xxx", Progress = 0.85f});
//第二种方式 不带参数触发事件, 不带参数, 就不用生成新的对象,会直接传null
// GameFrameworkMode.GetModule<EventManager>().Trigger<SceneLoadingEventArgs>(this);
```
---
#### 二、游戏状态模块 `GameStateManager`
游戏状态是整个项目的核心逻辑,建议将所有的逻辑都写再状态之中。增加状态管理几乎将各个类型的项目的开发都能尽量模式话,常用的状态:版本更新状态->配置加载状态->资源预加载->开始游戏->...
1. 增加状态,所有的状态都需要继承GameState,并在类名上添加类标记[GameState]
```csharp
[GameState]
public class LoadConfigState : GameState
{
/// <summary>
/// 初始化 -- 只执行一次
/// </summary>
public override void OnInit()
{
base.OnInit();
}
/// <summary>
/// 进入状态
/// </summary>
/// <param name="parameters">不确定参数</param>
public override void OnEnter(params object[] parameters)
{
base.OnEnter(parameters);
}
/// <summary>
/// 退出状态
/// </summary>
public override void OnExit()
{
base.OnExit();
}
/// <summary>
/// 固定帧函数
/// </summary>
public override void OnFixedUpdate()
{
base.OnFixedUpdate();
}
/// <summary>
/// 渲染帧函数
/// </summary>
public override void OnUpdate()
{
base.OnUpdate();
}
}
```
2. 状态的类标记有四种类似
* `[GameState]` 普通状态
* `[GameState(GameStateType.Normal)]` 普通状态
* `[GameState(GameStateType.Ignore)]` 忽略状态,表示在状态管理中忽略这个类的存在
* `[GameState(GameStateType.Start)]` 开始状态,在运行时,第一个运行的状态类标记
3. 状态切换,每个状态都有一个ChangeState函数
```csharp
//切换到开始状态
ChangeState<StartState>();
```
---
#### 三、资源管理模块 `ResourceManager`
资源加载使用`async-await`来做异步加载资源
1. 资源加载(异步加载 )
```csharp
//加载普通资源
TextAsset textAsset= await GameFrameworkMode.GetModule<ResourceManager>().LoadAsset<TextAsset>("datatable","Assets/TextAssets/test.txt");
//实例化GameObject
GameObject obj = await GameFrameworkMode.GetModule<ResourceManager>().LoadAsset<GameObject>("player","Assets/Players/player.prefab");
GameObject player = Instantiate(obj);
```
2. 资源加载(同步加载)
```csharp
//先加载assetbundle
GameFrameworkMode.GetModule<ResourceManager>().LoadAssetBundle("hotfix");
//再加载资源
GameFrameworkMode.GetModule<ResourceManager>().LoadAssetSync("hotfix","main");
```
3. 内置对象池
* 添加预设
```csharp
GameFrameworkMode.GetModule<ResourceManager>().AddPrefab("player","Assets/Prefab/Player.prefab",
new PoolPrefabInfo() {Prefab = playerPrefab,PreloadAmount=3, MaxAmount = 10});
```
* 生成对象
```csharp
GameObject player= GameFrameworkMode.GetModule<ResourceManager>().Spawn("Assets/Prefab/Player.prefab");
```
* 销毁对象
```csharp
GameFrameworkMode.GetModule<ResourceManager>().Despawn(player);
```
4. 加载场景,场景只支持异步加载
```csharp
AsyncOperation asyncOperation= await GameFrameworkMode.GetModule<ResourceManager>().LoadSceneAsync("mainscene","Assets/Scene/Main.unity");
```
5. 支持编辑器内资源的直接读取和AssetBundle资源读取两种方式的一键切换,避免测试的时候需要重复的打包AssetBundle资源
---
#### 四、UI管理模块 `UIManager`
1. 新建ui预设,新建ui类,继承类`UIView`,绑定并在类名上标明预设的资源路径
```csharp
[UIView("ui","Assets/Prefab/UI/LoadingView.prefab")]
public class LoadingUI
没有合适的资源?快使用搜索试试~ 我知道了~
UnityGameFramework:GameFramework,ILRuntime,Unity版本2018.2
共1649个文件
meta:873个
cs:730个
asmdef:12个
5星 · 超过95%的资源 需积分: 50 13 下载量 120 浏览量
2021-04-29
05:38:04
上传
评论
收藏 1.85MB ZIP 举报
温馨提示
UnityGameFramework 此框架参考: GameFramework: UniRx: UniTask: odin-serializer: Demo XLua Demo实现: ILRuntime为老版实现,需要在当前仓库切换到ILRuntime分支 内置模块介绍 DataTable DataTable为了配置修改不再动态生成或修改对应的序列化的类,进行全动态的解析。 为了做到通用性解析,配置表有一定的规则,以Excel操作的配置表为例。 每一行前面第一列带#号代表忽略。前面四行是固定的 第一行是配置表的名称; 第二行是配置表的键值; 第三行为当前列的数据类型,[bool,int,long,float,double,string,Vector2,Vector3,Color],Vector2示例100,100,Color示例#F0F或者#FF00FF; 第四行是每一列的说明。 实
资源推荐
资源详情
资源评论
收起资源包目录
UnityGameFramework:GameFramework,ILRuntime,Unity版本2018.2 (1649个子文件)
GameFramework.asmdef 732B
UniTask.Addressables.asmdef 537B
UniTask.TextMeshPro.asmdef 531B
UniTask.DOTween.asmdef 521B
UniTask.asmdef 480B
GameFramework.Editor.asmdef 400B
UniTask.Editor.asmdef 368B
UniTask.Linq.asmdef 343B
Libraries.asmdef 332B
UniRx.asmdef 313B
OdinSerializer.asmdef 292B
UniRx.Examples.asmdef 226B
CombineLatest.cs 431KB
UniTask.WhenAll.Generated.cs 207KB
UniTask.WhenAny.Generated.cs 200KB
MonoBehaviourMessagesTriggers.cs 145KB
UnitySerializationUtility.cs 127KB
MinMax.cs 118KB
BinaryDataReader.cs 105KB
TypeExtensions.cs 85KB
BinaryDataWriter.cs 84KB
EmitUtilities.cs 72KB
UnityAsyncExtensions.cs 55KB
Average.cs 51KB
JsonDataReader.cs 50KB
Observable.Unity.cs 44KB
GroupBy.cs 44KB
LzmaEncoder.cs 43KB
Sum.cs 43KB
InformationWindow.cs 41KB
DOTweenModuleUI.cs 38KB
SelectMany.cs 38KB
Tuple.cs 37KB
ProperBitConverter.cs 33KB
CombineLatest.cs 33KB
Zip.cs 32KB
ZipLatest.cs 32KB
SelectMany.cs 32KB
JsonTextReader.cs 31KB
JsonMapper.cs 31KB
SerializationNodeDataReader.cs 31KB
SerializationUtility.cs 31KB
ComplexTypeSerializer.cs 30KB
UnityAsyncExtensions.uGUI.cs 30KB
Join.cs 30KB
BaseDataReader.cs 30KB
Where.cs 29KB
Notification.cs 29KB
AOTSupportScanner.cs 29KB
FormatterEmitter.cs 29KB
UniTaskExtensions.cs 29KB
UniTaskCompletionSource.cs 29KB
JsonDataWriter.cs 28KB
Select.cs 28KB
JsonData.cs 27KB
GroupJoin.cs 27KB
kcp.cs 26KB
FormatterLocator.cs 26KB
DistinctUntilChanged.cs 26KB
OrderBy.cs 26KB
UniTask.Delay.cs 25KB
PrefabModification.cs 24KB
ToLookup.cs 24KB
ObservableTriggerExtensions.Component.cs 24KB
IDataReader.cs 23KB
BundleAssetsHelper.cs 23KB
Lexer.cs 23KB
Subscribe.cs 22KB
DefaultSerializationBinder.cs 22KB
MainThreadDispatcher.cs 22KB
AssetBundleBuildEditor.cs 21KB
Zip.cs 21KB
UniTask.cs 20KB
DictionaryKeyUtility.cs 20KB
AsyncReactiveProperty.cs 20KB
UniTaskObservableExtensions.cs 20KB
UniTask.WaitUntil.cs 19KB
MainThreadScheduler.cs 19KB
Buffer.cs 19KB
Observer.cs 19KB
AOTSupportUtilities.cs 18KB
ProfilerWindow.cs 18KB
BaseFormatter.cs 18KB
PlayerLoopHelper.cs 17KB
ObservableWWW.cs 17KB
FormatterUtilities.cs 17KB
ReactiveCommand.cs 17KB
ObservableTriggerExtensions.cs 17KB
TaskObservableExtensions.cs 17KB
ReactiveProperty.cs 17KB
ImmutableList.cs 16KB
DOTweenAsyncExtensions.cs 16KB
DelegateFormatter.cs 16KB
SerializationNodeDataWriter.cs 16KB
Channel.cs 15KB
Observable.Concatenate.cs 15KB
UnsafeUtilities.cs 15KB
WhenAll.cs 15KB
JsonReader.cs 15KB
ReactiveDictionary.cs 15KB
共 1649 条
- 1
- 2
- 3
- 4
- 5
- 6
- 17
资源评论
- kathy_2242021-08-19用户下载后在一定时间内未进行评价,系统默认好评。
花花鼓
- 粉丝: 35
- 资源: 4646
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功