Material och shaderegenskaper
↑Hur det fungerar
Section titled “Hur det fungerar”En shader beskriver hur en yta ritas. Ett material väljer shader och lagrar värden för egenskaper, som texturer, grundfärg, metallic, smoothness och transparens. MeshRenderer refererar till ett eller flera material. Byter du shader kan materialets tillgängliga egenskaper förändras.
I URP används en URP-kompatibel shader, exempelvis Universal Render Pipeline/Lit. Exempel för Built-In Render Pipeline fungerar inte alltid i URP eller HDRP. Texturer och material är separata tillgångar; samma textur kan användas av flera material.
Exempel att prova
Section titled “Exempel att prova”using UnityEngine;
public sealed class TintRenderer : MonoBehaviour{ [SerializeField] private Renderer target; private static readonly int BaseColor = Shader.PropertyToID("_BaseColor"); private MaterialPropertyBlock block;
public void SetColor(Color color) { if (target == null) return; block ??= new MaterialPropertyBlock(); target.GetPropertyBlock(block); block.SetColor(BaseColor, color); target.SetPropertyBlock(block); }}När ska det användas och vad kan gå fel?
Section titled “När ska det användas och vad kan gå fel?”Varför PropertyBlock? Den ändrar shadervärden per Renderer utan att skapa en separat materialinstans, men batching kan påverkas olika beroende på renderpipeline (särskilt SRP Batcher). Fallgrop: renderer.material kan skapa en kopia; ändringar i sharedMaterial kan påverka alla objekt som delar asseten i editorn.
Öva: Låt två objekt dela material och ändra bara färgen på ett med PropertyBlock under körning.
