因为项目中有很多 类 似三菱柱的物体,如果使用meshcollider的话,模型边的弧度会有很多碰撞线,所以就想着能不能自己绘制
一个三菱柱的碰撞体。思路是首先绘制出三菱柱,然后在添加meshcollidre,这样就能绘制出来了。
然后参考博客:http://www.cnblogs.com/JLZT1223/p/6089996.html
首先上效果图:

然后下面是代码:
- /*************************************************************************
- * FileName: DrawTriangle.cs
- * Author: LaiZhangYin(Eagle) Version: 1.0 Date: 6/21/2017
- * if you have some question, please call
- * QQ/Wechat : 782966734
- *************************************************************************/
-
- using UnityEngine;
- using System.Collections;
-
- [RequireComponent(typeof(MeshRenderer), typeof(MeshFilter))]
- public class DrawTriangle : BaseMonoBehaviour
- {
- public float length = 6;
- public float width = 6;
- public float height = 6;
-
- private MeshFilter meshFilter;
- void Start()
- {
- meshFilter = GetComponent<MeshFilter>();
- meshFilter.mesh = CreateTriangle(length, width, height);
- if (this.gameObject.AddComponent<MeshCollider>() == null)
- this.gameObject.AddComponent<MeshCollider>();
- this.GetComponent<MeshRenderer>().enabled = false;
- }
-
- private Mesh CreateTriangle(float length, float width, float height)
- {
- int verticesCount = 4 * 6;//3* 4;
- Vector3[] vertices = new Vector3[verticesCount];
-
- vertices[0] = Vector3.zero; //前面左下角的点
- vertices[1] = new Vector3(0, height, 0); //前面左上角的点
- vertices[2] = new Vector3(length, 0, 0); // 前面右下角的点
- vertices[3] = new Vector3(length, height, 0);//前面右上角的点
-
- vertices[4] = Vector3.zero;//new Vector3(length, 0, width); //后面右下角的点
- vertices[5] = Vector3.zero;//new Vector3(length, height, width); //后面右上角的点
- vertices[6] = new Vector3(0, 0, width); //后面左下角的点
- vertices[7] = new Vector3(0, height, width); //后面左上角的点
-
- vertices[8] = vertices[6]; //左
- vertices[9] = vertices[7];
- vertices[10] = vertices[0];
- vertices[11] = vertices[1];
-
- vertices[12] = vertices[2]; //右
- vertices[13] = vertices[3];
- vertices[14] = vertices[6];
- vertices[15] = vertices[7];
-
- vertices[16] = vertices[1]; //上
- vertices[17] = vertices[7];
- vertices[18] = vertices[3];
- vertices[19] = vertices[7];
-
- vertices[20] = vertices[2]; //下
- vertices[21] = vertices[6];
- vertices[22] = vertices[0];
- vertices[23] = vertices[6];
-
-
- int triangleCount = 6 * 2 * 3;
- int[] triangles = new int[triangleCount];
- for (int i = 0, v = 0; i < triangleCount; i += 6, v += 4)
- {
- triangles[i] = v;
- triangles[i + 1] = v + 1;
- triangles[i + 2] = v + 2;
-
- triangles[i + 3] = v + 3;
- triangles[i + 4] = v + 2;
- triangles[i + 5] = v + 1;
- }
-
- Mesh mesh = new Mesh();
- mesh.vertices = vertices;
- mesh.triangles = triangles;
- return mesh;
- }
-
- #if UNITY_EDITOR
- //用于在编辑状态设置大小
- void OnDrawGizmos()
- {
- meshFilter = GetComponent<MeshFilter>();
- meshFilter.mesh = CreateTriangle(length, width, height);
- }
- #endif
- }
html
对于绘制出来的下面有一个图便于理解:

然后就是根据这个图的示意来绘制三菱柱了。
完!
武汉格发信息技术有限公司,格发许可优化管理系统可以帮你评估贵公司软件许可的真实需求,再低成本合规性管理软件许可,帮助贵司提高软件投资回报率,为软件采购、使用提供科学决策依据。支持的软件有: CAD,CAE,PDM,PLM,Catia,Ugnx, AutoCAD, Pro/E, Solidworks ,Hyperworks, Protel,CAXA,OpenWorks LandMark,MATLAB,Enovia,Winchill,TeamCenter,MathCAD,Ansys, Abaqus,ls-dyna, Fluent, MSC,Bentley,License,UG,ug,catia,Dassault Systèmes,AutoDesk,Altair,autocad,PTC,SolidWorks,Ansys,Siemens PLM Software,Paradigm,Mathworks,Borland,AVEVA,ESRI,hP,Solibri,Progman,Leica,Cadence,IBM,SIMULIA,Citrix,Sybase,Schlumberger,MSC Products...