美文网首页
【每天一个Unity技巧】给游戏物体设置边缘高亮

【每天一个Unity技巧】给游戏物体设置边缘高亮

作者: 木心Sepith | 来源:发表于2017-02-10 19:00 被阅读5938次

    不知不觉都已经做游戏开发半年多的时间了,然而觉得自己的技术并没有积累多少,遂想在简书上记录一下自己平时积累的小技巧吧。

    那先定一个小目标:每天完成一篇技术文章!

    像我这样的拖延症晚期,希望不要写几天就弃坑了吧。

    前言

    在游戏开发中,经常会遇到这样的需求吧

    在游戏物体的边缘加上一圈高亮的描边效果,用来提高物体的醒目性

    这是在FPS游戏中常用到的手段,玩家的准心瞄准到了可拾取的物体,物体显示高亮效果,表示该物体可以拾取。

    h1z1

    又或者是求生之路中用高亮效果来醒目的提示队友的当前位置

    求生之路 火炬之光

    方案

    因为我在做公司的VR项目时,需要在玩家交互时进行高亮反馈,在网上找了不少的高亮插件,筛选之后选择了Highlighting System这个插件。

    下载了这个插件后,将我的代码挂到需要高亮的物体上,然后通过SwithHightlight方法进行高亮控制就可以了,方便简单。

    /******************************************************************************
     * 
     * Logs:
     * 2017-2-10  mx  Initial version:Added API SwithHightlightAPI()
     * 
     *
     ******************************************************************************/
    
    
    using HighlightingSystem;
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    /// <summary>
    /// 将此脚本挂载到需要高亮的物体上
    /// required package: Highlighting System
    /// </summary>
    public class HighlightObject : MonoBehaviour
    {
        protected Highlighter h;
    
        public enum HighlightType
        {
            Once,//变化一次
            Constant,//持续
            Flash//闪烁
        }
    
        public Color highlightColor = Color.red;
    
        void Awake()
        {
            h = gameObject.AddComponent<Highlighter>();
            if (Camera.main.GetComponent<HighlightingRenderer>() == null)
            {
                Camera.main.gameObject.AddComponent<HighlightingRenderer>();
            }
        }
    
        /// <summary>
        /// API:修改物体是否开启高亮
        /// </summary>
        /// <param name="showHightlight">是否开启高亮</param>
        public void SwithHightlight(bool showHightlight)
        {
            SwithHightlight(showHightlight, HighlightType.Once);
        }
    
        /// <summary>
        /// API:修改物体是否开启高亮
        /// </summary>
        /// <param name="showHightlight">是否开启高亮</param>
        /// <param name="type">高亮类型</param>
        public void SwithHightlight(bool showHightlight, HighlightType type)
        {
            switch (type)
            {
                case HighlightType.Once:
                    if (showHightlight)
                        h.ConstantOnImmediate(highlightColor);
                    else
                        h.ConstantOffImmediate();
                    break;
    
                case HighlightType.Constant:
                    if (showHightlight)
                        h.ConstantOn(highlightColor);
                    else
                        h.ConstantOff();
                    break;
    
                case HighlightType.Flash:
                    if (showHightlight)
                        h.FlashingOn(highlightColor, new Color(0, 0, 0, 0));
                    else
                        h.FlashingOff();
                    break;
            }
        }
    
        #region 测试:QWE键控制高亮类型
        void Update()
        {
            if (Input.GetKeyDown(KeyCode.Q))
            {
                SwithHightlight(true);
            }
            else if (Input.GetKeyUp(KeyCode.Q))
            {
                SwithHightlight(false);
            }
            if (Input.GetKeyDown(KeyCode.W))
            {
                SwithHightlight(true, HighlightType.Constant);
            }
            else if (Input.GetKeyUp(KeyCode.W))
            {
                SwithHightlight(false, HighlightType.Constant);
            }
            if (Input.GetKeyDown(KeyCode.E))
            {
                SwithHightlight(true, HighlightType.Flash);
            }
            else if (Input.GetKeyUp(KeyCode.E))
            {
                SwithHightlight(false, HighlightType.Flash);
            }
        }
        #endregion
    
    }
    
    
    

    相关资料

    AssetStore
    官方网站

    相关文章

      网友评论

          本文标题:【每天一个Unity技巧】给游戏物体设置边缘高亮

          本文链接:https://www.haomeiwen.com/subject/mmfnittx.html