Unity获取物体网格(mesh)顶点(vertex)的世界坐标

这篇具有很好参考价值的文章主要介绍了Unity获取物体网格(mesh)顶点(vertex)的世界坐标。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、问题来源:有一个球球,要在他表面上铺很多东西

​​​​Unity获取物体网格(mesh)顶点(vertex)的世界坐标

二、思路之一:获取mesh上的顶点,在每个顶点处,放置一个东东

  • 1、获取物体的所有顶点
myGameObject.GetComponent<MeshFilter>().sharedMesh.vertices//Vector3[]

注意使用:sharedMesh,而不是mesh

  • 2、顶点的坐标转变成世界坐标
var worldPos = myGameObject.transform.TransformPoint(v1);//v1是之前读取的一个顶点坐标

注意:
必须用myGameObject.transform.TransformPoint(v1)
而不是transform.TransformPoint(v1),这一句起始等价于:this.gameobject.transform.TransformPoint(v1)

  • 3、剩下的比较简单了,就在是坐标处安放物体

三、关键代码

  • 读取所有顶点的世界坐标
 /// <summary>
 /// 获取物体mesh上所有顶点的世界坐标
 /// </summary>
 /// <param name="myGameObject">要读取数据的物体</param>
 /// <returns>List<Vector3></returns>
 List<Vector3> GetWorldPositionOfVertexs(GameObject myGameObject)
 {
     return  myGameObject.GetComponent<MeshFilter>()
         .sharedMesh
         .vertices
         .Select(v => myGameObject.transform.TransformPoint(v))
         .ToList();
 }
  • 测试

#if UNITY_EDITOR
 [ContextMenu("获取mesh顶点的世界坐标测试")]
#endif
 void test()
 {
     var res = GetWorldPositionOfVertexs(myGameObject);
     Debug.Log($"物体的顶点数量:{res.Count}");
     res.ForEach(x=>Debug.Log(x));
 }

Unity获取物体网格(mesh)顶点(vertex)的世界坐标文章来源地址https://www.toymoban.com/news/detail-503971.html

到了这里,关于Unity获取物体网格(mesh)顶点(vertex)的世界坐标的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity 顶点vertices,uv,与图片贴图,与mesh

    mesh就是组成3d物体的三角形们。 mesh由顶点组成的三角形组成,三角形的大小 并不 需要一样,由顶点之间的位置决定。 mesh可以是一个或者多个面。 贴图的原点在左下角,uv是贴图的坐标,数量和顶点数一样(不是100%确定,比如前后左右4个面,贴图最终如何封闭,我还不知

    2024年02月10日
    浏览(32)
  • Unity网格篇Mesh(二)

    本文接上一遍Unity网格篇Mesh(二) 我们的网格目前处于一种特殊的情况下。因为我们到目前为止还没有给他们法线向量,默认的法线向量是(0,0,1)(垂直于屏幕向里),而我们需要的正好相反。 法线工作原理是什么呢? 法线是垂直于面的向量。我们通常使用单位长度的法向量

    2024年01月17日
    浏览(38)
  • Unity网格篇Mesh(一)

    创建网格坐标 使用携程计算他们位置 利用三角形确定一个面 自动生成法线 添加纹理坐标和切线 这篇教程中我们将利用顶点和三角面创建一个网格。 原英文篇 如果你想要在Unity显示一些东西,你需要一个网格。他可以是一个3D模型从另一个程序倒入的(3dmax,maya)。它也可

    2024年02月03日
    浏览(38)
  • 3Ds Max坐标轴切换,使用物体的世界坐标和本地坐标之间切换

    官方文档 官方文档 使用“参考坐标系”列表,可以指定变换(移动、旋转和缩放)所用的坐标系。选项包括“视图”、“屏幕”、“世界”、“父对象”、“局部”、“万向”,“栅格”、“工作”和“拾取”。 主工具栏 “参考坐标系”下拉菜单 在“屏幕”坐标系中,所

    2024年02月12日
    浏览(36)
  • 关于unity粒子系统renderer设为mesh(网格)模式后无法旋转的问题

     将其中的render alignment设为local就可以了

    2024年02月12日
    浏览(36)
  • unity的2d屏幕坐标转3d世界坐标

    1.使用ScreenToWorldPoint将获取的屏幕位置直接转成世界坐标:      坑1:获取的屏幕坐标Input.mousePosition是一个2d坐标,z轴值为0,这个z值是相对于当前camera的,为零表示z轴与相机重合了,因此给ScreenToWorlfdPoint传值时,不能直接传Input.mousePosition,否则获取的世界坐标永远只有一个

    2024年02月17日
    浏览(32)
  • Unity坐标系的转换—世界坐标转为UI坐标

    直接调用WorldToAnchorPos,传入对应的参数返回UGUI坐标

    2024年04月13日
    浏览(33)
  • unity3D中用Mesh Collider创建的碰撞体与物体模型位置有偏差的解决方法

    1.相信很多小伙伴在使用Mesh Collider时都遇到过下面这个情况: 1.解决方法:在这个对象Alpaca下面新建一个空对象Collider,我们把Mesh Collider添加到这个空对象上面就可以调整碰撞体的位置了  3.完成效果:

    2024年02月13日
    浏览(33)
  • 【Unity】Transform—“本地坐标”与“世界坐标”相互转换

    现有: Lesson10脚本的代码: 运行: 可以帮助我们判断一个物体大概在我的什么方位 现有: Lesson10脚本的代码: 运行:

    2024年02月11日
    浏览(24)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包