首页 文章

Unity如何在预制件中关闭所有灯

提问于
浏览
0

嘿伙计们我正在创建一个关于youtube系列的小手机游戏,一切都很顺利,游戏工作得很好,除了我有一个问题 .

所以游戏的基本操作就是从我的预制件中随机选择一个模型,将它放在一个特定的位置,然后一遍又一遍地做同样的事情直到你松开 .

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

我想知道是否有一些脚本或方法,所以当实例化预制件时,附加到它们的所有灯都被禁用 .

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

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

进口型号 - >第一个预制件 - >件(第二个预制件) - >段(最后一个预制件)

它是实例化的部分(所以其他所有部分都是如此) . 谢谢你的帮助 :)

3 回答

  • 1

    首先在场景中为要保持的场景中的灯光添加标签 . 例如“scene_lights”

    然后访问场景中Light类型的所有GameObjects并将其强度降低到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;
        }
    }
    
  • 1

    您可以设置最大产生的灯光量,并在达到最大值时禁用新的瞬间灯光 . 创建const整数MAX_LIGHTS_COUNT . 设置静态整数“lightsCount”计数带有灯光的衍生对象,在生成时增加它并减少“死亡”事件 . 当您产生预制增加计数器时,检查lightsCount> = MAX_LIGHTS_COUNT,然后禁用Light组件 .

    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);
    
    }
    
  • 0

    如果是预制件,您只需编辑预制件即可 . Setactive false或禁用该预制件中的灯并尝试实例化它 .

相关问题