Beispiel #1
0
    public override void Create()
    {
        name = "Metaballs (2D)";

        pass = new MetaballRender2DPass("Metaballs2D");
        MetaballSystem2D metaballSystem = MetaballSystem2D.GetInstance();

        //if (metaballSystem.updated)
        //{
        //    pass.outlineSize = metaballSystem.outlineSize;
        //    pass.innerColor = metaballSystem.innerColor;
        //    pass.outlineColor = metaballSystem.outlineColor;
        //}
        //else
        //{
        //    metaballSystem.outlineSize = settings.outlineSize;
        //    metaballSystem.innerColor = settings.innerColor;
        //    metaballSystem.outlineColor = settings.outlineColor;
        //    metaballSystem.updated = true;
        //    pass.outlineSize = settings.outlineSize;
        //    pass.innerColor = settings.innerColor;
        //    pass.outlineColor = settings.outlineColor;
        //}
        pass.settings = settings;

        pass.renderPassEvent = settings.renderPassEvent;
    }
 public static MetaballSystem2D GetInstance()
 {
     if (instance == null)
     {
         instance = new MetaballSystem2D();
     }
     return(instance);
 }
Beispiel #3
0
        public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData)
        {
            MetaballSystem2D metaballSystem = MetaballSystem2D.GetInstance();

            if (metaballSystem.updated)
            {
                outlineSize  = metaballSystem.outlineSize;
                innerColor   = metaballSystem.innerColor;
                outlineColor = metaballSystem.outlineColor;
            }
            else
            {
                metaballSystem.outlineSize  = settings.outlineSize;
                metaballSystem.innerColor   = settings.innerColor;
                metaballSystem.outlineColor = settings.outlineColor;
                metaballSystem.updated      = true;
                outlineSize  = settings.outlineSize;
                innerColor   = settings.innerColor;
                outlineColor = settings.outlineColor;
            }

            CommandBuffer cmd = CommandBufferPool.Get(profilerTag);

            if (isFirstRender)
            {
                isFirstRender = false;
                cmd.SetGlobalVectorArray("_MetaballData", new Vector4[1000]);
            }

            List <Metaball2D> metaballs    = MetaballSystem2D.Get();
            List <Vector4>    metaballData = new List <Vector4>(metaballs.Count);

            for (int i = 0; i < metaballs.Count; ++i)
            {
                Vector2 pos    = renderingData.cameraData.camera.WorldToScreenPoint(metaballs[i].transform.position);
                float   radius = metaballs[i].GetRadius();
                metaballData.Add(new Vector4(pos.x, pos.y, radius, 0.0f));
            }

            if (metaballData.Count > 0)
            {
                cmd.SetGlobalInt("_MetaballCount", metaballs.Count);
                cmd.SetGlobalVectorArray("_MetaballData", metaballData);
                cmd.SetGlobalFloat("_OutlineSize", outlineSize);
                cmd.SetGlobalColor("_InnerColor", innerColor);
                cmd.SetGlobalColor("_OutlineColor", outlineColor);
                cmd.SetGlobalFloat("_CameraSize", renderingData.cameraData.camera.orthographicSize);

                cmd.Blit(source, source, material);

                context.ExecuteCommandBuffer(cmd);
            }

            cmd.Clear();
            CommandBufferPool.Release(cmd);
        }
Beispiel #4
0
    private void Awake()
    {
        rbMass   = GetComponent <Rigidbody2D>().mass;
        mass     = rbMass;
        collider = GetComponent <CircleCollider2D>();
        MetaballSystem2D.Add(this);
        Transform parent = null;

        try
        {
            parent = FindObjectOfType <GameManager>().metaballParent;
        }
        catch (Exception) { }
        if (parent != null)
        {
            transform.SetParent(parent);
        }
    }
Beispiel #5
0
 void Awake()
 {
     metaballSystem = MetaballSystem2D.GetInstance();
 }
Beispiel #6
0
 private void OnDestroy()
 {
     MetaballSystem2D.Remove(this);
 }
Beispiel #7
0
 private void Awake()
 {
     collider = GetComponent <CircleCollider2D>();
     MetaballSystem2D.Add(this);
 }