首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >组合几个平面,每个平面都有自己独特的纹理到一个“模型”中,并保持所有的纹理在单位

组合几个平面,每个平面都有自己独特的纹理到一个“模型”中,并保持所有的纹理在单位
EN

Stack Overflow用户
提问于 2019-05-26 07:29:23
回答 1查看 129关注 0票数 1

在Unity中,我(以编程方式)创建了一个平面的“堆栈”--每个平面上都有一个图像。我希望能够拿着相机放大堆栈,当它在堆栈中放大时,可以看到每一张图像。

想象一下,当你通过一个俄罗斯Matryoshka玩偶拍摄时,你可以看到每个较小的玩偶。

同样重要的是要注意,在我的例子中,平面堆栈并不是完全对齐的,因此它们中的一些会稍微相交-我需要确保它们不会闪烁。

我想将这些平面组合成一个单独的“模型”(网格可能是正确的术语,但使用这个视频:https://www.youtube.com/watch?v=6APzUgckV7U不起作用-它取走我所有的平面并将其简单地转换为一个平面;也就是说,我可以组合这些平面,但它用单一材料创建了一个单一的对象)。这使用了网格组合器,但我不确定这是正确的方法。

这是我写的一些代码,它将所有的平面从slicesHolder中提取出来,并将它们组合成一个“模型”。然后它将“模型”放在finalObject中,但不幸的是,“模型”没有保留切片中的任何材料(图像)。然后slicesHolder就被摧毁了。

代码语言:javascript
复制
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);

这是尝试创建一个单一的“模型”的正确方式吗?这个“模型”有一个单独的图像“堆栈”,这样我就可以放大这个堆栈,看到模型的更深层次?

EN

回答 1

Stack Overflow用户

发布于 2019-05-26 11:15:43

没有有效的方法来做到这一点。

其中的原因就是纹理。或者更具体地说是材料。因为每个平面都有一个唯一的材质实例,所以无法将其与另一个平面组合。你要么以开始时的方式结束,要么只使用每个面上的一个纹理得到一个组合模型。

您需要一种将每个所需纹理映射到精灵工作表的方法,使用该精灵工作表创建一个新材质,然后找出要从一种材质转换为精灵工作表材质的UV偏移,将精灵工作表材质指定给所有平面,然后对它们进行网格组合。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56309516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档