许可优化
产品
解决方案
服务支持
关于
软件库
当前位置:服务支持 >  软件文章 >  使用unity的mesh绘制三菱柱的碰撞体(3d三角形)

使用unity的mesh绘制三菱柱的碰撞体(3d三角形)

阅读数 8
点赞 0
article_banner

因为项目中有很多 似三菱柱的物体,如果使用meshcollider的话,模型边的弧度会有很多碰撞线,所以就想着能不能自己绘制

一个三菱柱的碰撞体。思路是首先绘制出三菱柱,然后在添加meshcollidre,这样就能绘制出来了。

然后参考博客http://www.cnblogs.com/JLZT1223/p/6089996.html


首先上效果图:

     


然后下面是代码:


  1. /*************************************************************************
  2. * FileName: DrawTriangle.cs
  3. * Author: LaiZhangYin(Eagle) Version: 1.0 Date: 6/21/2017
  4. * if you have some question, please call
  5. * QQ/Wechat : 782966734
  6. *************************************************************************/
  7. using UnityEngine;
  8. using System.Collections;
  9. [RequireComponent(typeof(MeshRenderer), typeof(MeshFilter))]
  10. public class DrawTriangle : BaseMonoBehaviour
  11. {
  12. public float length = 6;
  13. public float width = 6;
  14. public float height = 6;
  15. private MeshFilter meshFilter;
  16. void Start()
  17. {
  18. meshFilter = GetComponent<MeshFilter>();
  19. meshFilter.mesh = CreateTriangle(length, width, height);
  20. if (this.gameObject.AddComponent<MeshCollider>() == null)
  21. this.gameObject.AddComponent<MeshCollider>();
  22. this.GetComponent<MeshRenderer>().enabled = false;
  23. }
  24. private Mesh CreateTriangle(float length, float width, float height)
  25. {
  26. int verticesCount = 4 * 6;//3* 4;
  27. Vector3[] vertices = new Vector3[verticesCount];
  28. vertices[0] = Vector3.zero; //前面左下角的点
  29. vertices[1] = new Vector3(0, height, 0); //前面左上角的点
  30. vertices[2] = new Vector3(length, 0, 0); // 前面右下角的点
  31. vertices[3] = new Vector3(length, height, 0);//前面右上角的点
  32. vertices[4] = Vector3.zero;//new Vector3(length, 0, width); //后面右下角的点
  33. vertices[5] = Vector3.zero;//new Vector3(length, height, width); //后面右上角的点
  34. vertices[6] = new Vector3(0, 0, width); //后面左下角的点
  35. vertices[7] = new Vector3(0, height, width); //后面左上角的点
  36. vertices[8] = vertices[6]; //左
  37. vertices[9] = vertices[7];
  38. vertices[10] = vertices[0];
  39. vertices[11] = vertices[1];
  40. vertices[12] = vertices[2]; //右
  41. vertices[13] = vertices[3];
  42. vertices[14] = vertices[6];
  43. vertices[15] = vertices[7];
  44. vertices[16] = vertices[1]; //上
  45. vertices[17] = vertices[7];
  46. vertices[18] = vertices[3];
  47. vertices[19] = vertices[7];
  48. vertices[20] = vertices[2]; //下
  49. vertices[21] = vertices[6];
  50. vertices[22] = vertices[0];
  51. vertices[23] = vertices[6];
  52. int triangleCount = 6 * 2 * 3;
  53. int[] triangles = new int[triangleCount];
  54. for (int i = 0, v = 0; i < triangleCount; i += 6, v += 4)
  55. {
  56. triangles[i] = v;
  57. triangles[i + 1] = v + 1;
  58. triangles[i + 2] = v + 2;
  59. triangles[i + 3] = v + 3;
  60. triangles[i + 4] = v + 2;
  61. triangles[i + 5] = v + 1;
  62. }
  63. Mesh mesh = new Mesh();
  64. mesh.vertices = vertices;
  65. mesh.triangles = triangles;
  66. return mesh;
  67. }
  68. #if UNITY_EDITOR
  69. //用于在编辑状态设置大小
  70. void OnDrawGizmos()
  71. {
  72. meshFilter = GetComponent<MeshFilter>();
  73. meshFilter.mesh = CreateTriangle(length, width, height);
  74. }
  75. #endif
  76. }
html



对于绘制出来的下面有一个图便于理解:


然后就是根据这个图的示意来绘制三菱柱了。





完!





免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删
相关文章
QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空