前言
对应游戏中的UI部分,可以使用分层式管理,将2D组件按照功能关系按层次摆放,是比较容易了解、设计和修改的。
分层式管理一般也称树状结构,常用于软件实现和应用中的一种结构。
GOF对于组合模式Composite的定义是:
“将对象以树状结构组合,用以表现部分-全体的层次关系。组合模式让客户端在操作 各个对象或组合和组合对象是一致的”
树状结构来组合各个对象,所以实现上包含了根结点和叶结点的概念。而”根节点”中会包含叶节点的对象,所以当根节点被删除时,叶节点也会被一起删除,并且希望对于”根节点”和“叶节点”在操作方法上能够一致。
这表示,这两种节点都是继承自同一个操作界面,能够对根节点调用的操作,同样能在叶节点上使用。
游戏对象中的分层管理
在Unity中每个GameObject对象都有一个Transform组件,这个组件提供了几个和游戏对象分层操作有关的方法和变量。
变量:
childCount:代表子组件数量
parent:代表父组件中的Transform对象引用
方法:
DetachChildren:解除所有子组件与本身的关联
Find: 寻找子组件
GetChild: 使用Index的方式取回子组件
IsChildOf: 判断某个Transform对象是否为其子组件
SetParent:设置某个Transform对象为其父组件
再仔细分析,则可以将Unity3D的Transform类当成是一个通用类,因为它并不明显得可以察觉出其下又被再分成“目录节点”或是单纯的“单的终端节点”
其实应该说,Transform类完全符合组合模式的需求:“让客户端在操作各个对象或组件时是一致的”。
因此对于场景上所有的游戏对象GameObject,可以不管它们最终代表的什么,对于所有操作都能正确反应。
游戏用户界面
在《P级阵地》中,每一个主要游戏功能属于IGameSystem的子类,这些子类负责实现《P级阵地》中不同的游戏需求和功能,而它们每一个都会利用组合的方式,成为PBaseDefenseGame类的成员。
public abstract class IUserInterface{
protected PBaseDefenseGame m_PBDGame = null;
protected GameObject m_RootUI = null;
private bool m_bActive = true;
public IUserInterface(PBaseDefenseGame PBDGame){
m_PBDGame = PBDGame;
}
public bool IsVisible(){
return m_bActive;
}
public virtual void Show(){
m_RootUI.SetActive(true);
m_bActive = true;
}
public virtual void Hide(){
m_RootUI.SetActive(false);
m_bActive = false;
}
public