Unity 高亮插件HighlightPlus介绍

news2024/12/26 9:25:12

仅对官方文档进行了翻译

注意:官方文档本身就落后实际,但对入门仍很有帮助,核心并没有较大改变,有的功能有差异,以实际为准.(目前我已校正了大部分差异,后续我会继续维护该文档)

为什么为该插件做翻译?功能强大,使用简单,且还在维护.

 

387d40d03f4e4975ad134e8c86eede4a.png

 

4ba5a34a773745d299a974ee910766b9.png

基于此版本的内置渲染管线文档

快速开始与演示场景


1. 将资源导入到你的项目中,或创建一个空项目。
2. 进入Demo文件夹,运行演示场景以快速测试资源效果。
3. 查看演示场景1中附加在Demo游戏对象上的脚本代码。

        演示场景包含3个附带Highlight Effect(高亮效果)和Highlight Trigger(高亮触发器)脚本的球体。每个球体都有以下功能:
        Highlight Effect脚本包含所有效果的设置和外观属性。如果你勾选“Highlighted”复选框,效果会立即呈现。
        Highlight Trigger组件检测指针的位置,并在其经过游戏对象时触发。当这种情况发生时,它会激活上一个组件的“Highlighted”复选框,并在指针离开游戏对象时禁用该复选框。

        另外,你可以通过顶部菜单GameObject -> Effects -> Highlight Plus -> Create Manager来创建一个“Highlight Manager”(高亮管理器)。此命令将创建一个附有Highlight Manager脚本的游戏对象,负责检测与任何符合层级和管理器中其他设置的游戏对象的鼠标交互,并相应地高亮显示。

 

如何在项目中使用该资源

选项1:高亮显示/自定义游戏对象

de141edccddc420294544629e269f7e7.png
        给任意游戏对象添加HighlightEffect.cs脚本,自定义外观属性。
        可选:给游戏对象添加HighlightTrigger.cs脚本。当鼠标经过该游戏对象时,它会激活高亮效果。游戏对象上必须有一个碰撞器。注意:给游戏对象添加HighlightTrigger.cs脚本时,会自动添加HighlightEffect组件。

66225f5cd34e4960a800671b8a856d3b.png

        在Highlight Effect检查器中,你可以指定除了父对象以外,还有那些对象也会受到效果影响。检查器中的“Include”(包含)属性允许以下选项:
 a) 仅影响此对象
 b) 影响此对象及其子对象
 c) 从根对象到子对象的所有对象
 d) 所有属于某一层级的对象
 e) 通过脚本指定的自定义目标(参见高级主题与备注)

选项2:自动高亮显示/自定义任意游戏对象

8f7578d04d224f15ac2188ae66905931.png
        选择顶部菜单GameObject -> Effects -> Highlight Plus -> Create Manager。
        定制Highlight Manager的行为设置。该设置将应用于由管理器高亮显示的任何游戏对象。但如果某个游戏对象已经有HighlightEffect组件,管理器将优先使用该对象的设置。

忽略特定游戏对象的高亮显示


        你还可以给不希望被高亮的游戏对象添加一个“Highlight Effect”组件,并勾选“Ignore”(忽略)复选框。


        如果你在使用Highlight Manager,它也提供了一些过滤选项, Layer Mask选项。

 

 

 

高亮显示与选择

        Highlight Plus 提供了一项集成在 Highlight Manager(高亮管理器)中的选择功能,可以根据对象是否被选中以不同的方式绘制它们。你可以通过点击对象来选择任意数量的对象。

ca6e33b4e5c346998d7d66f9d3718ba2.png

 

高亮显示


        指的是一种临时效果,使对象显示出轮廓、发光或其他类型的效果。例如,使用 Highlight Trigger 或 Highlight Manager 组件时,若启用了“Highlight On Hover”(悬停高亮)复选框,当指针悬停在目标对象上时,资源会自动“高亮”目标对象。当指针移开对象时,高亮效果会消失。
        你还可以通过脚本调用 `SetHighlighted()` 方法或设置 `HighlightEffect` 组件的 `highlighted` 属性,来手动切换高亮效果的开/关。
        演示场景Demo1展示了高亮显示球体的示例。

选择


        指的是在点击对象时保持高亮效果可见的能力。要启用新的选择功能,请勾选“Select On Click”(点击选择)选项,并指定一个“selected”(已选择)配置文件和一个“selected and highlighted”(已选择并高亮)配置文件:
        已选择配置文件:用于可视化仅被选择(未高亮)对象的配置文件。
        已选择并高亮配置文件:用于同时被选择和高亮对象的配置文件。

        Highlight Manager 附带的 Highlight Effect 包含默认的高亮设置,用于高亮未被选中的对象。
Highlight Manager 脚本公开了一个 `selectedObjects` 公共属性,可通过脚本获取当前选中的对象列表。
        你可以使用 Highlight Manager 的 `SelectObject`、`ToggleObject` 和 `UnselectObject` 方法,通过脚本手动控制场景中任何对象的选择状态。

演示场景Demo2展示了通过点击球体进行选择的示例。

 

Highlight Effect 组件详细介绍


Profile: 允许分配具有自定义设置的配置文件。你可以点击“Create/Highlight Plus Profile”来创建配置文件,自定义并将其用于多个Highlight Effect组件中。

常规设置

 

49e30c3e84ed40ba87c3b89d24408dac.png

Cameras Layer Mask: 让你指定哪些相机可以渲染效果。默认情况下,所有相机都可以。


Ignore Object Visibility: 默认情况下,如果对象在屏幕上不可见,Highlight Plus将不会渲染效果。如果使用了GPU实例渲染工具且不使用常规渲染器组件,请启用此选项以强制渲染效果。


Reflection Probes: 启用以在反射探针相机上渲染效果。


Normals Option: 提供多个选项以平滑或重新定向对象几何体的法线。仅在Fast、Average或High质量模式下用于轮廓和发光效果(基于网格的效果,不用于最高质量模式或屏幕空间模式)。


GPU Instancing: 默认启用,改善轮廓和发光效果的渲染性能。

高亮选项

该组件在和其他不同的组件协同会对自身产生影响

不和HighlightManager一起使用

ea5ff87ab1aa407eaa96f152fabbbca1.png

和HighlightManager一起使用

16e5604fe9004006b82a67b223f900cd.png
Ignore: 允许禁用此对象上的任何效果。如果使用Highlight Manager,仍会使用此高亮效果组件的值。


Include: 允许指定哪些其他对象也会被高亮显示。例如,你可以在一组对象的根对象上使用单个高亮效果,并包含所有子对象。如果它们重叠,轮廓和发光效果将结合在一起,并在整个组周围显示一个轮廓。


Object Name Filter: 允许根据名称过滤要包含的对象(根据Include选项)。例如,如果你有5个子对象,可以使用前缀或后缀来指定哪些对象将被高亮显示。


Combine Meshes: 对于不单独旋转的对象,此选项非常有用。Highlight Plus将自动合并组的网格,显著减少绘制调用次数。


Alpha Cut Off: 应用于高亮效果的Alpha截断,适用于半透明对象或具有孔洞或透明部分纹理的对象(如叶子、栅栏等)。


Cull Back Faces: 不对背面应用效果。默认启用。


Fade In/Out Duration: 为指定的持续时间应用渐隐效果。


Constant Width: 无论对象到相机的距离如何,都保持轮廓或发光宽度恒定。

 

 

轮廓效果选项

 

0051f246547941cf91899ceffa71a7ed.png

轮廓通常显示为对象周围的一条细的彩色线条。

Outline: 控制轮廓的透明度。值为0时,完全禁用该效果。


Width: 轮廓的宽度。前一部分提到的“Constant Width”(恒定宽度)选项可能会影响实际的可见宽度。


Color: 轮廓的颜色。


Quality: 提供四种质量模式:Fast(快速)、Average(普通)、High(高)和Highest(最高)。前三种质量模式使用基于网格的渲染技术,通常渲染速度较快。Highest质量模式使用屏幕空间效果,提供更平滑的结果。质量模式的效果可能因对象的特性而异,因此可以根据实际效果选择最适合的模式,而不必拘泥于名称。例如,“Fast”质量模式通常适合简单对象。


Visibility: 控制轮廓的Z缓冲测试。可以指定轮廓是否应在所有物体之上显示,或仅在对象被遮挡时可见(还可以查看透视效果获取更多选项),或者选择“Normal”,即对象可见时轮廓也可见。

 

外部光晕效果选项

 

外部光晕效果显示在对象周围,通常比轮廓更宽,类似于亮光或光晕效果。

463a594cedf14213bf79ea8fb8ce8f03.png

Outer Glow(外部光晕):控制外部光晕的透明度。值为0会禁用此效果。

Width(宽度):光晕的宽度。请检查“Highlight Options”部分中的“Constant Width”设置,因为它可能会影响实际显示的宽度。

Visibility(可见性):控制效果的Z缓冲测试。你可以指定光晕是否应该在所有事物之上显示、仅在对象被遮挡时显示,或者正常显示(即当对象可见时光晕也可见)。

Dithering(抖动):仅在基于网格的质量模式下使用,可以控制光晕使用的抖动样式。这是一个可选的艺术效果。你可以禁用它以显示实心光晕。

Blend Passes(混合通道):在基于网格的质量模式下,外部光晕是通过多个自定义通道渲染对象网格来实现的。启用此选项时,每个通道将与前一个通道混合。如果禁用此选项,每个通道将以叠加方式渲染。

Glow Passes(光晕通道):允许你配置每个光晕通道的数量及特性,包括颜色、偏移和透明度(alpha)。

Animation Speed(动画速度):如果该值大于0,外部光晕将进行动画处理。

        要通过脚本快速更改光晕颜色,可以调用HighlightEffect组件中的SetGlowColor(color)方法。请查看演示场景1中的示例。

 

内部光晕效果选项

 

内部光晕在对象内部呈现类似于边缘光效的效果。

5b3a3e3c87564ef9ae0fea3d809800ad.png

Inner Glow(内部光晕):控制内部光晕效果的透明度,该效果在对象内部呈现类似边缘光的效果。值为0时禁用此效果。

Color(颜色):此效果的颜色。

Width(宽度):内部光晕的范围。

Visibility(可见性):控制效果的Z缓冲测试。你可以指定光晕是否应该在所有事物之上显示、仅在对象被遮挡时显示,或者正常显示(即当对象可见时光晕也可见)。

 

覆盖效果选项

覆盖效果在对象上添加具有自定义透明度的实心颜色。

895fd55257554c8caa124ab05ed1ce47.png

Overlay(覆盖):控制该效果的透明度。值为0禁用此效果。

Color(颜色):效果的颜色。

Blending(混合):确定颜色与对象原始颜色/纹理的混合程度。

Min Intensity(最小强度):混合的最小强度。

Animation Speed(动画速度):覆盖效果的“脉冲”速度。输入0以禁用动画。

 

目标效果选项

目标效果在高亮目标上方添加一个动画对象。

53bac9108764462dbb155a014710ae7d.png

Texture(纹理):用于此效果的覆盖纹理。

Color(颜色):该纹理的色调颜色。

Center(中心):指定目标应该被定位的位置。如果未设置,将使用高亮对象的中心。然而,如果对象有多个部分或子对象,你可以分配子对象的变换(例如,怪物的身体部分)。

Rotation Speed(旋转速度):对象旋转的速度。输入0以禁用旋转。

Initial / End Scale(初始/结束缩放):用于创建缩放/脉动效果。

Scale To Object Bound(按对象边界缩放):目标图像的缩放将与对象的屏幕边界成比例(如果对象变大,目标效果也会扩大)。注意,如果对象旋转并且其边界发生变化,目标效果的大小也会发生变化。这可能会导致奇怪的效果,因此对于旋转的角色/对象,最好禁用此选项。

Transition Duration(过渡持续时间):覆盖纹理出现/消失时的透明度过渡持续时间。

Align To Ground(与地面对齐):将目标精灵投射到地面(如贴花)。在此模式下,垂直墙将通过使用相机深度纹理和场景的重建法线被检测,因此贴花不会在墙上显得拉伸。使用Fade Power选项可以随高度减弱目标精灵的效果。

Stay Duration(停留持续时间):当对象不再被高亮显示时,覆盖纹理将显示多长时间,直到它淡出。值为0表示效果将保持可见,直到它被禁用。

Visibility(可见性):控制效果的Z缓冲测试。你可以指定光晕是否应该在所有事物之上显示、仅在对象被遮挡时显示,或者正常显示(即当对象可见时光晕也可见)。

透视效果选项

 

透视效果(又称X光效果)显示当对象被其他元素遮挡时,例如墙壁。

85bd95a5edae44cdb538bf7ae30a1344.png

See Through(透视):决定透视效果是否仅在对象被高亮显示时可见,或者始终在对象被遮挡时可见,或者从不显示。使用“Never”完全禁用此效果。

Occlude Layer(遮挡层):如果该值与Everything不同,资源将使用光线投射来尝试确定是否有属于匹配层的对象遮挡了高亮对象。如果它击中了遮挡对象,透视效果将被激活。

Threshold(阈值):使用遮挡层时,对象的边界大小乘以此值进行遮挡测试。你可以使用此值避免误报,只有当对象真的在另一个实心对象后面时才显示透视效果。

Check Individual Objects(检查单个对象):默认情况下,Highlight Plus会将所有受此组件影响的子对象的边界组合在一起再进行遮挡测试。如果启用此选项,遮挡测试将对每个单独的子对象执行。

Depth Offset / Max Depth(深度偏移/最大深度):为效果提供距离限制(相对于遮挡物的距离)。值为0时不使用这些选项。

Accurate(准确):使用遮挡层时,此选项启用像素级别的遮挡测试。

Intensity(强度):效果的亮度强度。

Color & Color Blend(颜色与颜色混合):控制颜色及其与对象原始颜色/纹理的混合强度。

Noise(噪声):可选的艺术驱动效果。

Border When Hidden(隐藏时的边框):此选项允许你仅在透视效果激活时显示额外的轮廓。

Ordered(有序的):启用后,渲染透视效果时将尊重相机的相对距离。

使用透视效果的常见场景是当你希望角色被墙遮挡而不是被地面或天花板遮挡。解决方案是将你的墙壁分配到一个与地面/天花板不同的层,并在透视效果的遮挡层中指定该层。启用“Accurate”选项以获得最佳效果。

Hit-FX效果选项

ce748e5df35040ac9cfe06c620839b23.png

此效果仅在播放模式下可用。它允许你通过短暂更改受击对象的颜色来显示“打击”效果。在播放模式下,你可以测试它。

请参考下一节中的“执行Hit-FX效果”以获取示例代码。

 

脚本支持

使用脚本添加效果

你可以使用 GetComponent<HighlightEffect>() 来获取游戏对象上组件的引用。大多数在检查器中显示的属性都可以通过代码访问,例如:

 
using HighlightPlus;
...
HighlightEffect effect = myGameObject.GetComponent<HighlightEffect>();
effect.outline = true;
effect.outlineColor = Color.blue;
effect.SetGlowColor(Color.yellow);
effect.UpdateMaterialProperties();

要控制高亮的状态,可以使用:

effect.SetHighlighted(true/false);

或者设置:

effect.highlighted = true/false.

重要提示:如果你更改了对象的层次结构(例如更改了它的父对象或将其附加到另一个对象上),你需要调用 effect.Refresh() 来让 Highlight Plus 更新其内部数据。

在运行时设置配置文件

可以通过调用 ProfileLoad()ProfileReload() 方法并传入你的高亮配置文件对象来设置运行时的配置文件。

在运行时更改属性

当你在运行时更改脚本的特定属性时,请调用 UpdateMaterialProperties() 以确保这些更改立即生效。

执行 Hit-FX 效果

Hit-FX 效果是一种快速的闪光覆盖效果,可以通过代码调用。只需调用 HitFX() 并传入所需的参数:

using HighlightPlus;
...
HighlightEffect effect = myGameObject.GetComponent<HighlightEffect>();
effect.HitFX(color, duration, initial_intensity);

按需启动 Target FX

调用 effect.StartTargetFX() 方法可以随时启动 Target FX。注意,如果你通过脚本更改了目标效果的属性,可能需要调用 UpdateMaterialProperties() 来确保新值在目标效果的执行中得以反映。

通过脚本更改高亮目标

通过脚本配置要被高亮的对象可以通过 Include 选项来设置。然而,你可以使用两种方式覆盖该选择:

effect.SetTarget(transform);

将指示脚本在给定对象上执行效果。

effect.SetTarget(transform, Renderer[] additionalObjects);

        此方法也可以包括任意数量的其他渲染器。当你希望通过脚本定义一组对象进行高亮显示时,这很有用。

事件 / 响应高亮显示

Highlight Effect 脚本公开了两个事件 (OnObjectHighlightStartOnObjectHighlightEnd),当对象开始或结束高亮时触发。

示例:

using UnityEngine;
using HighlightPlus;

public class SphereHighlightEventExample : MonoBehaviour {

   void Start() {
       HighlightEffect effect = GetComponent<HighlightEffect>();
       effect.OnObjectHighlightStart += ValidateHighlightObject;
   }

   bool ValidateHighlightObject(GameObject obj) {
       // 用于细控制对象是否可以被高亮显示;返回 false 取消高亮
       return true;
   }
}

        这些事件同样在 HighlightManagerHighlightTrigger 中公开。例如,使用 HighlightManager 时,你可以关联以下事件:OnObjectHighlightStartOnObjectHighlightEndOnObjectSelectedOnObjectUnselected

HighlightManager.instance.OnObjectHighlightStart += MyEventHandler;

事件 / 响应选择

HighlightManager 或 HighlightTrigger 组件提供了选择事件:OnObjectSelectedOnObjectUnSelected。查看演示场景2中的代码示例。

使用 Highlight Manager

using UnityEngine;
using HighlightPlus;

public class SelectionEventExample : MonoBehaviour {

   void Start() {
       HighlightManager.instance.OnObjectSelected += SelectObject;
       HighlightManager.instance.OnObjectUnSelected += UnSelectObject;
   }

   bool SelectObject(GameObject obj) {
       // 用于细控制对象是否可以被选中;返回 false 取消选择
       return true;
   }

   bool UnSelectObject(GameObject obj) {
       // 用于细控制对象是否可以被取消选择;返回 false 取消取消选择操作
       return true;
   }
}

使用 Highlight Trigger

using UnityEngine;
using HighlightPlus;

public class SelectionEventExample : MonoBehaviour {

   void Start() {
       HighlightTrigger ht = GetComponent<HighlightTrigger>();
       ht.OnObjectSelected += SelectObject;
       ht.OnObjectUnSelected += SelectObject;
   }

   bool SelectObject(GameObject obj) {
       // 用于细控制对象是否可以被选中;返回 false 取消选择
       return true;
   }

   bool UnSelectObject(GameObject obj) {
       // 用于细控制对象是否可以被取消选择;返回 false 取消取消选择操作
       return true;
   }
}

消息传递

当对象被高亮显示或高亮结束时,Highlight Effect 会向附加在游戏对象上的任何脚本发送 “HighlightStart” 和 “HighlightEnd” 消息。你可以使用以下代码获取这些消息:

using UnityEngine;
using HighlightPlus;

public class MyBehaviour : MonoBehaviour {

  void HighlightStart() {
      Debug.Log("Object highlighted!");
  }

  void HighlightEnd() {
      Debug.Log("Object not highlighted!");
  }
}

手动选择/切换/取消选择对象

Highlight Manager 提供了“选择”状态功能,你可以通过调用 SelectObjectToggleObjectUnselectObject 方法来手动控制对象的选择状态。以下代码摘自演示场景2:

using UnityEngine;
using HighlightPlus;

namespace HighlightPlus.Demos {

    public class ManualSelectionDemo : MonoBehaviour {

        HighlightManager hm;

        public Transform objectToSelect;

        void Start() {
            hm = FindObjectOfType<HighlightManager>();
        }

        void Update() {
            if (Input.GetKeyDown(KeyCode.Alpha1)) {
                hm.SelectObject(objectToSelect);
            }
            if (Input.GetKeyDown(KeyCode.Alpha2)) {
                hm.ToggleObject(objectToSelect);
            }
            if (Input.GetKeyDown(KeyCode.Alpha3)) {
                hm.UnselectObject(objectToSelect);
            }
        }
    }
}

高级主题与注意事项

法线选项

Highlight Plus 可以自动优化网格法线,以提供更好的效果。可用的选项有:

 

Smooth(平滑):在使用快速或高质量级别时,这会改善轮廓效果(不适用于最高质量模式)。

Preserve Original(保留原始):在某些情况下,你可能希望动态修改你的网格,并且不希望 Highlight Plus 缓存该网格——启用“Preserve Original Mesh”以强制 Highlight Plus 始终使用原始网格。

Reorient(重新定向):这将用一个从对象中心指向外部的向量替换现有法线。对于某些2D几何体或没有法线的对象很有用。

注意:Highlight Plus 不会更改你对象的原始网格,因此这些操作是安全的。

进入体积时的高亮效果

        可以通过对象进入或退出体积时自动启用或禁用高亮效果。为对象添加 HighlightTrigger 组件,并选择“Volume”作为触发模式。

        此脚本使用 OnTriggerEnter / OnTriggerExit 事件。体积必须具有标记为 IsTrigger 且为静态的碰撞体。进入体积的对象必须具有 Rigidbody 组件才能触发这些事件。

深度裁剪选项

        在高质量模式下使用轮廓或外部光晕效果时,资源依赖深度缓冲区来执行正确的深度剔除或裁剪。然而,当启用MSAA(多重采样抗锯齿)时,Highlight Plus 渲染时的深度缓冲区不可用。如果项目需要MSAA并希望进行深度裁剪/剔除,可以在 Highlight 检查器中启用“Depth Clip”选项。此选项仅在高质量下的轮廓或外部光晕时使用(其他质量模式工作方式不同,不需要特殊处理)。

透明对象与深度裁剪选项的兼容性

        深度裁剪选项仅适用于高质量模式下的轮廓和外部光晕效果。启用后,将使用特殊的 _CameraDepthTexture 缓冲区来裁剪效果。此选项在需要使用 MSAA 时很有用,因为启用MSAA会禁用高质量模式下的深度检测。透明对象默认不写入此特殊纹理,除非你在菜单 GameObject -> Effects -> Highlight Plus -> "Make Transparent Object Compatible With Depth Clip" 中为透明对象添加该功能。

        添加该功能后,确保高亮对象使用的轮廓或外部光晕效果的“Depth Clip”选项也被启用。

透明着色器与透视效果的兼容性

        如果希望透视效果能够透过其他透明对象显示,则需要修改这些对象的着色器,使其能够写入深度缓冲区(默认情况下,透明对象不写入Z缓冲区)。可以通过顶部菜单 GameObject -> Effects -> Highlight Plus -> "Add Depth To Transparent Object" 来实现。

        需要注意的是,强制透明对象写入深度缓冲区可能会导致透明度问题。

UI遮罩

为防止 Highlight Plus 效果显示在任何 UI 或精灵元素之上,有几种方法:

a) 使用 Screen Space Overlay 模式来渲染画布。这种模式在渲染循环的末尾渲染 UI,因此 UI 将显示在任何 Highlight Plus 效果之上。

b) 使用第二个相机渲染世界空间的 UI。根据你的主相机和 UI 相机的剔除掩码进行设置(确保 UI 相机只渲染 UI),并将 UI 相机的清除标志设置为“Depth only”(仅深度)。确保 UI 相机的深度值大于主相机,这样 UI 相机会在主相机之后渲染。这种设置简单并且能确保世界空间的 UI 显示在任何 Highlight Plus 效果之上。

c) 创建一个 UI 面板并分配 HighlightUIMask 材料,该材料位于 HighlightPlus/Resources/Materials 文件夹中。此特殊材质会写入模板缓冲区,并防止 Highlight Plus 效果渲染在该面板之上。该面板不会可见,它仅用于屏蔽该屏幕部分的效果。

静态批处理

        标记为静态的对象需要 MeshCollider 才能被高亮(其他类型的碰撞体无法工作)。这是因为 Unity 会将静态对象的网格合并,因此无法访问未批处理的对象的单个网格。

        注意:MeshCollider 可以被禁用。其唯一的作用是允许 Highlight Effect 在 Unity 开始场景时获取合并前的原始网格。

取消透视效果对某些对象的影响

        可以为想要阻挡透视效果的对象添加 HighlightSeeThroughOccluder 脚本。如果有任何遮挡对象使用射线投射模式遮挡高亮对象,HighlightEffect.isSeeThroughOccluded 将返回 true

排除子网格

        使用 SubMesh Mask 属性指定哪些子网格会受到影响。

        默认情况下,值 -1 表示所有子网格都被包含在内。这是一个组件掩码字段。此效果会执行以下测试来确定是否包含子网格:

(1 << subMeshIndex) & SubMeshMask != 0

 

示例:

  • 如果你只想包含子网格1(索引1),请将值设置为 1 << 1
  • 如果只想包含子网格2,请将值设置为 1 << 2
  • 对于子网格3,将值设置为 1 << 3
  • 对于子网格2和3,将值设置为 1 << 2 + 1 << 3

通常,这个掩码字段的工作方式与 Unity 中的层级掩码或剔除掩码类似。

自定义顶点变换

        你可以在 CustomVertexTransform.cginc 文件中应用自定义的顶点变换。函数 ComputeVertexPosition 被所有 Highlight Plus 着色器使用,因此这是一个集中应用自定义顶点变换的方便位置。

        请注意,任何对该文件的修改将在你升级 Highlight Plus 时被覆盖。

控制可以选择的对象

        Highlight Manager 提供了两个事件 OnObjectSelectedOnObjectUnSelected,当用户选择或取消选择对象时触发。这些事件可以用于根据事件处理程序返回的布尔值来取消选择或取消取消选择操作:

using UnityEngine;
using HighlightPlus;

public class ControlExample : MonoBehaviour {

   void Start() {
       HighlightManager manager = FindObjectOfType<HighlightManager>();
       manager.OnObjectSelected += ValidateSelection;
   }

   bool ValidateSelection(GameObject obj) {
       // 用于细控制对象是否可以被选中;返回 false 取消选择
       return true;
   }
}

自定义排序

        默认情况下,Highlight Plus 效果在透明队列之后渲染,顺序任意。然而,你可以通过向场景中添加以下脚本来控制效果的排序:

using UnityEngine;
using HighlightPlus;

[ExecuteAlways]
public class CustomRendering : MonoBehaviour {

    void OnEnable() {
        HighlightEffect.customSorting = true;
    }

    void Update() {
        HighlightEffect.effects.Sort(Comparer);
    }

    int Comparer(HighlightEffect effect1, HighlightEffect effect2) {
        float dist1 = effect1.transform.position.z;
        float dist2 = effect2.transform.position.z;
        return dist2.CompareTo(dist1);
    }
}

在这种情况下,效果将按Z轴位置排序。你可以根据需要对 effects 列表进行排序。

END

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2144893.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言之预处理详解(完结撒花)

目录 前言 一、预定义符号 二、#define 定义常量 三、#define定义宏 四、宏与函数的对比 五、#和## 运算符 六、命名约定 七、#undef 八、条件编译 九、头文件的包含 总结 前言 本文为我的C语言系列的最后一篇文章&#xff0c;主要讲述了#define定义和宏、#和##运算符、各种条件…

9.18作业

提示并输入一个字符串&#xff0c;统计该字符串中字母、数字、空格、其他字符的个数并输出 代码展示 #include <iostream>using namespace std;int main() {string str;int countc 0; // 字母计数int countn 0; // 数字计数int count 0; // 空格计数int counto 0;…

IEEE-754 32位十六进制数 转换为十进制浮点数

要将 IEEE-754 32位十六进制数 转换为 十进制浮点数&#xff0c;可以使用LabVIEW中的 Type Cast 函数。以下是一些具体步骤&#xff0c;以及相关实例的整理&#xff1a; 实现步骤&#xff1a; 输入十六进制数&#xff1a;在LabVIEW中&#xff0c;首先需要创建一个输入控制器&am…

2024最新软件测试面试题【1000道题含答案】

1、自动化代码中,用到了哪些设计模式? 单例设计模式 工厂模式PO设计模式数据驱动模式面向接口编程设计模式 2、什么是断言( Assert) ? 断言Assert用于在代码中验证实际结果是不是符合预期结果&#xff0c;如果测试用例执行失败会抛出异常并提供断言日志 3、什么是web自动化…

C++之继承(通俗易懂版)

前言&#xff1a;我们都知道C是一门支持过程化编程&#xff0c;面向对象的高级语言&#xff0c;既然是面向对象的语言&#xff0c;那么对于对象而言&#xff0c;对象会有很多中相同的属性&#xff0c;举个例子:你和你老师&#xff0c;你们都有着共同的属性和身份&#xff0c;例…

Longman Dictionary of Contemporary English (朗文当代高级英语辞典)

Longman Dictionary of Contemporary English {朗文当代高级英语辞典} 1. Longman Dictionary of Contemporary English1.1. school References 1. Longman Dictionary of Contemporary English https://www.ldoceonline.com/ 1.1. school https://www.ldoceonline.com/dicti…

C++: 高效使用智能指针的8个建议

前言&#xff1a;智能指针是C11的新特性&#xff0c;它基于RAII实现&#xff0c;可以自动管理内存资源&#xff0c;避免内存泄漏的发生&#xff0c;但是智能指针也并不是万能的&#xff0c;如果不正确使用智能指针&#xff0c;也会导致内存泄漏的发生&#xff0c;因此&#xff…

嵌入式人工智能项目及人工智能应用项目——大合集列表查阅

本文的项目合集列表可能更新不及时&#xff08;会及时更新&#xff09;&#xff0c;可查阅实时更新的链接如下。 嵌入式人工智能及人工智能应用项目合集实时更新链接如下&#xff1a; 阿齐嵌入式人工智能及人工智能应用项目合集 (kdocs.cn)https://www.kdocs.cn/l/cc97tuieys4…

MacOS安装MAT教程

MAT下载地址MAT下载地址MAT下载地址MAT下载地址 如果不知道你的芯片类型, 可以执行如下命令 uname -m

Fiddler抓包工具实战

文章目录 &#x1f7e2; Fiddler入门到精通&#x1f449;主要功能&#x1f449;使用场景 &#x1f7e2; 一、Fiddler抓包和F12抓包对比&#x1f7e2; 二、Fiddler的核心功能&#x1f7e2; 三、Fiddler的工作原理&#x1f7e2; 四、Fiddler功能配置使用&#x1f449;规则设置&am…

力扣 11题 盛最多水的容器

前言&#xff1a;这道题其实挺有意思的&#xff0c;前段时间在刷视频的时候看都了很多博主都在讲解这道题&#xff0c;最近在写一些算法的东西&#xff0c;我就顺势刷到了这道题。在这里写一写我自己的对这道题的理解。 题目详见&#xff1a;https://leetcode.cn/problems/con…

【DAY20240918】03教你轻松配置 Git 远程仓库并高效推送代码!

文章目录 前言 git diff一、远程仓库&#xff1f;1、在 Gitee 上新建仓库&#xff1a;2、Git 全局设置&#xff1a;3、添加远程仓库&#xff1a;4、推送本地代码到远程仓库&#xff1a;5、输入用户名和密码&#xff1a;6、后续推送&#xff1a; 二、全情回顾三、参考 前言 git …

谷歌浏览器扩展程序怎么提升CSS开发效率

在现代Web开发中&#xff0c;CSS&#xff08;层叠样式表&#xff09;是不可或缺的一部分&#xff0c;它负责网页的视觉呈现和布局设计。为了提高CSS开发的效率&#xff0c;谷歌浏览器提供了许多实用的扩展程序。本文将介绍几个关键的扩展程序&#xff0c;并探讨如何利用它们来优…

网络安全学习(五)Burpsuite实战

bp功能确实强大&#xff0c;记录一个bp手机验证码的实例。 当然&#xff0c;首先要打开bp&#xff0c;设置好浏览器的代理。 浏览器访问实例网址www.xxx.com&#xff08;隐藏真实网址&#xff09;。 真实网址有个注册功能&#xff0c;需要手机验证码。 好的&#xff0c;我们…

深入探索Android开发之Java核心技术学习大全

Android作为全球最流行的移动操作系统之一&#xff0c;其开发技能的需求日益增长。本文将为您介绍一套专为Android开发者设计的Java核心技术学习资料&#xff0c;包括详细的学习大纲、PDF文档、源代码以及配套视频教程&#xff0c;帮助您从Java基础到高级特性&#xff0c;再到A…

『功能项目』回调函数处理死亡【54】

我们打开上一篇53伤害数字UI显示的项目&#xff0c; 本章要做的事情是使用回调函数处理怪物Boss01死亡后增加主角经验值的功能&#xff0c;以及生成一个七秒的升级特效 首先增加一个技能特效重命名为PlayerUpGradeEffect 修改脚本&#xff1a;BossCtrl.cs 修改脚本&#xff1a…

SpringBoot2:web开发常用功能实现及原理解析-@ControllerAdvice实现全局异常统一处理

文章目录 前言1、工程包结构2、POM依赖3、Java代码 前言 本篇主要针对前后端分离的项目&#xff0c;做的一个统一响应包装、统一异常捕获处理。 在Spring里&#xff0c;我们可以使用ControllerAdvice来声明一些关于controller的全局性的东西&#xff0c;其用法主要有以下三点…

PostgreSQL技术内幕11:PostgreSQL事务原理解析-MVCC

文章目录 0.简介1.MVCC介绍2.MVCC常见的实现方式3.PG的MVCC实现3.1 可见性判断3.2 提交/取消 0.简介 本文主要介绍在事务模块中MVCC(多版本并发控制&#xff09;常见的实现方式&#xff0c;优缺点以及PG事务模块中MVCC&#xff08;多版本并发控制&#xff09;的实现。 1.MVCC…

1×1卷积核【super star 卷积核】

一、11卷积的作用 我们先来给出11卷积的一般作用&#xff0c;如下所示&#xff1a; • 跨通道的特征整合 • 特征通道的升维与降维 • 减少权重参数&#xff08;卷积核参数&#xff09; 【 简化模型 】 1.1 特征通道的升维与降维/跨通道的特征整合/简化模型 输入数据&…

【Transformer深入学习】之一:Sinusoidal位置编码的精妙

看苏神的文章提到&#xff1a;Transformer原论文使用Sinusoidal位置编码&#xff0c;作为位置编码的一个显式解&#xff0c;Google 在原论文中对它的描述寥寥无几&#xff0c;只是简单提及了它可以表达相对位置信息&#xff0c;并未提及这个编码的合理性。 看了几篇文章&#x…