【问题标题】:Unity how to turn all lights off in prefabsUnity如何在预制件中关闭所有灯
【发布时间】:2018-05-24 11:14:01
【问题描述】:

大家好,我目前正在根据 youtube 上的一个系列制作一款小型手机游戏,一切进展顺利,游戏运行良好,一切正常,但我有一个问题。

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

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

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

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

预制件的制作方法如下:

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

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

【问题讨论】:

    标签: c# unity3d model light


    【解决方案1】:

    首先将标签添加到场景中您希望继续使用的灯光。例如“场景灯”

    然后访问场景中所有 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;
        }
    }
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        您可以设置生成的灯光的最大数量并在达到最大值时禁用新的即时灯光。创建 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);
        
        }
        

        【讨论】:

        • 也感谢您的帮助
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-06
        • 1970-01-01
        • 1970-01-01
        • 2016-11-04
        • 1970-01-01
        相关资源
        最近更新 更多