# UI ParticleSystem **Repository Path**: hyuhyua/ui-particlesystem ## Basic Information - **Project Name**: UI ParticleSystem - **Description**: Unity 屏幕空间(Screen-Overlay)Canvas下的粒子系统方案 - **Primary Language**: C# - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 5 - **Forks**: 0 - **Created**: 2021-09-25 - **Last Updated**: 2024-08-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: Unity ## README # UI ParticleSystem #### 介绍 Unity 屏幕空间(Screen-Overlay)Canvas下的粒子系统方案 #### 开发原因 需求:想在UI层加入粒子系统。但是:屏幕空间(Screen-Overlay)Canvas下,粒子系统是不能显示的。 首先要知道为什么粒子系统不能显示在UI(Screen-Overlay渲染模式)上。原因是,Canvas的默认渲染模式是Screen-Overlay,也就意味着,Canvas在屏幕空间中渲染,此时Canvas的渲染不受Camera影响,场景中没有摄像机也能正常渲染,并且会显示在场景的最上方,遮住除UI外的一切物体。但是粒子系统是在世界空间中渲染的(受摄像机影响)所以在渲染UI时,粒子无法被检测到。 根据渲染顺序:粒子系统(Transparent)--- 后处理(Overlay)--- UI层(OnGui) 解决方案: 1. 将摄影机的渲染模式改为摄影机屏幕空间,这样粒子系统能够及时渲染。但是缺点:(1)必须是摄影机屏幕空间 (2)UI会受到后处理的影响 2. 采用此工程的方案,可实现在Screen-Overlay渲染模式下使用粒子系统。 #### 软件架构 此方案的原理是将粒子系统移出到世界空间 并新建一个摄像机去拍摄它并渲染到RenderTexture中,在UI中新建RawImage并赋值此前的RenderTexture来模拟粒子系统。这样来实现一个在UI中显示粒子系统的方案。 1. AutoParticles.cs:在编辑器中可自动播放所有的UI粒子系统,方便编辑开发。 2. UIParticleMenu.cs:扩展编辑器,(1)在UI/PaticleSystem中即可创建UI粒子系统UIParticle (2)使在UIParticle中可直接编辑复制到世界空间的粒子系统 3. UIParticle.cs:UI粒子系统的脚本,新建时会自动挂上。 4. UIParticleHelper.cs:内包含摄影机与世界空间的粒子系统,会将真实粒子系统渲染到RenderTexture上,相当于一个播放器(渲染器)。 5. UIParticleManager.cs:栈式管理UIParticleHelper(播放器/渲染器),可动态分配与与回收,并且实现MonoSingleton可自动创建,无需关心管理问题。 #### 使用说明 在UI/PaticleSystem下创建UI粒子系统UIParticle,对粒子系统进行你想要的编辑,修改完后点击脚本下的Save按钮进行保存。 #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request