找回密码
 立即注册
查看: 151|回复: 0

Unity3D框架设计:常用设计模式之工厂模式

[复制链接]
发表于 2024-7-15 18:25 | 显示全部楼层 |阅读模式
前言

工厂模式(Factory Pattern)是游戏开发中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对用户表露创建逻辑,而且是通过使用一个共同的接口来指向新创建的对象。
对惹,这里有一个游戏开发交流小组,但愿大师可以点击进来一起交流一下开发经验呀!


首先是要定义和规划我们工厂模式创建出来的对象,我们可以成为”工厂元素”。这些工厂元素都属于分歧的类型(上面例子中的分歧型号的某品牌汽车),这些类型都属于同一个基类(某品牌汽车,具有汽车的通用功能)。所以工厂元素的设计规划就是 基类+子类的模式,基类提供对外使用的接口(如汽车的功能), 而子类定义具体的分歧的类型。如果要新增一种类型,那么只要担任自这个基类就可以了。




用户就可以基于基类来打点子类的实例。当我们新加一种类型的时候,只要担任自基类,然后在Create接口加一个类型来构造这个新类的实例就可以了。
介绍完工厂模式后,相信大师对工厂模式已经有所了解了,接下来我们来通过地图上战斗单元的设计来讲解一下我们整个战斗系统中使用工厂模式来措置仇敌小怪。
法式1:定义一个怪物的基类:
  1. class BaseEnemy extends MonoBehaviour {
  2. //攻击接口
  3. // end
  4. // 行走接口
  5. // end ….
  6. }
复制代码
法式2: 定义具体战斗单元的子类FlyEnemy, MonestEnemy , 重载实现具体的接口
  1. class FlyEnemy extends Enemy {
  2. // …
  3. }
  4. class MonestEnemy extends Enemy {
  5. // …
  6. }
复制代码
法式3: 编写一个工厂模式的Create接口
  1. class EnemyFactory {
  2.   public static BaseEnemy AddEnemyComponent(GameObject obj, int enmeyType) {
  3.     switch(enemyType) {
  4.       case eFlyEnemy:
  5.       return obj.AddComponent<FlyEnmey>();
  6.       break;
  7.       case eMonestEnemy:
  8.       return obj.AddComponent<MonestEnemy> ();
  9.       break;
  10.     …
  11.     }
  12.   }
  13. }
复制代码
法式4: 按照Excel表格描述与地图数据来生成仇敌。


地图数据描述表,如图:


我们编写地图打点代码,读取地图表格,读取到地图上怪物的类型,资源路径,位置,缩放,旋转,然后我们按照描述来在地图上创建怪物,代码如下:
  1. GameObject obj = GameObject.Instantiate(资源路径对应的预制体);
  2. obj.transform.position = new Vector3(配置表读取的位置);
  3. // 通过工厂模式把仇敌构建出来
  4. BaseEenemy enemy = EnemyFactory.AddEnemyComponent(obj, 配置表读取的type);
复制代码
这样我们就把地图上的分歧的仇敌都构建与创建出来了,如果有新的仇敌,这边的逻辑都不用改,只要加一种类型,加一个子类就可以了。这就是工厂模式在游戏中的设计,很有用,大师要多多体会实践。
今天的分享就到这里了,存眷我,可以获得更多的技巧。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-21 22:15 , Processed in 0.101106 second(s), 28 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表