想做来在3D项目中做标记 直接上代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;
[RequireComponent(typeof(MeshRenderer), typeof(MeshFilter))]
public class DrawTriangle : MonoBehaviour
{
public float length = 1;
public float width = 1;
public float height = 1;
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;
this.transform.DOMoveY(this.transform.position.y - 0.3f, 0.5f, false).SetLoops(int.MaxValue, LoopType.Yoyo);
}
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, height / 2, width / 2); // 前面右下角的点
vertices[3] = new Vector3(length, height / 2, width / 2);//前面右上角的点
vertices[4] = new Vector3(length, height / 2, width/2); //后面右下角的点
vertices[5] = new Vector3(length, height/2, width/2); //后面右上角的点
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.mesh = CreateTriangle(length, width, height);
}
#endif
}
这篇博客介绍如何在Unity中实现除了圆柱和立方体之外的几何形状,如棱锥。通过提供的C#代码示例,展示了如何利用MeshFilter和MeshRenderer组件创建具有特定长度、宽度和高度的3D三角形,并在Unity编辑器中进行预览和调整。

被折叠的 条评论
为什么被折叠?



