当前位置: 首页 > news >正文

Unity 虚拟仿真实验中设计模式的使用 ——工厂模式(Factory Pattern)

📖 目录

  1. 前言

  2. 什么是工厂模式

  3. 案例背景:虚拟仿真实验中的对象生成

  4. 案例效果图(示意)

  5. 代码实现

    • 5.1 工厂类:ExperimentObjectFactory

    • 5.2 被生成对象:实验仪器(Beaker / Thermometer)

    • 5.3 UI 控制:生成按钮

  6. 运行流程

  7. 注意事项总结

  8. 扩展思考

  9. 总结


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. 运行流程

  1. 场景中点击 生成烧杯按钮

  2. 调用 ExperimentObjectFactory.CreateExperimentObject()

  3. 烧杯生成在指定位置

  4. 同理,点击 生成温度计按钮 → 生成温度计

特点

  • 所有生成逻辑都在工厂类封装

  • UI 只需调用工厂,不需要知道内部实现


7. 注意事项总结

  • 预制体引用:确保按钮绑定了正确的 prefab

  • 位置管理:生成对象位置需合理,避免重叠

  • 扩展性:新增仪器只需增加 prefab + 按钮,无需修改工厂逻辑


8. 扩展思考

  • 可改为 泛型工厂,支持不同类型的实验对象生成

  • 支持 对象池 优化频繁生成销毁的对象

  • 可加入 配置文件,动态生成对象类型和位置


9. 总结

通过这个虚拟仿真案例,你学会了:

  • 如何用 工厂模式 封装对象生成逻辑

  • 如何让 UI 只调用工厂,避免重复代码

  • 如何扩展实验对象生成,满足复杂虚拟仿真实验需求

👉 工厂模式在 Unity 中是 虚拟仿真实验对象管理的核心利器

http://www.dtcms.com/a/410239.html

相关文章:

  • 网站备案初审过了企业信息门户网站建设方案
  • 【力扣LeetCode】231_2的幂(法1:循环迭代,法2:位运算)
  • 【便宜整数正分解】2022-11-23
  • hive连不上,报错9000拒绝连接
  • 力扣hot100 | 多维动态规划 | 62. 不同路径、64. 最小路径和、5. 最长回文子串、1143. 最长公共子序列、72. 编辑距离
  • 构建生产级多模态数据集:视觉与视频模型(参照LLaVA-OneVision-Data和VideoChat2)
  • 《策略模式在电商系统中的优雅应用:重构你的折扣计算逻辑》
  • 网站界面设计内容做外贸网站哪里好
  • ValueError: Expecting value: line 1 column 1 (char 0)
  • Agent的九种设计模式
  • 系统性学习C++-第二讲-类和对象(上)
  • LSM-Tree数据结构和数据库
  • 理解Modbus地址:设备手册地址 (40001) vs. 协议地址 (0)
  • 自己做电商网站网站建设 万网
  • Linux系统编程:线程概念
  • 【pycharm---pytorch】pycharm配置以及pytorch学习
  • 学做网站培训 上海南昌网站页面优化
  • 《C++ Primer Plus》读书笔记 第二章 开始学习C++
  • 【精】C# 精确判断XML是否存在子节点
  • 从零开始学神经网络——GRU(门控循环单元)
  • XML中的 CDATA mybaitis xml中的 <![CDATA[ xxxx ]]>
  • iOS 26 系统流畅度剖析:Liquid Glass 动画表现 + 用户反馈
  • JavaScript学习笔记(十四):ES6 Set函数详解
  • 应用网站如何做wordpress 不同数据库
  • Nginx 访问控制、用户认证与 HTTPS 配置指南
  • 老板让做公司网站设计社交网站开发公司
  • 电影级深黄色调人像风光摄影后期Lr调色教程,手机滤镜PS+Lightroom预设下载!
  • 【C++】:模板进阶
  • 【java 语法】Java枚举(Enum)全面详解
  • 栈的顺序存储基本概述