Unity3D 将 GameObject 渲染为线框

问题描述

我是 Unity3D 的新手,有一个关于游戏对象渲染的问题。 我需要一个 .obj 文件中的模型,所以我只是将它导入并能够将它作为预制件放置在游戏视图中。我还添加一个用于移动和转动此对象的脚本。

我想要做的是将对象显示为线框,以便用户识别对象结构但可以看穿它。 我发现这个示例脚本可以放在相机上

using UnityEngine;

public class Example : MonoBehavIoUr
{
    // Attach this script to a camera,this will make it render in wireframe
    void OnPreRender()
    {
        GL.wireframe = true;
    }

    void OnPostRender()
    {
        GL.wireframe = false;
    }
}

我从这里得到了这个例子:https://docs.unity3d.com/ScriptReference/GL-wireframe.html

我的问题可以在图片中看到。 它以某种方式渲染对象两次。第一个线框看起来和我想要的一模一样,但是第二个很奇怪,我不知道它为什么在那里以及如何摆脱它。如果这有助于调试,不需要的对象也会与线框平行移动。

enter image description here

将对象显示为线框的最佳方式是什么? 提前致谢!

解决方法

使用 OnPostRender 不是可行的方法,因为您在相机已经渲染完之后再进行更改。如果对象应始终显示为线框,则应将线框着色器应用于对象 Material。 AFAIK untiy 没有内置线框着色器,但有多个站点提供教程或创建线框着色器的 repos,如果您使用谷歌搜索,您可以轻松找到它们。

编辑:这是来自 Shaders Laboratory

的示例

编辑 2:我假设您使用两个相机渲染场景,并且无线框对象(与线框对象相同的对象)是使用不使用线框的第二个相机渲染的对象。如果你真的想这样使用它,那么你应该给对象添加一个 Layer 并告诉另一个相机(在剔除蒙版下)不要用这个层渲染对象。