在Unity3d中翻转3D游戏对象

时间:2018-06-29 11:07:19

标签: c# unity3d 3d game-engine

有没有办法在Unity3d中翻转(镜像)3D GameObject?

我想使用Unity游戏引擎功能翻转3D游戏对象之一

2 个答案:

答案 0 :(得分:4)

是的,实际上翻转对象并不难。这是我的代码的两个片段,实现了这一点(我省略了捕捉网格引用的明显样板):

    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();
    }

一个重要的细节是,根据轴配置,您可能需要翻转面法线。这是通过颠倒三角形数组中引用顶点的顺序来实现的:

    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;
    }

答案 1 :(得分:3)

您可以在检查器中通过X = -1Y = -1Z = -1缩放对象。根据要镜像对象的轴。

通过代码,您可以通过以下方式实现:

transform.localScale += new Vector3(-transform.localScale.x, transform.localScale.y, transform.localScale.z);

例如用于x轴镜像。

这适用于简单对象。如果将对象设置为动画,这将导致奇怪的行为。