【Unity】简单的边缘高亮

【Unity】简单的边缘高亮

工程文件下载地址

全部文件

使用方法

方法 功能
On() 打开单帧高亮显示
On(Color color) 打开单帧高亮显示
FlashingParams(Color color1, Color color2, float freq) 闪烁的参数设置
FlashingOn 打开闪烁
FlashingOn(Color color1, Color color2) 从颜色1切换到颜色2
FlashingOn(Color color1, Color color2, float freq) 从color1到color2按指定频率打开闪烁
FlashingOn(float freq) 按规定的频率打开闪光灯
FlashingOff() 关掉闪光
FlashingSwitch() 切换闪光模式
ConstantParams(Color color) 设置常量高亮颜色
ConstantOn() 淡入持续的高光
ConstantOn(Color color) 褪色在不断突出与给定的颜色
ConstantOff() 淡出持续的高光
ConstantSwitch() 切换不断凸显
ConstantOnImmediate() 立即打开持续高亮(不褪色)
ConstantOnImmediate(Color color) 立即用指定的颜色打开持续高亮(不褪色)
ConstantOffImmediate() 立即关闭持续高亮(不淡出)
ConstantSwitchImmediate() 立即切换常量高亮(不淡入/淡出)
OccluderOn() 启用遮光板模式
OccluderOff() 关闭遮光板模式
OccluderSwitch() 切换遮光板模式
Off() 关掉所有类型的高亮显示
Des() 销毁这个HighlightableObject组件

Demo

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class HighlightUser : MonoBehaviour
{
   public  enum HighType {on, ConstantOn , ConstantOnImmediate , ConstantSwitch , FlashingOn , Off }
    RaycastHit hit;
    Action<HighlightableObject> action;
    GameObject Target;
    HighType currentType;
    Color CurrentColor=Color.green;

    private HighType CurrentType {
        get {
            return currentType;
        }
        set
        {
            currentType = value;
            SetAction(currentType);
        }
   
    }
    private void Start()
    {
        CurrentType = HighType.on;
    }
    // Update is called once per frame
    void Update()
    {
        if (Input.GetMouseButton(0))
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            if (Physics.Raycast(ray,out hit))
            {
                Target = hit.collider.gameObject;
                higtObj(Target);
            }
          
        }
    }
    
    void higtObj(GameObject game)
    {
        HighlightableObject highlightableObject;
        game.TryGetComponent<HighlightableObject>(out highlightableObject);
        if (highlightableObject)
        {
            action(highlightableObject);
        }
        else
        {
            game.AddComponent<HighlightableObject>();
            higtObj(game);
        }
    }

     void SetAction(HighType type)
    {
        switch (type)
        {
            case HighType.on:
                action = On;
                break;
            case HighType.ConstantOn:
                action = ConstantOn;
                break;
            case HighType.ConstantOnImmediate:
                action = ConstantOnImmediate;
                break;
            case HighType.ConstantSwitch:
                action = ConstantSwitch;
                break;
            case HighType.FlashingOn:
                action = FlashingOn;
                break;
            case HighType.Off:
                action = Off;
                break;
            default:
                break;
        }

    }
    /// <summary>
    /// 单帧高亮
    /// </summary>
    /// <param name="highlightableObject"></param>
    private void On(HighlightableObject highlightableObject)
    {
        highlightableObject.On(CurrentColor);
    }
    /// <summary>
    /// 持续高亮
    /// </summary>
    /// <param name="highlightableObject"></param>
    private void ConstantOn(HighlightableObject highlightableObject)
    {
        highlightableObject.ConstantOn(CurrentColor);
    }
    /// <summary>
    /// 立刻持续高亮
    /// </summary>
    /// <param name="highlightableObject"></param>
    private void ConstantOnImmediate(HighlightableObject highlightableObject)
    {
        highlightableObject.ConstantOnImmediate(CurrentColor);
    }
    /// <summary>
    /// 切换不断凸显
    /// </summary>
    /// <param name="highlightableObject"></param>
    private void ConstantSwitch(HighlightableObject highlightableObject)
    {
        highlightableObject.ConstantSwitch();
    }
    /// <summary>
    /// 打开闪烁
    /// </summary>
    /// <param name="highlightableObject"></param>
    private void FlashingOn(HighlightableObject highlightableObject)
    {
        highlightableObject.FlashingOn(Color.yellow,Color.blue);
    }
    /// <summary>
    /// 关闭全部高亮
    /// </summary>
    /// <param name="highlightableObject"></param>
    private void Off(HighlightableObject highlightableObject)
    {
        highlightableObject.Off();
    }

    public void SetType(int  highType)
    {
        CurrentType = (HighType)highType;
    }
    public void SetColor(int color)
    {
        if (color==0)
        {
            CurrentColor = Color.red;
        }
        else if (color == 1)
        {
            CurrentColor = Color.green;
        }
        else if (color == 2)
        {
            CurrentColor = Color.blue;
        }
     
    }
}

问题:
打包后不显示边缘高光
原因:shader没有直接引用是不会打包的。
解决方法:简历shader引用,如创建shader数组在脚本中
请添加图片描述