Unity3D 设计模式学习之组合模式

本文介绍了Unity3D中如何利用组合模式进行游戏对象和UI的分层管理。通过Transform组件展示了如何操作游戏对象的层次结构,并讨论了组合模式在游戏用户界面中的应用,强调了其在代码组织和可维护性上的优势,同时也提到了可能遇到的组件命名重复和更名困难的问题及其解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

对应游戏中的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 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值