Unity游戏性能优化 MaterialPropertyBlock

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出现了一些层级问题

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值