Unity3D 将 GameObject 渲染为线框

Posted

技术标签:

【中文标题】Unity3D 将 GameObject 渲染为线框【英文标题】:Unity3D render GameObject as Wireframe 【发布时间】:2021-05-07 17:59:35 【问题描述】:

我是 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

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

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

【问题讨论】:

你有多个摄像头吗? 【参考方案1】:

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

编辑:这是来自Shaders Laboratory的示例

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

【讨论】:

正如 OP 所说,它是来自 Unity API 的示例,尽管 ^^ 并且 OP 明确打开了 OnPreRender 中的线框,因此 before 东西被渲染并关闭在 OnPostRender 不再需要时 虽然这是真的,但“不需要的”对象与线框对象是同一个对象,如果 OP 的目标是仅使用 OnPreRender 显示线框对象,而 OnPostRender 不是要走的路 对我来说,它看起来像有多个相机的.. 否则没有解释为什么对象被渲染两次。并且使用不同的着色器当然是一个很好的提示,但是在这种情况下它不会完全回答这个问题,因为它只会被渲染为线框的两倍^^ @derHugo 是的,我将它作为第二次编辑添加到我的答案中,这样它应该可以根据需要使用两个摄像头,但如果不需要,我建议不要使用两个摄像头。 谢谢你们!我完全没有注意到场景中已经有另一台摄像机。多么初学者的错误。直到现在我还没有听说过着色器,但我一定会看看,这听起来不错!

以上是关于Unity3D 将 GameObject 渲染为线框的主要内容,如果未能解决你的问题,请参考以下文章

<转载>Unity3D中LineRenderer的使用

在unity3d里怎样隐藏物体

Unity3D中移动物体位置的几种方法

[Unity3D] GameObject and MonoBehaviour

unity3d中给GameObject绑定脚本的代码

Unity3D_(游戏)开心消消乐