如果想要改变物体的material而使原material不变,可以这样
public void Initialize()
{
// 实例化一个material再赋值
var compassImage = GameObject.Find("CompassPanel(Clone)/Compass_Scale").GetComponent<Image>();
m_CompassMat = Object.Instantiate(compassImage.material);
compassImage.material = m_CompassMat;
}
protected override void OnUpdate()
{
for (int i = 0; i < m_PlayerGroup.Length; i++)
{
// 更新指南针指针 0.5 是一个偏移 因为默认正南是0度
float distance = (Camera.main.transform.eulerAngles.y % 360) * (1f / 360f) + 0.5f;
m_CompassMat.SetFloat("_ScrollX", distance);
}
}
新方案
之前的方法会有额外消耗
下面这种方式Unity重写了get方法
所以不用去考虑那件事
var mat = render.material;
mat.SetFloat("_AlphaDither", value);;