一、问题来源:有一个球球,要在他表面上铺很多东西
二、思路之一:获取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)文章来源:https://www.toymoban.com/news/detail-503971.html
- 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));
}
文章来源地址https://www.toymoban.com/news/detail-503971.html
到了这里,关于Unity获取物体网格(mesh)顶点(vertex)的世界坐标的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!