在我的场景中,我有2个摄像头(分屏)。有可能只为一台摄像机改变一层的透明度吗?例如,“layer1”对于右摄像机具有alphatrasparency = 0.5,而左摄像机显示“layer1”而没有透明度。
答案 0 :(得分:0)
但是有一种方法可以做到这一点。这有点像黑客,因为它不依赖于物理层,而是存在自定义的单行为脚本。以下是我对此的记忆(如果需要,我可以稍后挖掘实现)。
第1步:您需要将MonoBehaviour脚本附加到您希望以不同方式呈现的每个游戏对象。这个脚本绝对必要。
步骤2:此脚本将包含一个函数(如果所有对象已经有一个共同的对象,您可以使用现有的行为脚本,您只需将此函数添加到该脚本)。无论你想要什么,都可以调用它,但类似于AboutToBeRendered(Camera cam)
第3步:创建另一个脚本并将其附加到两个摄像头。该脚本中还包含一个函数:OnPreRender()
第4步:在此OnPreRender方法中,您需要执行以下操作:
第5步:编写AboutToBeRendered方法。
OnPreRender()
,表示此相机即将渲染场景。但我们实际想要的是对象即将被呈现以便知道它将被渲染以及由哪个相机。这就是为什么我们需要步骤1中的脚本。
我想你可以跳过第1步,只看一下场景中的每个对象并查看它的物理层,但是要弄清楚要比“让我得到这个组件的所有实例”更昂贵。您可以基于Tag来执行此操作,因为FindObjectsWithTag通常被认为非常快,但如果您已经将标记用于其他内容,那么您运气不佳,并且没有类似的方法来获取给定物理层中的对象。
但是,您必须在相机脚本中调整素材的alpha值,而不是让对象本身决定它应该是什么值。
在 情况下,对象的材质需要支持透明度。当我这样做时,我阻止对象完全渲染,所以我只是禁用了它的MeshRenderer组件。