Единство, как выключить все огни в сборных - PullRequest
0 голосов
/ 24 мая 2018

Привет, ребята, я сейчас создаю небольшую мобильную игру после серии на youtube, и все идет очень хорошо, игра работает отлично, и все, но у меня есть одна проблема.

Так что, в основном, игра выбирает модель из моих префабов случайным образом, помещает ее в определенную позицию, а затем делает то же самое снова и снова, пока вы не проиграете.

Но я простоувидел, что когда я создавал эти модели (на блендере), я создал систему освещения на всех них.Так что теперь, когда они созданы, на сцене слишком много света.Я знаю, что мог бы просто импортировать их без подсветки, но проблема в том, что я создал много префабов, используя эти модели из blender, поэтому мне пришлось бы начинать почти все заново.

Мне было интересно, были ли какие-тосценарий или способ сделать это, чтобы при создании экземпляров префабов все прикрепленные к ним источники света были отключены.

Я также попытался зайти в папку импортированных моделей или первых созданных префабов и снять все флажки.источники света (Hemi), но когда создается экземпляр GameObject, источники света все еще здесь.Я думаю, это потому, что я должен внести изменения в сцену, а затем сохранить их обратно в папку, но снова мне придется делать это снова и снова.

Вот как готовится сборная:

Импортированная модель -> Первый сборный -> Кусок (второй сборный) -> Сегмент (последний сборный)

И именно этот сегмент создается (так же как и все остальные в нем).Спасибо за вашу помощь :)

Ответы [ 3 ]

0 голосов
/ 24 мая 2018

Сначала добавьте тег к источникам света в вашей сцене, которые вы хотели бы сохранить.Например, "scene_lights"

Затем получите доступ ко всем объектам GameObject типа 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;
    }
}
0 голосов
/ 24 мая 2018

Вы можете установить максимальное количество порождаемых источников света и отключить новое мгновенное освещение, если оно достигнуто.Создайте константное целое число 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 голосов
/ 24 мая 2018

Если это сборный дом, вы можете просто отредактировать сборный.Setactive false или отключил свет в этом сборном корпусе и попытайтесь создать его экземпляр.

...