1.1 系统设计目标
基于真实阴燃火的物理特性,在 Unity 引擎中构建一套可交互、物理合理、性能可控的火势蔓延仿真系统。核心目标包括:
1.支持用户通过鼠标点击地面生成初始火源,实现直观交互
2.模拟阴燃火的随机扩散规律,包含方向、距离、概率等物理特征;
1.2 核心参数配置与物理依据
为保证仿真数据的物理合理性,系统核心参数均基于阴燃火实测数据校准,具体配置如下:
火苗基础配置:
火苗预制体 firePrefab 承载火焰视觉效果与粒子系统,可自定义火焰形态、颜色、持续时间
地面层 groundLayer 用于射线检测,过滤非地面物体,确保火苗仅生成在地面
蔓延规则配置:
蔓延检测间隔 0.5f 秒 控制火势扩散节奏,平衡真实感与性能开销,间隔越短蔓延越快
火苗蔓延距离 1.5f 匹配阴燃火自然扩散的物理范围,定义单步扩散的最大距离
最大蔓延半径 10f 限制火势整体扩散范围,防止火焰无限蔓延导致场景失控
最大火苗数量 50 性能保护阈值,超过数量后不再生成新火苗,避免大量实例化导致帧率下降
蔓延概率 0.7f 控制蔓延密度,取值 0-1,数值越低蔓延越稀疏,更贴近真实火灾随机性
二、核心脚本 FireSpreadSystem.cs 详细实现
2.1变量定义:
2.2 交互点火逻辑
2.2.1 鼠标点击触发
鼠标左键按下事件,调用 SpawnFireAtClickPosition() 处理点火逻辑。
2.2.2 射线检测与位置生成
1.射线检测原理:将屏幕坐标(鼠标位置)转换为世界空间射线,检测是否与地面碰撞。
2.地面约束:通过 groundLayer 过滤非地面物体,确保火苗不会生成在空中或墙体上。
2.3 火苗生成核心方法 SpawnFire
1.性能保护:通过 maxFireCount 限制场景内火苗总数,防止大量 GameObject 实例化导致卡顿
2.位置去重:遍历已有火苗位置,通过距离判断避免重叠生成,保证火焰分布自然
3.生命周期管理:通过 Destroy(fire, delay) 实现火苗自动消失,无需手动管理
2.4 火势蔓延协程 FireSpreadCoroutine()
1.协程优势:通过 yield return new WaitForSeconds() 实现周期性检测,避免 Update() 每帧执行带来的性能开销;
2.随机蔓延:360° 随机方向结合概率控制,模拟阴燃火的不规则扩散;
3.物理约束:最大半径、地面检测、概率阈值三重限制,保证蔓延符合真实物理规律。
2.5 资源清理与内存管理
1. 内存泄漏防护:手动停止协程,防止脚本销毁后协程仍在后台循环执行,占用内存;
2. 自动清理:火苗对象通过 Destroy() 自动回收,无需额外管理。
3.后续优化
1.环境影响扩展:可加入风向、地形坡度参数,修改随机方向权重,让蔓延更贴合环境;
2. 阻挡检测:增加 OverlapCircle 检测,让火势无法穿过墙体、岩石等障碍物;
3.视觉优化:为火苗预制体添加粒子系统、光照效果,提升视觉真实感;
4.数据导出:扩展脚本,记录火苗位置、时间、数量等数据,用于后续分析或机器学习。