0

在我的场景中,我有 2 个摄像头(分屏)。是否可以仅为一个相机更改图层的透明度?例如,右侧相机的“layer1”具有 alphatrasparency = 0.5,而左侧相机显示“layer1”而没有透明度。

4

1 回答 1

0

表面上没有

不过,有办法做到这一点。不过,这有点像 hack,因为它不依赖于物理层,而是依赖于自定义单一行为脚本的存在。这就是我脑海中的记忆(如果需要,我可以稍后挖掘一个实现)。

第 1 步:您需要将 MonoBehaviour 脚本附加到您希望以不同方式渲染的每个游戏对象。这个脚本是绝对必要的。

第 2 步:此脚本将包含一个函数(如果所有对象都已经有一个共同点,您可以使用现有的行为脚本,并且您可以将此函数添加到该脚本)。随便你怎么称呼它,但类似AboutToBeRendered(Camera cam)

第 3 步:创建另一个脚本并将其附加到两个摄像机。该脚本还将具有一个功能:OnPreRender()

第 4 步:在此 OnPreRender 方法中,您需要执行以下操作:

  • 从步骤 1 中找到所有游戏对象
  • 使用 AboutToBeRendered 方法获取他们的组件
  • 调用该方法,将相机作为参数传递

第 5 步:编写 AboutToBeRendered 方法。

  • 确定两个相机中的哪一个被传递给该方法
  • 根据需要将材质的颜色设置为透明或不透明

OnPreRender()仅在同一个 GameObject 上有相机组件的脚本上调用,表示此相机即将渲染场景。但我们真正想要的是让即将被渲染的对象知道它即将被渲染以及由哪个相机渲染。这就是为什么我们需要步骤 1 中的脚本。

我想您可以跳过第 1 步,只查看场景中的每个对象并查看其物理层,但这比“让我获取此组件的所有实例”更昂贵。您可以改为基于Tag来执行此操作,因为 FindObjectsWithTag 通常被认为非常快,但是如果您已经将标签用于其他用途,那么您就不走运了,并且没有可比的方法来获取给定对象中的对象物理层。

但是,您必须在相机脚本中调整材质的 alpha 值,而不是让对象本身决定它应该是什么值。

无论哪种情况,对象的材质都需要支持透明度。当我这样做时,我正在阻止对象被完全渲染,所以我只是禁用了它的 MeshRenderer 组件。

于 2017-06-20T13:37:56.667 回答