MeshRenderer meshRenderer = GetComponent<MeshRenderer>();
Material material = meshRenderer.sharedMaterial;
Debug.Log(material.GetInstanceID()); //-110736
Debug.Log(meshRenderer.material.GetInstanceID()); //-117388
Debug.Log(meshRenderer.material.GetInstanceID()); //-117388
Debug.Log(meshRenderer.sharedMaterial.GetInstanceID()); //-117388
meshRenderer.material = material;
Debug.Log(meshRenderer.sharedMaterial.GetInstanceID()); //-110736
Debug.Log(meshRenderer.material.GetInstanceID()); //-117390
meshRenderer.sharedMaterial = material;
Debug.Log(meshRenderer.sharedMaterial.GetInstanceID()); // //-110736
初始状态下,sharedMaterial是物体引自工程的材质球,可以有很多物体引用(节省性能)。当一个材质球参数发生变化 其他引自这个材质球的物体都会变化。
而在调用mesh.material时,系统会根据当前材质球是否是共享材质球而返回对应的材质球。如果是共享的,就new一个新的材质球(属性赋值sharedMaterial)返回,并将这个材质球放到render中引用,sharedMaterial就变成这个新的material了。如果不是共享材质球,则返回这个材质球。
|