透明层Unity
Transparent layer Unity
在我的场景中,我有 2 个摄像头(分屏)。可以只为一台相机更改图层的透明度吗?例如,"layer1" 右摄像头的 alphatrasparency = 0.5,而左摄像头显示 "layer1" 没有透明度。
表面上没有
不过,有一种方法可以做到。不过这有点 hack,因为它不依赖于物理层,而是依赖于自定义单一行为脚本的存在。这是我对这件事的记忆(如果需要,我可以稍后挖掘一个实现)。
第 1 步:您需要将 MonoBehaviour 脚本附加到您希望以不同方式呈现的每个游戏对象。此脚本绝对必要。
第 2 步: 此脚本将包含一个函数(如果所有对象已经有一个共同点,您可以使用现有的行为脚本,您可以将此函数添加到那个脚本)。随心所欲地称呼它,但类似于 AboutToBeRendered(Camera cam)
第 3 步: 创建另一个脚本并将其附加到两个摄像头。该脚本还将包含一项功能:OnPreRender()
第 4 步: 在此 OnPreRender 方法中,您需要执行以下操作:
- 找到步骤 1 中的所有游戏对象
- 使用 AboutToBeRendered 方法获取组件
- 调用该方法,将相机作为参数传递
第 5 步: 编写 AboutToBeRendered 方法。
- 确定两个相机中的哪一个被传递给方法
- 根据需要设置material的颜色是否透明
OnPreRender()
仅在同一 GameObject 上具有相机组件的脚本上调用,表示此相机即将渲染场景。但是我们实际上想要的是即将被渲染的对象知道它即将被渲染以及由哪个相机. 这就是我们需要步骤 1 中的脚本的原因。
我想您可以跳过第 1 步,只查看场景中的每个对象并查看其物理层,但这比“获取该组件的所有实例”要花费更多的时间。您 可以 改为基于 Tag 执行此操作,因为 FindObjectsWithTag 通常被认为非常快,但是如果您已经将标签用于其他用途,那么您就出局了运气好,没有可比较的方法来获取给定物理层中的对象。
但是,您必须在相机脚本中调整 material 的 alpha 值,而不是让对象本身决定它应该是什么值。
在任一情况下,对象的material需要支持透明度。当我这样做时,我阻止了对象被完全渲染,所以我只是禁用了它的 MeshRenderer 组件。
在我的场景中,我有 2 个摄像头(分屏)。可以只为一台相机更改图层的透明度吗?例如,"layer1" 右摄像头的 alphatrasparency = 0.5,而左摄像头显示 "layer1" 没有透明度。
表面上没有
不过,有一种方法可以做到。不过这有点 hack,因为它不依赖于物理层,而是依赖于自定义单一行为脚本的存在。这是我对这件事的记忆(如果需要,我可以稍后挖掘一个实现)。
第 1 步:您需要将 MonoBehaviour 脚本附加到您希望以不同方式呈现的每个游戏对象。此脚本绝对必要。
第 2 步: 此脚本将包含一个函数(如果所有对象已经有一个共同点,您可以使用现有的行为脚本,您可以将此函数添加到那个脚本)。随心所欲地称呼它,但类似于 AboutToBeRendered(Camera cam)
第 3 步: 创建另一个脚本并将其附加到两个摄像头。该脚本还将包含一项功能:OnPreRender()
第 4 步: 在此 OnPreRender 方法中,您需要执行以下操作:
- 找到步骤 1 中的所有游戏对象
- 使用 AboutToBeRendered 方法获取组件
- 调用该方法,将相机作为参数传递
第 5 步: 编写 AboutToBeRendered 方法。
- 确定两个相机中的哪一个被传递给方法
- 根据需要设置material的颜色是否透明
OnPreRender()
仅在同一 GameObject 上具有相机组件的脚本上调用,表示此相机即将渲染场景。但是我们实际上想要的是即将被渲染的对象知道它即将被渲染以及由哪个相机. 这就是我们需要步骤 1 中的脚本的原因。
我想您可以跳过第 1 步,只查看场景中的每个对象并查看其物理层,但这比“获取该组件的所有实例”要花费更多的时间。您 可以 改为基于 Tag 执行此操作,因为 FindObjectsWithTag 通常被认为非常快,但是如果您已经将标签用于其他用途,那么您就出局了运气好,没有可比较的方法来获取给定物理层中的对象。
但是,您必须在相机脚本中调整 material 的 alpha 值,而不是让对象本身决定它应该是什么值。
在任一情况下,对象的material需要支持透明度。当我这样做时,我阻止了对象被完全渲染,所以我只是禁用了它的 MeshRenderer 组件。