В Unity я создал «стопку» плоскостей (программно), на каждой из которых есть изображение.Я хочу иметь возможность взять камеру и увеличить масштаб в стеке, и, когда он масштабирует стопку плоскостей, увидеть каждое из изображений.
Представьте себе, что вы берете камеру через русскую матрешку и видите каждого изкуклы меньшего размера по мере прохождения.
Также важно отметить, что в моем случае стек плоскостей не идеально выровнен в стеке, и поэтому некоторые из них слегка пересекаются - мне нужно сделатьконечно, они не мерцают.
Я хотел бы объединить эти плоскости, каждая со своим изображением, в единственную «модель» (Mesh, вероятно, правильная терминология, но с использованием этого видео: https://www.youtube.com/watch?v=6APzUgckV7U не работал - он взял все мои планы и просто преобразовал их в одну плоскость; при этом я смог объединить эти планы, но он создал один объект с одним материалом).При этом используются объединители сеток, но я не уверен, что это правильный подход.
Вот некоторый код, который я написал, который берет все плоскости из slicesHolder
и объединяет их в одну "модель«.Затем он помещает эту «модель» внутрь finalObject
, но, к сожалению, «модель» не сохраняет никаких материалов (изображений) из срезов.И slicesHolder
уничтожено.
Quaternion oldRot = slicesHolder.transform.rotation;
Vector3 oldPos = slicesHolder.transform.position;
finalObject.transform.rotation = Quaternion.identity;
finalObject.transform.position = Vector3.zero;
MeshFilter[] meshFilters = slicesHolder.GetComponentsInChildren<MeshFilter>();
Debug.Log("Combining " + meshFilters.Length + " meshes");
Mesh finalMesh = new Mesh();
CombineInstance[] combiners = new CombineInstance[meshFilters.Length];
for(int a = 0; a < meshFilters.Length; a++){
//if(meshFilters[a].transform == transform)
//continue;
combiners[a].subMeshIndex = 0;
combiners[a].mesh = meshFilters[a].sharedMesh;
combiners[a].transform = meshFilters[a].transform.localToWorldMatrix;
}
finalMesh.CombineMeshes(combiners);
finalObject.GetComponent<MeshFilter>().sharedMesh = finalMesh;
finalObject.transform.rotation = oldRot;
finalObject.transform.position = oldPos;
Destroy(slicesHolder);
finalObject.SetActive(true);
Является ли это правильным способом создания единственной «модели», которая имеет «стопку» отдельных изображений, чтобы я мог увеличить этот стек и увидеть глубжев модель?