private void UpdateMeshRenderer(SpriteRendererTemplate template, Vector2 size)
        {
            var renderer = template.Renderer;

            renderer.MatBlock.SetVector(ShaderPropertyColor, template.SpriteColor.CurrentColor);
            renderer.MatBlock.SetVector(ShaderPropertyUv, renderer.Uv);
            renderer.MatBlock.SetTexture(ShaderPropertyTexture, renderer.Sprite.texture);
            renderer.MatBlock.SetTexture(ShaderPropertyNormal, renderer.Normal);
            renderer.MatBlock.SetTexture(ShaderPropertyEmissive, renderer.Emissive);
            renderer.ApplyMaterialBlock();
            Vector2 scaledPivot = size * new Vector2(0.5f, 0);

            renderer.MeshVertices[0] = new Vector3(size.x - scaledPivot.x, size.y - scaledPivot.y, 0);
            renderer.MeshVertices[1] = new Vector3(size.x - scaledPivot.x, -scaledPivot.y, 0);
            renderer.MeshVertices[2] = new Vector3(-scaledPivot.x, -scaledPivot.y, 0);
            renderer.MeshVertices[3] = new Vector3(-scaledPivot.x, size.y - scaledPivot.y, 0);
            renderer.UpdateMesh();
        }
        private void RunUpdate(ref SpriteRendererTemplate template)
        {
            if (template.Billboard != null)
            {
                bool backwards = template.Billboard.Backwards;
                if (template.Renderer.MeshRenderer != null)
                {
                    backwards = template.Billboard.Backwards && !template.Renderer.FlipX;
                }
                UpdateBillboard(template.Billboard, template.Renderer.BaseTr, template.Renderer.SpriteTr, backwards);
            }
            if (!template.Renderer.IsDirty)
            {
                return;
            }
            template.Renderer.UpdatedSprite();
            var sprite = template.Renderer.Sprite;

            template.Renderer.Uv = GetUv(sprite);
            var size = new Vector2(sprite.rect.width / sprite.pixelsPerUnit,
                                   sprite.rect.height / sprite.pixelsPerUnit);

            if (template.Renderer.SavedCollider != null)
            {
                template.Collider.Value.UpdateCollider(template.Renderer.SavedCollider);
                if (template.CriticalHitCollider != null)
                {
                    template.CriticalHitCollider.Assign(template.Renderer.SavedCollider.CriticalRect, size);
                }
            }
            else
            {
                template.Collider.Value.UpdateSprite(sprite, template.Renderer.FlipX);
            }
            UpdateMeshRenderer(template, size);
        }