首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Unity3d中翻转三维游戏对象

在Unity3d中翻转三维游戏对象
EN

Stack Overflow用户
提问于 2018-06-29 11:07:18
回答 2查看 6.4K关注 0票数 3

有什么方法可以在GameObject中翻转(镜子) 3D Unity3d吗?

我想使用统一游戏引擎功能翻转一个3D GameObjects。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-29 11:16:45

是的,翻转物体其实并不难。下面是实现这一目标的代码片段(我忽略了获取网格引用的明显样板):

代码语言:javascript
运行
复制
    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的顺序来实现的:

代码语言:javascript
运行
复制
    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;
    }
票数 5
EN

Stack Overflow用户

发布于 2018-06-29 11:15:56

您可以在检查器中使用X = -1Y = -1Z = -1来缩放对象。根据轴,你想要镜像物体。

根据代码,您可以通过以下方法来完成这一任务:

代码语言:javascript
运行
复制
transform.localScale += new Vector3(-transform.localScale.x, transform.localScale.y, transform.localScale.z);

例如,用于x轴的镜像。

这适用于简单的对象。如果该对象是动画的,这将导致一个奇怪的行为。

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

https://stackoverflow.com/questions/51100346

复制
相关文章

相似问题

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