前言
关于3D描边,其实之前有用shader弄过一个:【实现100个unity特效】shader实现3D物品闪光和描边效果
但是很遗憾的是他不支持URP项目,所以现在推荐这款插件,他能很好的支持URP,对于HDRP我没有试过,官方也没有说明,需要的可以去试试看
地址
https://assetstore.unity.com/packages/tools/particles-effects/quick-outline-115488#reviews
介绍
快速轮廓是一个世界空间轮廓工具,可为任何对象添加实心轮廓。
它非常适合 VR。
许多轮廓着色器在屏幕空间中工作,这使得它们的速度很慢,而且它们不支持 MSAA。如果他们确实在世界空间中工作,那么他们在硬角落里有“间隙”。快速大纲解决了这些问题。
Quick Outline 最初是为 VR 设计的,因此它支持实例化立体渲染和 MSAA。它在任何 HMD 中看起来都很棒,并且不会影响帧速率。
- 专为 VR 设计(包括单次通过)
- 支持 MSAA
- 与后处理堆栈
兼容 - 多种轮廓模式 - 轻巧且高性能
使用例子
预制体挂载脚本
效果
代码控制轮廓显示隐藏
private void Update() { // 发射一条从相机视口中心向屏幕内部发出的射线 Ray ray = Camera.main.ViewportPointToRay(new Vector3(0.5f, 0.5f, 0)); RaycastHit hit; // 检测射线是否击中物体 if (Physics.Raycast(ray, out hit)) { GameObject objectHitByRaycast = hit.transform.gameObject; // 如果被射线击中的物体有 Weapon 组件 if (objectHitByRaycast.GetComponent<Weapon>()) { // 获取 Weapon 组件并启用 outline Weapon hoveredWeapon = objectHitByRaycast.GetComponent<Weapon>(); hoveredWeapon.GetComponent<Outline>().enabled = true; } else { // 如果被射线击中的物体没有 Weapon 组件,或者没有 Outline 组件,则禁用 outline if (hoveredWeapon != null) { hoveredWeapon.GetComponent<Outline>().enabled = false; } } } }