Unity-工厂模式

引言

​ 在一个游戏中,时常需要动态创建一些游戏对象,例如:怪物的生成、道具的掉落、等,这些操作都需要我们动态的生成对象。

​ 如果我们在创建对象的时候,让一个专门创建对象的实例,持有需要创建的对象的引用,也同样能够实现上述的功能,但是如果这么做,代码的复用性会非常低:我们在需要创建不同的对象的时候,都需要重新再写一套代码。因此,我们需要一个能够动态创建对象的方法,来解决上述的问题。

工厂模式的应用

​ 通过对工厂模式的使用,可以 动态的创建游戏中需要的对象。例如:当敌人死亡时,就构造对应的掉落物品;当玩家进入特殊地形时,就构造对应的敌人。

代码实现

代码逻辑

  1. 首先最重要的就是要创建我们的工厂类,其中包含创建对象的函数。
  2. 创建对象的需求可能在游戏的任何时候都需要用到,因此我们可以将其定为单例模式(Singleton)
  3. 需要创建哪个类的对象,事先是无从得知的,因此需要通过Type.getType()的方法获取对应的类

代码实现

​ 根据上述逻辑创建我们的工厂类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

namespace Tools { //定义在Tools命名空间中,需要的时候using
public static class CreateFactory {
public static System.Object CreateObject(string className) {
//尝试根据String获取对应Type,如果没有,则返回null
Type type = Type.GetType(className);
if(type == null) {
Debug.LogError("Connt find class:" + className);
return null;
}

//尝试根据Type创建对象,如果创建失败,则返回null
object instance = Activator.CreateInstance(type);
if(instance == null) {
Debug.LogError("Invalid class type" + className);
return null;
}
//最后返回对应对象,需要注意的是需要将函数返回的结果转换为对的类
return instance;
}
}
}