首页 > 解决方案 > 制作双面平面

问题描述

我是Unity的新手,所以也许我的问题太简单了,但我无法解决。我正在制作类似虚拟公寓设计师的东西,我使用平面来绘制墙壁,所以我有它的起点 X、终点 X、起点 Y、终点 Y 和高度。为了查看每面墙的两侧,我决定使用双层墙并将其旋转到 180(可能是错误的)。但每次尝试都有失败。当我使用简单plane.Rotate时,它会旋转,但会改变它的位置,(就像中心在平面下方的某个地方)。当我使用时plane.RotateArount,位置是正确的,但旋转不是。 有我如何创建飞机的代码

public static GameObject CreatePlane(float x1, float z1, float y1, float x2, float z2, float y2, Material material, bool rotate)
{
    var go = new GameObject("plane");
    var mf = go.AddComponent(typeof(MeshFilter)) as MeshFilter;
    var mr = go.AddComponent(typeof(MeshRenderer)) as MeshRenderer;
    var m = new Mesh();

    m.vertices = new[]
    {
        new Vector3(x1, y1, z1), 
        new Vector3(x1, y2, z1), 
        new Vector3(x2, y2, z2), 
        new Vector3(x2, y1, z2)

    };
    m.uv = new[]
    {
        new Vector2(1,1), 
        new Vector2(1,1), 
        new Vector2(1,1), 
        new Vector2(1,1), 
    };
    m.triangles = new[] {0, 1, 2, 0, 2, 3};
   if (mr != null) mr.material = material;
    if (mf != null) mf.mesh = m;
    m.RecalculateBounds();
    m.RecalculateNormals();
    go.AddComponent<BoxCollider>();
    return go;
}

和我的旋转尝试:

plane.AddComponent<RectTransform>().transform.rotation = Quaternion.Euler(0,0,180);
plane.transform.RotateAround(new Vector3(0,1,0),plane.transform.position,  180);
plane.transform.rotation = Quaternion.Euler(0,0,180);
plane.transform.localRotation = Quaternion.Euler(0,0,180);

先感谢您

另外,我注意到,当我在编辑器中旋转这个平面时,位置坐标也在变化。正常吗。。?

标签: unity3drotationplane

解决方案


为什么不创建一个立方体并在每个轴上给它一个比例。它会简单得多,你可以只在 Y 轴上旋转它们,你就完成了。最后,只需将所有立方体放置在您想要它们的位置,技术上就完成了。还有什么其他原因你想要飞机而不是立方体吗?


推荐阅读