0%

gameframework细节实现

Reference

IReference

被引用的对象需实现 IReference 接口(包含一个 Clear 函数),当对象被回收时调用,恢复初始状态,以便下次使用。

ReferenceCollection

代表一种类型的引用池,位于 ReferencePool 内部:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
private readonly Queue<IReference> m_References;
private readonly Type m_ReferenceType;
// ...状态计数
````

### ReferenceInfo

获取引用池的状态计数,相较 `ReferenceCollection` 少了 `m_References`。

### ReferencePool

静态类,管理所有类型的引用池:

```csharp
private static readonly Dictionary<Type, ReferenceCollection> s_ReferenceCollections = new Dictionary<Type, ReferenceCollection>();

public static T Acquire<T>() where T : class, IReference, new() => GetReferenceCollection(typeof(T)).Acquire<T>();

public static IReference Acquire(Type referenceType)
{
InternalCheckReferenceType(referenceType);
return GetReferenceCollection(referenceType).Acquire();
}

具体操作时先根据类型(为 Type 时先要对类型进行检查)获取对应的 ReferenceCollection,再进行其他操作。


Fsm (状态机)

FsmState

状态机状态的抽象类,包括状态初始化、状态更新等逻辑。

IFsm

状态机接口。

FsmBase

状态机的抽象类。

Fsm

1
2
3
4
5
6
7
internal sealed class Fsm<T> : FsmBase, IReference, IFsm<T> where T : class
{
private T m_Owner;
private readonly Dictionary<Type, FsmState<T>> m_States;
private Dictionary<string, Variable> m_Datas;
private FsmState<T> m_CurrentState;
}

一个状态机,包括所有状态类以及当前数据。

IFsmManager

接口,管理所有状态机。


Procedure

ProcedureManager

特殊的 Fsm,也由 FsmManager 管理。


Setting

只需根据 ISettingHelper 创建设置辅助器即可完成,ISettingManager 用于使用。


Module

只暴露接口,具体实现仅在程序集可见。通过 GetModule<Interface> 实例化:

1
public static bool InScene(this GameObject gameObject)
  • this:表示这是一个扩展方法,并且该方法是对 GameObject 类型的扩展。
  • GameObject:表示要扩展的类型(Unity 的 GameObject 类)。
  • gameObject:方法参数,调用时传入的目标对象。

DataProvider

ReadData

m_ResourceManager.LoadAsset 加载资产,并传入回调函数,回调函数触发 provider 的事件:

1
2
3
4
5
6
private void OnCloseUIFormComplete(object sender, CloseUIFormCompleteEventArgs e)
{
m_EventComponent.Fire(this, CloseUIFormCompleteEventArgs.Create(e));
}

m_UIManager.CloseUIFormComplete += OnCloseUIFormComplete;

在 GameFramework 提供接口,在 runtime 中将不同模块结合起来。