C# Unity如何关闭预制中的所有灯光

C# Unity如何关闭预制中的所有灯光,c#,unity3d,model,light,C#,Unity3d,Model,Light,嘿,伙计们,在youtube上的一系列节目之后,我正在制作一个小手机游戏,一切都很顺利,游戏运行得很好,但我有一个问题 所以游戏基本上是从我的预制件中随机选择一个模型,把它放在某个位置,然后一遍又一遍地做同样的事情,直到你松开为止 但我刚刚看到,当我在blender上创建这个模型时,我在所有模型上都创建了一些照明系统。所以现在,当它们被实例化时,场景中的光线太多了。我知道我可以在没有灯光的情况下简单地重新导入它们,但问题是我使用blender的这些模型创建了很多预制件,所以我必须重新开始几乎所有

嘿,伙计们,在youtube上的一系列节目之后,我正在制作一个小手机游戏,一切都很顺利,游戏运行得很好,但我有一个问题

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

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

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

我还试图进入导入模型或第一个预制件的文件夹,并取消选中所有的灯光,但当游戏对象被实例化时,灯光仍然在这里。我认为这是因为我应该在场景中进行更改,然后将其保存回文件夹中,但我必须再次进行更改

以下是预制件的制作方法:

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

这是一个片段,它与所有其他片段都是实例化的。
感谢您的帮助:

如果是预制件,您可以编辑预制件。设置Active false或禁用该预设中的灯光,并尝试实例化它。

首先为场景中要保持亮起的灯光添加标记。例如,场景灯光

然后访问场景中灯光类型的所有游戏对象,并将其强度降低为0,但跳过标记场景灯光的游戏对象

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

您可以设置生成灯光的最大数量,并在达到最大值时禁用新实例的灯光。创建常量整数最大灯光数。设置静态整数LightScont使用灯光计数繁殖对象,在繁殖时增加,在死亡事件时减少。在生成预制增加计数器时,请检查LightScont>=MAX\u LIGHTS\u COUNT,然后禁用灯光组件

const int MAX_LIGHTS_COUNT = 20;
static int lightsCount = 0;
...
void someSpawningMethod (...) {
    GameObject instance = Instantiate (prefab) as GameObject;
    if (++lightsCount >= MAX_LIGHTS_COUNT)
        foreach (Light l in instance.GetComponentsInChildren<Light>())
            l.enabled = false;
 }
此外,你可以在游戏开始时运行所有的预制件并禁用灯光

GameObject[] prefabs;
void Start () {
    foreach (GameObject go in prefabs) 
        foreach (Light l in go.GetComponentsInChildren<Light>())
            Destroy (l);

}

也谢谢你的帮助