BRO_TIGER
@BRO_TIGER
Indie Developer (C#, JS)

Как не находить через тэг объекты у которых в названии «Preview Scene»?

Доброго времени суток Тостер! Столкнулся с интересной на мой взгляд проблемой, не знаю - Баг это или Фича... Имею 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) Далее просто комбинирую... (Я думаю описывать данный процесс не стоит ведь дело не в комбинировании)

В итоге я иногда сталкиваюсь с тем что нахожу "Невидимые" объекты которых не существует!!!
Скриншот Инспектора:
59ff1b27b4e2c255467230.png

Помогает только перезапуск Редактора, но иногда оно возвращается...
Версия Unity: 2017.2.03f (Свежая, но и в прошлой такое присутствует)

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

Дополнительные материалы к теме:
Скрипт MeshCombiner.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MeshCombiner : MonoBehaviour
{
    public GameObject[] hulls;
    public 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 MeshFilter[hulls.Length];

        for (int i = 0; i < hulls.Length; ++i)
            filters[i] = hulls[i].GetComponent<MeshFilter>();

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

        Mesh finalMesh = new Mesh();

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

        for(int i = 0; i < filters.Length; 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;
    }
}
EDIT: Тема до сих пор открыта, ибо тот же "Баг" всплыл спустя 2-3 Дня...
  • Вопрос задан
  • 148 просмотров
Пригласить эксперта
Ответы на вопрос 1
BasmanovDaniil
@BasmanovDaniil
Геймдизайнер-телепат
По всей видимости, вы находите служебные объекты редактора. Если они скрыты в иерархии, то можете проверить Object.hideFlags и отсеять те, у которых выставлен флаг HideInHierarchy.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы