Unity3d: UGUI, UI 및 특수 효과 입자 수준, BakeMesh 버전 2018.2 이상, 입자는 두 이미지 사이 및 ScrollView에 있음

ui에 파티클을 표시하는 방법은 일반적으로 2가지 옵션이
있습니다
. 레이어가 있지만 UI 특수 효과가 많이 산재되어 있으면 레벨 관리가 쉽지 않고 여러 캔버스로 인해 일괄 처리 문제가 발생합니다.
이제 Github의 세 번째 방법인 Particle BakeMesh(버전 2018.2 이상)
: https://github.com /mob-sakai/ParticleEffectForUGUI
장점: UGUI처럼 전달할 수 있습니다. 계층적 순서를 위아래로 조정하고 마스크 처리를 허용합니다.

프로그램 비교

여기에 이미지 설명 삽입

파티클 BakeMesh

원칙: 파티클 그리드와 텍스처가 ui 기본 구성 요소에서 직접 렌더링되도록 합니다. ParticleSystemRenderer.BakeMesh ParticleSystemRenderer.BakeTrailsMesh
인터페이스를 사용합니다.
여기에서는 그리드 정보를 생성합니다.


코드 분석

UI입자

UIParticle은 파티클의 부모 개체입니다.

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

CanvasRenderer는 Canvas에 포함된 UI 객체를 렌더링합니다.

UIParticleUpdater

Canvas.willRenderCanvases 리스너

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

Q: Canvas.willRenderCanvases 리스너
A: 공식 설명: Canvas 렌더링이 시작되기 전에 호출되는 이벤트입니다.
이를 통해 캔버스 기반 요소가 렌더링을 시작하기 직전까지 처리/업데이트를 연기할 수 있습니다. 여기서 파티클을 생성하는 Mesh를 만든 다음 particle.canvasRenderer.SetMesh를 호출하여 파티클의
Refresh 메쉬를 렌더링합니다.

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();
        }

사진 설명을 추가해주세요

추천

출처blog.csdn.net/luoyikun/article/details/123769762