Unity 3D:如何为一台摄像机启用定向灯,为另一台摄像机启用定向灯?

问题描述 投票:1回答:2

我需要并排显示两个摄像头显示器。一个人将打开太阳(定向光),一个人将同时渲染同一个场景时关掉太阳。我试图在OnPreRender()方法中使用sun.SetActive(),对于一个Camera我将sun.SetActive(false)和sun.SetActive(true)设置为另一个。它不起作用,两个相机的太阳仍然关闭。如何实现所需的输出?

c# unity3d mono game-engine
2个回答
2
投票

您需要将OnPreCull添加到初始尝试版本比Unity 4.6更高的版本。

我为旧版本保留了OnPrerender,你对日志有了建议但忽略了它。

将此脚本添加到相机:

function OnPreCull () {
     if (sun != null)
         sun.enabled = false;
 }

 function OnPreRender() {
     if (sun != null)
         sun.enabled = false;
 }
 function OnPostRender() {
     if (sun != null)
         sun.enabled = true;
 }

0
投票

另一种方法是将所有游戏对象复制并设置为不同的层 - 例如:'Sunlit'和'Shadowed'。复制对象需要嵌套在原始对象中,这可能非常混乱,您需要一个脚本来在运行时复制场景的对象。

层次结构看起来像这样:

enter image description here

定向灯的剔除遮罩(在灯光检查器上)将被设置为除“阴影”图层上的物体之外的所有物体。

然后是2个摄像头,剔除除了其中一个层之外的所有东西:enter image description here

我不确定这在性能方面是否比joreldraw的解决方案更好或更差。但我猜它会取决于模型的数量和复杂程度。在joreldraw的解决方案中,我们每帧启用/禁用lightsource几次。有了这个解决方案,我们有两倍的游戏对象。如果您的场景中没有很多对象,那么这个解决方案可能更好。

© www.soinside.com 2019 - 2024. All rights reserved.