【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数组在脚本中
请添加图片描述

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小生云木

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值