Unity/Script

이펙트 툴) 커스텀 데이터 활성화 툴

Jade Kim 2023. 12. 3. 01:40

 

 

복잡한 이펙트를 만들다 보면 custom data를 사용할 일이 많은데요.

 

매번 texcoord 순서를 지켜서 넣어줘야 하고 클릭을 반복해줘야 하는 부분이 있어 귀찮을 때가 많습니다.

 

 

 

  

매번 custom 선언하고 vector로 순서 맞춰주고 이러는 것보다 자동으로 특정 값들을 오버라이드 해주는 기능이 있으면 좋겠다 싶어 만들었습니다.

using UnityEngine;
using UnityEditor;
using System.Collections.Generic;

public static class J_Tool_ActivateCustom
{
    [MenuItem("CONTEXT/ParticleSystem/Custom Data 활성화")]
    private static void ActivateCustomData(MenuCommand command)
    {
        ParticleSystem ps = (ParticleSystem)command.context;
        ParticleSystemRenderer psRenderer = ps.GetComponent<ParticleSystemRenderer>();

        Undo.RecordObject(ps, "Activate Custom Data for ParticleSystem");
        Undo.RecordObject(psRenderer, "Activate Custom Vertex Streams for ParticleSystemRenderer");


        var streams = new List<ParticleSystemVertexStream>
        {
            ParticleSystemVertexStream.Position,
            ParticleSystemVertexStream.Normal,
            ParticleSystemVertexStream.Color,
            ParticleSystemVertexStream.UV,
            ParticleSystemVertexStream.UV2,
            ParticleSystemVertexStream.Custom1XYZW,
            ParticleSystemVertexStream.Custom2XYZW
        };

        psRenderer.SetActiveVertexStreams(streams);

        var customDataModule = ps.customData;
        customDataModule.enabled = true; 
        customDataModule.SetMode(ParticleSystemCustomData.Custom1, ParticleSystemCustomDataMode.Vector);
        customDataModule.SetVectorComponentCount(ParticleSystemCustomData.Custom1, 4);
        customDataModule.SetMode(ParticleSystemCustomData.Custom2, ParticleSystemCustomDataMode.Vector);
        customDataModule.SetVectorComponentCount(ParticleSystemCustomData.Custom2, 4);

        EditorUtility.SetDirty(ps);
        EditorUtility.SetDirty(psRenderer);
    }
}

 

J_Tool_ActivateCustom.cs
0.00MB

 

 

 

 

 

 

 

해당 스크립트를 에디터 아무곳에나 던져넣으면 사용 가능합니다.

 

사용 방법은 파티클 시스템의 context menu에서 custom data 활성화 버튼을 누르면 되구요.

 

누르면 자동으로 uv2 = texcoord0 zw / custom1 = texcoord1 xyzw / custom2 = texcoord2 xyzw 옵션이 적용됩니다.

 

 

'Unity > Script' 카테고리의 다른 글

이펙트 툴) 버텍스 컬러 오버라이드 툴  (1) 2023.12.04