Binago ng Unity3D ang karaniwang mode ng pag-render ng shader sa runtime
Unity3d Change Standard Shader Rendering Mode Runtime
https://docs.unity3d.com/Manual/MaterialsAccessingViaScript.html
'Akonstead, Sinusubaybayan ng Unity kung aling mga variant ang ginamit mo sa pamamagitan ng pagsusuri sa mga materyal na assets na ginamit sa iyong proyekto. Alinmang mga pagkakaiba-iba ng Standard Shader na iyong isinama sa iyong proyekto, iyon ang mga variant na kasama sa pagbuo.'
https://forum.unity3d.com/threads/access-rendering-mode-var-on-standard-shader-via-scripting.287002/
# 29:
Mukha iyon sa akin na dapat itong gumana, ngunit nabigo rin ito para sa akin at hindi ko alam kung bakit. Bilang isang workaround gumawa ako ng isang duplicate ng materyal na kailangan ko at itinakda ito sa fade mode sa editor, at pagkatapos ay nagdagdag ng isang hindi aktibong GameObject sa isa sa aking mga eksena at ginawang gamitin ang fade-mode na materyal. Tila pinilit ang tamang shader na isama sa pagbuo at ginawang paglipat ng orihinal na materyal upang mawala ang mode sa runtime work. Medyo pangit, ngunit gumagana ito.
Upang lumikha ng isang bagong pamantayang materyal, pipiliin ng shader ang kopya ng file ng mga standardhader, na inilalagay sa folder ng Mga Mapagkukunan, pipiliin ng rendering mode ang mode na pag-render na kinakailangan para sa standalone compilation at packaging exe na operasyon, at ang gameobject ay idinagdag sa eksena upang magamit materyal na ito Ang mode ng pag-render ay maaaring mabago sa script.
O magdagdag ng isang default shader bilang default sa mga setting ng proyekto-> graphics
---- ---- ---- -----------------
maaga (GameObject pumunta sa Gos) {
// Transform [] children = go.GetComponentsInCh Children ()
Renderer [] renderers = go.GetComponentsInCh Children ()
paunahan (Nag-render ng renderer sa mga nag-render) {
Materyal [] materyales = render.material
paunahan (Materyal na materyal sa mga materyal) {
material.shader = Shader.Find ('FadeStandard')
kung (slider.value> 0) {
materyal.SetOverrideTag ('RenderType', 'Transparent') // fade mode
materyal.SetInt ('_SrcBlend', (int) UnityEngine.Rendering.BlendMode.SrcAlpha)
materyal.SetInt ('_DstBlend', (int) UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha)
materyal.SetInt ('_ZWrite', 0)
materyal.DisableKeyword ('_ALPHATEST_ON')
materyal. Paganahin angKeyword ('_ALPHABLEND_ON')
materyal.DisableKeyword ('_ALPHAPREMULTIPLY_ON')
material.renderQueue = (int) UnityEngine.Rendering.RenderQueue.Transparent
materyal.SetColor ('_Color', bagong Kulay (1, 1, 1, 1 - slider.value))
} iba pa {
materyal.SetOverrideTag ('RenderType', '')// mode na opaque
materyal.SetInt ('_SrcBlend', (int) UnityEngine.Rendering.BlendMode.One)
materyal.SetInt ('_DstBlend', (int) UnityEngine.Rendering.BlendMode.Zero)
materyal.SetInt ('_ZWrite', 1)
materyal.DisableKeyword ('_ALPHATEST_ON')
materyal.DisableKeyword ('_ALPHABLEND_ON')
materyal.DisableKeyword ('_ALPHAPREMULTIPLY_ON')
materyal.renderQueue = -1
}
}
}
}