我正在尝试合并两个网格。我的代码如下所示。 CombineInstance
'combine'在其顶点具有正确的值。但是,组合网格'RetMesh'的所有顶点均等于(0,0,0)。我不明白我在做什么错。
我已经阅读了在互联网上找到的教程,但我不知道自己在做什么错。
void Start () {
Mesh MM2 = testmeshfunc();
GameObject GO;
GO = new GameObject("MeshFromMPC", typeof(MeshFilter), typeof(MeshRenderer));
GO.gameObject.transform.localScale = new Vector3(1, 1, 1);
GO.gameObject.GetComponent<MeshFilter>().mesh = MM2;
}
Mesh testmeshfunc()
{
Mesh RetMesh = new Mesh();
Vector3[] V3A = new Vector3[4];
Vector3[] V3B = new Vector3[4];
int[] TrPtsA = new int[6];
int[] TrPtsB = new int[6];
Mesh mesha = new Mesh();
Mesh meshb = new Mesh();
var combine = new CombineInstance[2];
V3A[0] = new Vector3(0, 0, 0);
V3A[1] = new Vector3(0, 1, 0);
V3A[2] = new Vector3(1, 1, 0);
V3A[3] = new Vector3(1, 0, 0);
TrPtsA[0] = 0;
TrPtsA[1] = 1;
TrPtsA[2] = 2;
TrPtsA[0] = 2;
TrPtsA[1] = 1;
TrPtsA[2] = 3;
mesha.vertices = V3A;
mesha.triangles = TrPtsA;
V3B[0] = new Vector3(0, 0, 0);
V3B[1] = new Vector3(0, 0, 1);
V3B[2] = new Vector3(1, 0, 1);
V3B[3] = new Vector3(1, 0, 0);
TrPtsB[0] = 0;
TrPtsB[1] = 1;
TrPtsB[2] = 2;
TrPtsB[0] = 2;
TrPtsB[1] = 1;
TrPtsB[2] = 3;
meshb.vertices = V3B;
meshb.triangles = TrPtsB;
combine[0].mesh = mesha;
combine[1].mesh = meshb;
RetMesh.RecalculateBounds();
RetMesh.RecalculateNormals();
RetMesh.RecalculateTangents();
RetMesh.CombineMeshes(combine);
return RetMesh;
}
我正在使用Unity 2017。
答案 0 :(得分:0)
首先,三角索引缓冲区设置错误。我虽然你在画飞机,但正面应该是顺时针方向,这是你的
V3A[0] = new Vector3(0, 0, 0);
V3A[1] = new Vector3(0, 1, 0);
V3A[2] = new Vector3(1, 1, 0);
V3A[3] = new Vector3(1, 0, 0);
TrPtsA[0] = 0;
TrPtsA[1] = 1;
TrPtsA[2] = 2;
TrPtsA[0] = 2;
TrPtsA[1] = 1;
TrPtsA[2] = 3;
mesha.vertices = V3A;
mesha.triangles = TrPtsA;
V3B[0] = new Vector3(0, 0, 0);
V3B[1] = new Vector3(0, 0, 1);
V3B[2] = new Vector3(1, 0, 1);
V3B[3] = new Vector3(1, 0, 0);
TrPtsB[0] = 0;
TrPtsB[1] = 1;
TrPtsB[2] = 2;
TrPtsB[0] = 2;
TrPtsB[1] = 1;
TrPtsB[2] = 3;
代码应该是这样的,我将索引缓冲区的方向更改为顺时针方向。如果您不顺时针旋转,则不会通过背面去除将其显示在屏幕上。
V3A[0] = new Vector3(0, 0, 0);
V3A[1] = new Vector3(0, 1, 0);
V3A[2] = new Vector3(1, 1, 0);
V3A[3] = new Vector3(1, 0, 0);
TrPtsA[0] = 0;
TrPtsA[1] = 1;
TrPtsA[2] = 2;
TrPtsA[0] = 2;
TrPtsA[1] = 3;
TrPtsA[2] = 1;
mesha.vertices = V3A;
mesha.triangles = TrPtsA;
V3B[0] = new Vector3(0, 0, 0);
V3B[1] = new Vector3(0, 0, 1);
V3B[2] = new Vector3(1, 0, 1);
V3B[3] = new Vector3(1, 0, 0);
TrPtsB[0] = 0;
TrPtsB[1] = 1;
TrPtsB[2] = 2;
TrPtsB[0] = 2;
TrPtsB[1] = 3;
TrPtsB[2] = 1;