查看: 719|回复: 1
打印 上一主题 下一主题

[其他] unity鼠标拾取网格顶点

[复制链接]

2317

主题

54

听众

2万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
20645
精华
62

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

跳转到指定楼层
楼主
发表于 2014-12-31 22:42:39 |只看该作者 |倒序浏览
  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. }
复制代码
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

16

主题

1

听众

1万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
3
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

沙发
发表于 2015-1-3 11:10:20 |只看该作者
不错, 学习了!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

关闭

站长推荐上一条 /1 下一条

手机版|纳金网 ( 闽ICP备08008928号

GMT+8, 2024-4-29 06:01 , Processed in 0.078622 second(s), 28 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部