在 Unity3D 中仅显示和渲染线框中的特定对象

Display and render only a specific object in wireframe in Unity3D

我想知道如何在线框中查看和渲染特定游戏对象(网格),而不是整个场景。我可以使用 GL.wireframe 将场景更改为线框,但问题是我只想在线框中查看和渲染某个对象(而不是整个场景)。有什么建议吗?

使用图层。将游戏对象的图层(Inspector window 右上角的下拉菜单)从 Default 更改为另一图层(您可以选择 创建一个新图层添加图层... 在下拉菜单中)。

然后,创建一个新相机(或者select主相机,取决于你想要实现什么),并将它的Culling Mask更改为你想要实现的图层正在游戏对象中使用。

为了绘制线框,您 post 相机中应该绘制该游戏对象的脚本:

// from http://docs.unity3d.com/ScriptReference/GL-wireframe.html
using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
    void OnPreRender() {
        GL.wireframe = true;
    }
    void OnPostRender() {
        GL.wireframe = false;
    }
}

您可能需要使用 2 个摄像头,具体取决于您想要实现的目标(一个摄像头用于线框对象,另一个摄像头用于绘制场景的其余部分),在这种情况下,您可以设置 将其中一台摄像机的标志 清除为不清除。确保两个相机的 Depth 值相同。

摄像机的 清除标志 指示该摄像机没有任何可绘制的像素(空 space)将会发生什么,并且当有多个相机绘制到同一个像素时会发生什么。

如果清除标志不清除,它不会对空的space做任何事情, 留给其他相机填充物体或背景。对于它应该画东西的像素,它会让物体的深度决定要画什么,也就是说,靠近相机的物体将被绘制在其他物体的顶部。

Unity 资产商店 上有一个 asset,其中包含多个着色器 material,它们完全可以满足您的需求。您可以下载它,自己分析和编写着色器,或者简单地使用提供的资源。

然后您可以将 shader 附加到 material 并将其附加到 mesh 渲染器达到想要的效果。