Unity3d: UGUI, UI y nivel de partículas de efectos especiales, BakeMesh versión 2018.2 y superior, las partículas están entre dos imágenes y en ScrollView

En general, hay dos opciones para mostrar partículas en la interfaz de usuario:
1. Renderizar a través de rendertexture puede manejar perfectamente el problema de capas, pero el rendimiento no es bueno y varias cámaras
2. Póngalo directamente en la interfaz de interfaz de usuario para ajustar la clasificación de efectos especiales en capa, pero si hay muchos efectos especiales de interfaz de usuario intercalados, el nivel no es fácil de administrar y varios lienzos causan problemas de procesamiento por lotes
Ahora pase al tercer método Particle BakeMesh (versión 2018.2 o superior)
de Github: https://github.com /mob-sakai/ParticleEffectForUGUI
Ventajas: Se puede pasar como UGUI Ajuste el orden jerárquico hacia arriba y hacia abajo, acepte el procesamiento de máscaras

Comparación de programas

inserte la descripción de la imagen aquí

malla de horneado de partículas

Principio: Deje que la cuadrícula de partículas y la textura se representen directamente en el componente básico de la interfaz de usuario
Use la interfaz
ParticleSystemRenderer.BakeMesh y ParticleSystemRenderer.BakeTrailsMesh Aquí se genera la información de la cuadrícula
CanvasRenderer.SetMesh
CanvasRenderer.SetTexture
Lance la malla y la textura a canvasRenderer para la representación

análisis de código

UIPartículo

UIParticle es el objeto principal de la partícula.

[RequireComponent(typeof(RectTransform))]
 [RequireComponent(typeof(CanvasRenderer))]
public class UIParticle : MaskableGraphic
{
    
    
protected override void OnEnable()
        {
    
    
            UIParticleUpdater.Register(this);

CanvasRenderer representa los objetos de la interfaz de usuario contenidos en Canvas, que es imprescindible para Graphic

UIParticleUpdater

Oyente Canvas.willRenderCanvases

internal static class UIParticleUpdater
    {
    
    
        [RuntimeInitializeOnLoadMethod]
        private static void InitializeOnLoad()
        {
    
    
            Canvas.willRenderCanvases -= Refresh;
            Canvas.willRenderCanvases += Refresh;
        }

P: Oyente de Canvas.willRenderCanvases
R: Explicación oficial: un evento que se llama antes de que comience la representación de Canvas.
Esto le permite aplazar el procesamiento/actualización de elementos basados ​​en lienzo hasta justo antes de que comiencen a renderizarse. Cree la malla que genera las partículas aquí, y luego renderice la malla.
Actualice las partículas llamando aarticle.canvasRenderer.SetMesh.

private static void Refresh(UIParticle particle)
        {
    
    
            Profiler.BeginSample("[UIParticle] Bake mesh");
            BakeMesh(particle);
            Profiler.EndSample();

           Profiler.BeginSample("[UIParticle] Set mesh to CanvasRenderer");
            particle.canvasRenderer.SetMesh(particle.bakedMesh);
            Profiler.EndSample();
        }

Por favor agregue una descripción de la imagen

Supongo que te gusta

Origin blog.csdn.net/luoyikun/article/details/123769762
Recomendado
Clasificación