有什么方法可以在GameObject中翻转(镜子) 3D Unity3d吗?
我想使用统一游戏引擎功能翻转一个3D GameObjects。
发布于 2018-06-29 11:16:45
是的,翻转物体其实并不难。下面是实现这一目标的代码片段(我忽略了获取网格引用的明显样板):
public bool flipX = true;
public bool flipY;
public bool flipZ;
void Flip()
{
if (mesh == null) return;
Vector3[] verts = mesh.vertices;
for (int i = 0; i < verts.Length; i++)
{
Vector3 c = verts[i];
if (flipX) c.x *= -1;
if (flipY) c.y *= -1;
if (flipZ) c.z *= -1;
verts[i] = c;
}
mesh.vertices = verts;
if (flipX ^ flipY ^ flipZ) FlipNormals();
}一个重要的细节是,取决于轴的配置,您可能需要翻转脸法线。这是通过逆转三角形数组中引用verts的顺序来实现的:
void FlipNormals()
{
int[] tris = mesh.triangles;
for (int i = 0; i < tris.Length / 3; i++)
{
int a = tris[i * 3 + 0];
int b = tris[i * 3 + 1];
int c = tris[i * 3 + 2];
tris[i * 3 + 0] = c;
tris[i * 3 + 1] = b;
tris[i * 3 + 2] = a;
}
mesh.triangles = tris;
}发布于 2018-06-29 11:15:56
您可以在检查器中使用X = -1或Y = -1或Z = -1来缩放对象。根据轴,你想要镜像物体。
根据代码,您可以通过以下方法来完成这一任务:
transform.localScale += new Vector3(-transform.localScale.x, transform.localScale.y, transform.localScale.z);例如,用于x轴的镜像。
这适用于简单的对象。如果该对象是动画的,这将导致一个奇怪的行为。
https://stackoverflow.com/questions/51100346
复制相似问题