Unity 怎么改变Cube大小

例如我想让Cube变高直接改变scale的Y的话,Cube的顶部和底部都会伸展,怎么直接修改顶部的高度。... 例如我想让Cube变高
直接改变scale的Y的话,Cube的顶部和底部都会伸展,怎么直接修改顶部的高度。
展开
 我来答
只手星海
2018-12-04 · TA获得超过290个赞
知道小有建树答主
回答量:554
采纳率:60%
帮助的人:163万
展开全部

是的,只能改变scale,但是我们可以通过重写mesh,将cube的transfrom的原点放在底部的中心。

这里是我写的将其放在底部中心的源码,正常来讲,我们应该写24个顶点和24个对应uv,因为本例中只是想实现很简单的放大scaley,所以我只写8个顶点和uv。

_verticesList为顶点,_uvList是uv,_triList是三角形

private void finalmesh()
    {
        GameObject orgcube = new GameObject();
        MeshFilter meshf = orgcube.AddComponent<MeshFilter>();
        orgcube.AddComponent<MeshRenderer>();
        Mesh m = new Mesh();
        List<Vector3> _verticesList = new List<Vector3>();
        List<Vector2> _uvList = new List<Vector2>();
        List<int> _triList = new List<int>();

        _verticesList.Add(new Vector3(-0.5f, 0, -0.5f));
        _verticesList.Add(new Vector3(0.5f, 0, -0.5f));
        _verticesList.Add(new Vector3(0.5f, 1, -0.5f));
        _verticesList.Add(new Vector3(-0.5f, 1, -0.5f));

        _verticesList.Add(new Vector3(-0.5f, 0, 0.5f));
        _verticesList.Add(new Vector3(0.5f, 0, 0.5f));
        _verticesList.Add(new Vector3(0.5f, 1, 0.5f));
        _verticesList.Add(new Vector3(-0.5f, 1, 0.5f));

        _uvList.Add(new Vector2(0, 0));
        _uvList.Add(new Vector2(1, 0));
        _uvList.Add(new Vector2(1, 1));
        _uvList.Add(new Vector2(1, 1));

        _uvList.Add(new Vector2(1, 0));
        _uvList.Add(new Vector2(1, 0));
        _uvList.Add(new Vector2(1, 1));
        _uvList.Add(new Vector2(1, 1));

        // 前面
        _triList.Add(0);
        _triList.Add(1);
        _triList.Add(2);


        _triList.Add(0);
        _triList.Add(2);
        _triList.Add(3);


        // 后面
        _triList.Add(4);
        _triList.Add(7);
        _triList.Add(5);

        _triList.Add(5);
        _triList.Add(7);
        _triList.Add(6);


        // 左面
        _triList.Add(1);
        _triList.Add(5);
        _triList.Add(6);

        _triList.Add(1);
        _triList.Add(6);
        _triList.Add(2);


        // 右面
        _triList.Add(0);
        _triList.Add(3);
        _triList.Add(4);

        _triList.Add(3);
        _triList.Add(7);
        _triList.Add(4);

        // 上面
        _triList.Add(2);
        _triList.Add(6);
        _triList.Add(3);

        _triList.Add(3);
        _triList.Add(6);
        _triList.Add(7);

        // 下面
        _triList.Add(1);
        _triList.Add(4);
        _triList.Add(5);

        _triList.Add(0);
        _triList.Add(4);
        _triList.Add(1);
    

        m.vertices = _verticesList.ToArray();
        m.uv = _uvList.ToArray();
        m.triangles = _triList.ToArray();
        // m.RecalculateNormals();
        meshf.mesh = m;
        //在这里设置缩放吧,注意,本例中并没有设置cube的位置,请自行放置
        orgcube.transform.localScale = new Vector3(0.01f, 1, 0.01f);
    }
fgfg54321
2015-03-07 · 超过25用户采纳过TA的回答
知道答主
回答量:141
采纳率:0%
帮助的人:57.8万
展开全部
MeshFilter meshf = gameObject.GetComponent<MeshFilter>();
Mesh mesh = meshf.mesh;
mesh.vertices = verticearr;
mesh.RecalculateBounds();
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友f31df63
2017-06-14
知道答主
回答量:43
采纳率:0%
帮助的人:5.6万
展开全部
你可以使用3dMax在Max中区给模型的UV的六个面给不同的颜色!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
MaeHsu
2015-09-29 · TA获得超过1.1万个赞
知道小有建树答主
回答量:5783
采纳率:88%
帮助的人:235万
展开全部
scale是缩放比,不是真正的大小,平时使用可能区别不大,但在物理引擎等方面会出现无法挽回的错误。cube的初始化大小是1米,是所有模型的标准尺度。而unity里面不支持cube及其他模型或对象的大小修改,只能修改其scale,这个问题就涉及到一个比较深层次的原理了。unity的底层是opengl,而opengl对模型的缩放也是只能通过scale,因为从计算机图形学的角度来说,模型的缩放实际上只是乘以一个缩放因子,然后从原点坐标通过坐标轴的变换摆放到适当的位置,而不是直接变换这个模型。变换坐标轴的结果就是只能在结果坐标位置以原始大小按比例缩放,这个缩放所用到的缩放因子就是scale。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
琥珀陨翼
2014-08-09 · TA获得超过103个赞
知道答主
回答量:194
采纳率:0%
帮助的人:167万
展开全部
scale是缩放比,不是真正的大小,平时使用可能区别不大,但在物理引擎等方面会出现无法挽回的错误。cube的初始化大小是1米,是所有模型的标准尺度。而unity里面不支持cube及其他模型或对象的大小修改,只能修改其scale,这个问题就涉及到一个比较深层次的原理了。unity的底层是opengl,而opengl对模型的缩放也是只能通过scale,因为从计算机图形学的角度来说,模型的缩放实际上只是乘以一个缩放因子,然后从原点坐标通过坐标轴的变换摆放到适当的位置,而不是直接变换这个模型。变换坐标轴的结果就是只能在结果坐标位置以原始大小按比例缩放,这个缩放所用到的缩放因子就是scale。

好吧,讲了那么多可能你也没听懂,涉及的知识比较多。总的来说,你只能通过调整scale来缩放该模型,或者有个更直接的方法,你在做模型的时候把大小调整好再放进来。记住,cube也是模型,跟通过3dmax,maya做出来的模型没有本质区别
追问
我觉得你可能误会我了,其实我也知道scale是缩放因子不是真正大小。于是我决定通过编辑mesh来达到目的,其实我对这方面了解不是很多,Mesh是能够达到要求的吧?
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式