Unity 虚拟仿真实验中设计模式的使用 ——工厂模式(Factory Pattern)
📖 目录
前言
什么是工厂模式
案例背景:虚拟仿真实验中的对象生成
案例效果图(示意)
代码实现
5.1 工厂类:ExperimentObjectFactory
5.2 被生成对象:实验仪器(Beaker / Thermometer)
5.3 UI 控制:生成按钮
运行流程
注意事项总结
扩展思考
总结
1. 前言
在虚拟仿真类实验中,经常需要动态生成各种实验对象,例如 烧杯、温度计、药剂瓶 等。
如果每次生成都写 Instantiate
,逻辑会散乱且不易维护。
工厂模式(Factory Pattern) 能把对象的创建逻辑封装起来,让系统更灵活、可扩展。
2. 什么是工厂模式
工厂模式:定义一个创建对象的接口,由子类决定实例化哪一个类。
在 Unity 中,常通过 静态工厂类或泛型工厂类 来实现。
优点:
封装创建逻辑
易于扩展不同类型对象
减少代码重复
3. 案例背景:虚拟仿真实验中的对象生成
实验中需要生成不同类型的实验仪器(如烧杯、温度计)。
每次生成都需要指定位置、类型。
通过工厂模式,按钮点击就能灵活生成任意对象。
4. 案例效果图(示意)
[生成烧杯按钮] [生成温度计按钮]↓
[场景中出现烧杯] [场景中出现温度计]
点击不同按钮,通过工厂生成不同实验仪器。
5. 代码实现
5.1 工厂类:ExperimentObjectFactory
using UnityEngine;public static class ExperimentObjectFactory
{/// <summary>/// 创建实验对象/// </summary>/// <param name="prefab">对象预制体</param>/// <param name="position">生成位置</param>/// <returns>生成的 GameObject</returns>public static GameObject CreateExperimentObject(GameObject prefab, Vector3 position){if(prefab == null){Debug.LogError("Prefab为空,无法生成对象!");return null;}GameObject obj = GameObject.Instantiate(prefab, position, Quaternion.identity);obj.name = prefab.name; // 保持名字一致return obj;}
}
5.2 被生成对象:实验仪器(示例)
烧杯(Beaker):
using UnityEngine;public class Beaker : MonoBehaviour
{private void Start(){Debug.Log("生成了一个烧杯");}
}
温度计(Thermometer):
using UnityEngine;public class Thermometer : MonoBehaviour
{private void Start(){Debug.Log("生成了一个温度计");}
}
5.3 UI 控制:生成按钮
using UnityEngine;
using UnityEngine.UI;public class ExperimentUI : MonoBehaviour
{[SerializeField] private Button beakerButton;[SerializeField] private Button thermometerButton;[SerializeField] private GameObject beakerPrefab;[SerializeField] private GameObject thermometerPrefab;private void Start(){beakerButton.onClick.AddListener(() =>{ExperimentObjectFactory.CreateExperimentObject(beakerPrefab, Vector3.zero);});thermometerButton.onClick.AddListener(() =>{ExperimentObjectFactory.CreateExperimentObject(thermometerPrefab, new Vector3(2,0,0));});}
}
6. 运行流程
场景中点击 生成烧杯按钮
调用
ExperimentObjectFactory.CreateExperimentObject()
烧杯生成在指定位置
同理,点击 生成温度计按钮 → 生成温度计
特点:
所有生成逻辑都在工厂类封装
UI 只需调用工厂,不需要知道内部实现
7. 注意事项总结
预制体引用:确保按钮绑定了正确的 prefab
位置管理:生成对象位置需合理,避免重叠
扩展性:新增仪器只需增加 prefab + 按钮,无需修改工厂逻辑
8. 扩展思考
可改为 泛型工厂,支持不同类型的实验对象生成
支持 对象池 优化频繁生成销毁的对象
可加入 配置文件,动态生成对象类型和位置
9. 总结
通过这个虚拟仿真案例,你学会了:
如何用 工厂模式 封装对象生成逻辑
如何让 UI 只调用工厂,避免重复代码
如何扩展实验对象生成,满足复杂虚拟仿真实验需求
👉 工厂模式在 Unity 中是 虚拟仿真实验对象管理的核心利器!