Баг или Фича? Или что за невидимые объекты с подписью?

Ошибки и баги Unity3D

Баг или Фича? Или что за невидимые объекты с подписью?

Сообщение RUS_DEVELOPER 09 ноя 2017, 17:00

Доброго времени суток! Столкнулся с интересной на мой взгляд проблемой, не знаю - Баг это или Фича... Имею MeshCombiner, который в свою очередь соединяет рендеринговые сетки в одну и добавляет этот результат в Калайдер и в скрипт Физики. Нахожу я так:

1) Создаю массив Корпусов GameObject[] hulls; -> Заполняю массив выполняя поиск по определенному тэгу
GameObject.FindGameObjectsWithTag("/*Название Тэга*/");


2) Далее ищу MeshFilters через этот массив: Для этого создаю массив Фильтров MeshFilter[] filters;-> Заполняю его длинной массива Корпусов filters = new MeshFilter[hulls.Length];-> Далее через цикл for ищу MeshFilters...
for (int i = 0; i < hulls.Length; ++i)
filters[i] = hulls[i].GetComponent<MeshFilter>();


3) Далее просто комбинирую... (Я думаю описывать данный процесс не стоит ведь дело не в комбинировании)

В итоге я иногда сталкиваюсь с тем что нахожу "Невидимые" объекты с подписью "Preview Scene" которых не существует!!!
Скриншот Инспектора:
Помогает только перезапуск Редактора, но иногда оно возвращается...
Версия Unity: 2017.2.03f (Свежая, но и в прошлой такое присутствует)

Сталкивались ли вы с этим? И кто смог решить данную проблему?
Заранее Спасибо!

Дополнительные материалы к теме:
Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MeshCombiner : MonoBehaviour
{
    public GameObject[] hulls;
    private  List<MeshFilter> filters;

    public void CombineMeshes()
    {
        Quaternion oldRot = transform.rotation;
        Vector3 oldPos = transform.position;

        transform.rotation = Quaternion.identity;
        transform.position = Vector3.zero;

        hulls = GameObject.FindGameObjectsWithTag("Hull");

        filters = new List<MeshFilter>(hulls.Length);

        for (int i = 0; i < hulls.Length; ++i)
        {
            if (hulls[i].hideFlags != HideFlags.HideInHierarchy)
                filters.Add(hulls[i].GetComponent<MeshFilter>());
        }

        Debug.Log(name + "Комбинируем...");

        Mesh finalMesh = new Mesh();

        CombineInstance[] combiners = new CombineInstance[filters.Count];

        for(int i = 0; i < filters.Count; i++)
        {
            if (filters[i].transform == transform)
                continue;

            combiners[i].subMeshIndex = 0;
            combiners[i].mesh = filters[i].sharedMesh;
            combiners[i].transform = filters[i].transform.localToWorldMatrix;
        }

        finalMesh.CombineMeshes(combiners);
        finalMesh.name = "PlayerShipMesh";

        GetComponent<MeshFilter>().sharedMesh = finalMesh;
        GetComponent<FloatingGameEntityFlat>().buoyancyMesh = finalMesh;
        GetComponent<MeshCollider>().sharedMesh = finalMesh;

        transform.rotation = oldRot;
        transform.position = oldPos;
    }
}
 
Последний раз редактировалось RUS_DEVELOPER 09 ноя 2017, 17:45, всего редактировалось 1 раз.
RUS_DEVELOPER
UNец
 
Сообщения: 22
Зарегистрирован: 05 фев 2017, 07:13

Re: Баг или Фича? Или что за невидимые объекты с подписью?

Сообщение waruiyume 09 ноя 2017, 17:15

Попробуйте проверить свойство hideFlags у GO.
P.S. Не суйте код в спойлер, он становится нечитаемым.
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Баг или Фича? Или что за невидимые объекты с подписью?

Сообщение RUS_DEVELOPER 09 ноя 2017, 17:46

Я так и делал через скрипт. Извините не знал что из-за спойлера код не читаем...
RUS_DEVELOPER
UNец
 
Сообщения: 22
Зарегистрирован: 05 фев 2017, 07:13

Re: Баг или Фича? Или что за невидимые объекты с подписью?

Сообщение waruiyume 09 ноя 2017, 17:51

Может лучше так "if (hulls[i].hideFlags == HideFlags.None)"?
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Баг или Фича? Или что за невидимые объекты с подписью?

Сообщение RUS_DEVELOPER 09 ноя 2017, 17:56

Может, но я ещё пробывал и уничтожать эти объекты, но не получилось)
P.S.
Синтаксис:
Используется csharp
for (int i = 0; i < hulls.Length; ++i)
        {
            if(hulls[i].hideFlags == HideFlags.HideInHierarchy)
                Destroy(hulls[i].gameObject);
        }
RUS_DEVELOPER
UNец
 
Сообщения: 22
Зарегистрирован: 05 фев 2017, 07:13


Вернуться в Глюки

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3