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

因为项目中有很多类似三菱柱的物体,如果使用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
}



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


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





完!




  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以通过在Unity使用Mesh绘制圆角三角形。下面是一个简单的示例代码,演示如何创建一个圆角三角形Mesh: ```csharp using UnityEngine; public class RoundedTriangle : MonoBehaviour { public float radius = 1f; public int segments = 30; void Start() { MeshFilter meshFilter = gameObject.AddComponent<MeshFilter>(); MeshRenderer meshRenderer = gameObject.AddComponent<MeshRenderer>(); Mesh mesh = new Mesh(); meshFilter.mesh = mesh; Vector3[] vertices = new Vector3[segments + 2]; int[] triangles = new int[segments * 3]; vertices[0] = Vector3.zero; // 中心点 float angleIncrement = 360f / segments; float currentAngle = 0f; for (int i = 1; i < segments + 2; i++) { float x = Mathf.Cos(Mathf.Deg2Rad * currentAngle) * radius; float y = Mathf.Sin(Mathf.Deg2Rad * currentAngle) * radius; vertices[i] = new Vector3(x, y, 0f); currentAngle += angleIncrement; } for (int i = 0; i < segments; i++) { triangles[i * 3] = 0; triangles[i * 3 + 1] = i + 1; triangles[i * 3 + 2] = i + 2; } mesh.vertices = vertices; mesh.triangles = triangles; mesh.RecalculateNormals(); // 可以在这里设置材质等其他属性 } } ``` 将脚本挂载到一个空的GameObject上,然后在Inspector面板中调整radius和segments属性来控制圆角三角形的大小和分段数。运行游戏后,你将在场景中看到绘制的圆角三角形。 注意:此示例仅绘制了一个平面的圆角三角形,如果你需要在3D空间中绘制一个具有深度的圆角三角形,你可能需要使用更复杂的算法来生成相应的顶点和三角形

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值