Доброго времени суток Тостер! Столкнулся с интересной на мой взгляд проблемой, не знаю - Баг это или Фича... Имею 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) Далее просто комбинирую... (Я думаю описывать данный процесс не стоит ведь дело не в комбинировании)
В итоге я иногда сталкиваюсь с тем что нахожу "Невидимые" объекты которых не существует!!!
Помогает только перезапуск Редактора, но иногда оно возвращается...
Версия Unity: 2017.2.03f (Свежая, но и в прошлой такое присутствует)
Сталкивались ли вы с этим? И кто смог решить данную проблему?
Заранее Спасибо!
Дополнительные материалы к теме:
Скрипт MeshCombiner.csusing 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 Дня...