Unity 怎么改变Cube大小
例如我想让Cube变高直接改变scale的Y的话,Cube的顶部和底部都会伸展,怎么直接修改顶部的高度。...
例如我想让Cube变高
直接改变scale的Y的话,Cube的顶部和底部都会伸展,怎么直接修改顶部的高度。 展开
直接改变scale的Y的话,Cube的顶部和底部都会伸展,怎么直接修改顶部的高度。 展开
5个回答
展开全部
是的,只能改变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);
}
VSH艾羽
2024-10-27 广告
2024-10-27 广告
ANSYS是一款功能强大的有限元分析软件,广泛应用于航空航天、汽车、电子、能源等多个领域。它能够进行结构、流体、热、电磁等多物理场的仿真分析,支持复杂的几何建模、高效的网格划分和多种求解器,帮助工程师优化产品设计,减少开发成本,提高生产效率...
点击进入详情页
本回答由VSH艾羽提供
展开全部
MeshFilter meshf = gameObject.GetComponent<MeshFilter>();
Mesh mesh = meshf.mesh;
mesh.vertices = verticearr;
mesh.RecalculateBounds();
Mesh mesh = meshf.mesh;
mesh.vertices = verticearr;
mesh.RecalculateBounds();
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你可以使用3dMax在Max中区给模型的UV的六个面给不同的颜色!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
scale是缩放比,不是真正的大小,平时使用可能区别不大,但在物理引擎等方面会出现无法挽回的错误。cube的初始化大小是1米,是所有模型的标准尺度。而unity里面不支持cube及其他模型或对象的大小修改,只能修改其scale,这个问题就涉及到一个比较深层次的原理了。unity的底层是opengl,而opengl对模型的缩放也是只能通过scale,因为从计算机图形学的角度来说,模型的缩放实际上只是乘以一个缩放因子,然后从原点坐标通过坐标轴的变换摆放到适当的位置,而不是直接变换这个模型。变换坐标轴的结果就是只能在结果坐标位置以原始大小按比例缩放,这个缩放所用到的缩放因子就是scale。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
scale是缩放比,不是真正的大小,平时使用可能区别不大,但在物理引擎等方面会出现无法挽回的错误。cube的初始化大小是1米,是所有模型的标准尺度。而unity里面不支持cube及其他模型或对象的大小修改,只能修改其scale,这个问题就涉及到一个比较深层次的原理了。unity的底层是opengl,而opengl对模型的缩放也是只能通过scale,因为从计算机图形学的角度来说,模型的缩放实际上只是乘以一个缩放因子,然后从原点坐标通过坐标轴的变换摆放到适当的位置,而不是直接变换这个模型。变换坐标轴的结果就是只能在结果坐标位置以原始大小按比例缩放,这个缩放所用到的缩放因子就是scale。
好吧,讲了那么多可能你也没听懂,涉及的知识比较多。总的来说,你只能通过调整scale来缩放该模型,或者有个更直接的方法,你在做模型的时候把大小调整好再放进来。记住,cube也是模型,跟通过3dmax,maya做出来的模型没有本质区别
好吧,讲了那么多可能你也没听懂,涉及的知识比较多。总的来说,你只能通过调整scale来缩放该模型,或者有个更直接的方法,你在做模型的时候把大小调整好再放进来。记住,cube也是模型,跟通过3dmax,maya做出来的模型没有本质区别
追问
我觉得你可能误会我了,其实我也知道scale是缩放因子不是真正大小。于是我决定通过编辑mesh来达到目的,其实我对这方面了解不是很多,Mesh是能够达到要求的吧?
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询