首页 > 解决方案 > Unity如何在预制件中关闭所有灯

问题描述

嘿,伙计们,我目前正在制作一个小型手机游戏,跟随 youtube 上的一系列游戏,一切都很顺利,游戏运行良好,一切都很好,但我有一个问题。

所以基本上游戏所做的就是从我的预制件中随机选择一个模型,将其放置在某个位置,然后一遍又一遍地做同样的事情,直到你松手。

但是我刚刚看到,当我(在搅拌机上)创建这个模型时,我在所有这些模型上都创建了一些照明系统。所以现在,当它们被实例化时,场景中有太多的光。我知道我可以在没有灯光的情况下简单地重新导入它们,但问题是我使用搅拌机中的这些模型创建了很多预制件,所以我几乎必须重新开始所有事情。

我想知道是否有一些脚本或方法可以做到这一点,所以当预制件被实例化时,连接到它们的所有灯都被禁用。

我还尝试进入导入模型或制作的第一个预制件的文件夹并取消选中所有灯光(Hemi),但是当实例化 GameObject 时,灯光仍然存在。我认为这是因为我应该在场景中进行更改,然后将其保存回文件夹中,但我又不得不重新做一遍。

这是预制件的制作方式:

导入模型 -> 第一个预制件 -> 片(第二个预制件) -> 段(最后一个预制件)

它是被实例化的片段(因此与所有其他片段一起)。谢谢你的帮助 :)

标签: c#unity3dmodellight

解决方案


首先为场景中您想要保留的灯光添加一个标签。例如“场景灯”

然后访问场景中所有 Light 类型的游戏对象并将其强度降低到 0,但跳过标签“scene_lights”的那些。

void Start()
{
    LightsGO = FindObjectOfType(typeof(Light)) as GameObject[];
    foreach(GameObject thisLight in LightsGO)
    {
        if(thisLight.tag != "scene_lights")
            thisLight.light.intensity = 0;
    }
}

推荐阅读