纳金网

标题: unity鼠标拾取网格顶点 [打印本页]

作者: 王者再临    时间: 2014-12-31 22:42
标题: unity鼠标拾取网格顶点
  1. RaycastHit hit;

  2. Ray ray = Camera.mainCamera.ScreenPointToRay(Input.mousePosition);

  3. if (Physics.Raycast(ray, out hit, 100))

  4. {

  5. //拾取三角面前提是物体含有一个MeshCollider碰撞器

  6. MeshCollider collider = hit.collider as MeshCollider;

  7. if (collider == null||collider.sharedMesh==null)

  8. return;

  9. //获取碰撞器所在物体的Mesh网格

  10. Mesh mesh0 = collider.sharedMesh;

  11. //获取Mesh网格的所有顶点

  12. Vector3[] vertices = mesh0.vertices;

  13. //获取mesh的三角形索引,这里的索引的就是模型顶点数组的下标

  14. int[] triangles = mesh0.triangles;

  15. //然后通过hit.triangleIndex(摄像碰撞到的三角形的第一个点的索引)

  16. //然后+1 ,+2,获取三角形另外两个点的坐标

  17. Vector3 p0 = vertices[triangles[hit.triangleIndex * 3]];

  18. Vector3 p1 = vertices[triangles[hit.triangleIndex * 3 + 1]];

  19. Vector3 p2 = vertices[triangles[hit.triangleIndex * 3 + 2]];

  20. Transform transform = collider.transform;

  21. //上面的三个顶点是Mesh的本地坐标,需要用模型的Transform进行转换到世界坐标

  22. p0 = transform.TransformPoint(p0);

  23. p1 = transform.TransformPoint(p1);

  24. p2 = transform.TransformPoint(p2);

  25. //然后设置三个小球的位置到这个三个点,方便调试,呵呵!

  26. GameObject.Find(“Sphere1”).transform.position = p0;

  27. GameObject.Find(“Sphere2”).transform.position = p1;

  28. GameObject.Find(“Sphere3”).transform.position = p2;

  29. }
复制代码

作者: 我不再年轻    时间: 2015-1-3 11:10
不错, 学习了!




欢迎光临 纳金网 (http://www.narkii.com/club/) Powered by Discuz! X2.5