正如标题所示,其想法是在一个球体与另一个球体之间建立网格,通过禁用其网格渲染器或将alpha颜色设置为零来使网格透明。目前,由于一切正常,我必须为所有网格分配一个新层,因为它们在地板上不是平行的,而是根据其倾斜方向。在这种情况下,RayCast将看不到平面隐藏的部分网格。使用RayCast上的图层,可以将碰撞器放置在网格的整个表面上。但是我想知道是否没有办法设置我通过的4 Vector3来创建网格,使其与平面平行。 为了找到网格的4个顶点,我使用了创建的脚本来绘制更多平行的Gizmos线以获得更大的厚度。一旦有了4个顶点,就很容易创建网格。我还尝试过使用线性渲染器设置startWidth和endWidth to get a line with apparently parallel edges in Game View。它的行为方式相同。此外,线性渲染器的BakeMesh方法仅适用于最新版本的Unity。 这是结果的图像,我扩大了网格,以便可以清晰地看到其倾斜度
您只能看到在游戏视图中完全垂直的选定线位于平面上。
这是代码,我在球体中心位置的左侧和右侧找到四个vector3,并将它们存储在列表中:
Vector3 p1 = sphere1.transform.position;
Vector3 p2 = sphere2.transform.position;
Vector3 scp1 = cam.WorldToScreenPoint(p1);
Vector3 scp2 = cam.WorldToScreenPoint(p2);
Vector3 v1 = (scp2 - scp1).normalized;
Vector3 n = Vector3.Cross(v1, Vector3.forward);
Vector3 newVert;
Vector3 o = 6f * n * 3 * (0f / 3 - 0.5f);
newVert = cam.ScreenToWorldPoint(scp1 + o);
listVerts.Add(newVert );
newVert = cam.ScreenToWorldPoint(scp2 + o);
listVerts.Add(newVert );
o = 6f * n * 3 * (1 - 0.5f);
newVert = cam.ScreenToWorldPoint(scp2 + o);
listVerts.Add(newVert );
newVert = cam.ScreenToWorldPoint(scp1 + o);
listVerts.Add(newVert );
然后将列表传递给创建网格的函数。 我必须做什么以确保所有网格都搁在地板上? 有没有更好的方法来使点平行于球的中心?
答案 0 :(得分:1)
一种方法是仅使用每个球面底部的y分量覆盖每个顶点的null
分量。
y