动态修改材质自发光
- 新建一个场景,关闭方向光;目的:自发光更明显
- 创建2个立方体;
- 创建一个材质;
- 材质赋值给新建的两个立方体;
- 两个立方体挂载脚本。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TestEmssion : MonoBehaviour
{
MaterialPropertyBlock block;
Renderer render;
private void Start()
{
block = new MaterialPropertyBlock();
render = GetComponent<Renderer>();
}
private void OnMouseEnter()//鼠标移入 碰撞体触发
{
render.GetPropertyBlock(block);
render.material.EnableKeyword("_EMISSION");//开启自发光
block.SetColor("_EmissionColor", Color.blue);//设置颜色
render.SetPropertyBlock(block);
}
private void OnMouseExit()//鼠标移出 碰撞体触发
{
render.GetPropertyBlock(block);
block.SetColor("_EmissionColor", Color.blue);//设置颜色
render.material.DisableKeyword("_EMISSION");//关闭高光
render.SetPropertyBlock(block);
}
}
存在问题
编辑模式下,有高光效果。发布后,没有高光效果。
解决方法
- 材质勾选Emssion;
- Global Illumination 设置为Realtime或者None即可
原因
Global Illumination:指定此材质发出的光如何影响附近其他游戏对象的环境光照。
- Realtime:Unity 将此材质的⾃发光添加到场景的 Realtime Global Illumination(实时全局光照)计算中。这意味着此⾃发光会影响附近游戏对象(包括正在移动的游戏对象)的光照。
- Baked:Unity 将此材质的⾃发光烘焙到场景的静态全局光照中。此材质会影响附近静态游戏对象的光照,但不会影响动态游戏对象的光照。但是,光照探针仍然会影响动态游戏对象的光照。
- None:此材质的⾃发光不会影响场景中的实时光照贴图、烘焙光照贴图或光照探针。此⾃发光不会照亮或影响其他游戏对象。