Unity游戏性能优化 MaterialPropertyBlock

Unity游戏性能优化 MaterialPropertyBlock

  • 1.概念
  • 2.对比
    • 2.1 Material(Instance)
    • 2.2 SharedMaterial
    • 2.3 MaterialPropertyBlock
  • 3.使用
    • 3.1 MeshRenderer
    • 3.2 SpriteRenderer

1.概念

顾名思义,就是保存材质属性的块,相当于将其抽象为一个大型机械上的可拔插的零件,这样就不需要在每次调用时都得换一个机械了,减少内存占用。

2.对比

2.1 Material(Instance)

每一个Material都是一个实例,当我们需要在新的Mesh上使用这个Material时,就会从原先的Material中复制一份出来。这样对内存来说就比较不友好了

2.2 SharedMaterial

与上面的实例相反,SharedMaterial就是没有实例,全局仅此一份

2.3 MaterialPropertyBlock

如果我又想优化内存,又想每个都很有个性,黑的红的黄的紫的怎么办,这个时候就需要使用MaterialPropertyBlock了

3.使用

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using UnityEngine.UI;
using UnityEngine;

public class UIShaderParamsSetter : MonoBehaviour
{
    public Material TargetMaterial;
    Renderer render;

    private int seedId;
    private MaterialPropertyBlock prop;

    [Range(0.01f,1)]
    public float _seed;

    private void Start()
    {
        seedId = Shader.PropertyToID("_Seed");
        prop = new MaterialPropertyBlock();
        render = gameObject.GetComponent<SpriteRenderer>();
        render.GetPropertyBlock(prop);
    }

    private void Update()
    {
        prop.SetFloat("_Seed", _seed);
        render.SetPropertyBlock(prop);
    }
}

3.1 MeshRenderer

3D使用MeshRender

3.2 SpriteRenderer

2D使用SpriteRenderer,最近在使用2D的,但是会和UGUI出现了一些层级问题

你可能感兴趣的:(游戏性能优化)