材质 动态自发光

动态修改材质自发光

  1. 新建一个场景,关闭方向光;目的:自发光更明显
  2. 创建2个立方体;
  3. 创建一个材质;
  4. 材质赋值给新建的两个立方体;
  5. 两个立方体挂载脚本。
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);
    }
}

存在问题

编辑模式下,有高光效果。发布后,没有高光效果。

解决方法

  1. 材质勾选Emssion;
  2. Global Illumination 设置为Realtime或者None即可

原因

Global Illumination:指定此材质发出的光如何影响附近其他游戏对象的环境光照。

  1. Realtime:Unity 将此材质的⾃发光添加到场景的 Realtime Global Illumination(实时全局光照)计算中。这意味着此⾃发光会影响附近游戏对象(包括正在移动的游戏对象)的光照。
  2. Baked:Unity 将此材质的⾃发光烘焙到场景的静态全局光照中。此材质会影响附近静态游戏对象的光照,但不会影响动态游戏对象的光照。但是,光照探针仍然会影响动态游戏对象的光照。
  3. None:此材质的⾃发光不会影响场景中的实时光照贴图、烘焙光照贴图或光照探针。此⾃发光不会照亮或影响其他游戏对象。

猜你喜欢

转载自blog.csdn.net/weixin_43796392/article/details/125493564