unity3d的mesh组件demo

视频参考

https://www.bilibili.com/video/BV1nt411n7rw

mesh是一个网格组件 可以用来生成地形  ,Mesh的基本单位是三角形

新建一个空物体

新建一个材质

材质挂载到空物体上

添加这些组件

 

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Terrian : MonoBehaviour {
    public float width = 0.1f;

    MeshRenderer meshRenderer;
    MeshFilter meshFilter;
    MeshCollider meshCollider;

    // 用来存放顶点数据
    List<Vector3> verts;
    List<int> indices;

    private void Awake() {
    }

    private void Start() {
        verts = new List<Vector3>();
        indices = new List<int>();

        meshRenderer = GetComponent<MeshRenderer>();
        meshFilter = GetComponent<MeshFilter>();
        meshCollider = GetComponent<MeshCollider>();

        Generate();
    }

    public void Generate() {
        ClearMeshData();

        // 把数据填写好
        AddMeshData();

        // 把数据传递给Mesh,生成真正的网格
        Mesh mesh = new Mesh();
        mesh.vertices = verts.ToArray();
        //mesh.uv = uvs.ToArray();
        mesh.triangles = indices.ToArray();

        mesh.RecalculateNormals();
        mesh.RecalculateBounds();

        meshFilter.mesh = mesh;
        // 碰撞体专用的mesh,只负责物体的碰撞外形
        meshCollider.sharedMesh = mesh;
    }

    void ClearMeshData() {
        verts.Clear();
        indices.Clear();
    }

    void AddMeshData() {
        verts.Add(new Vector3(0, 0, 0));
        verts.Add(new Vector3(0, 0, 1));
        verts.Add(new Vector3(1, 0, 1));
        verts.Add(new Vector3(1, 0, 0));

        indices.Add(0);
        indices.Add(1);
        indices.Add(2);
        indices.Add(0);
        indices.Add(2);
        indices.Add(3);
    }
}

 

https://www.bilibili.com/video/BV1S4411T7Nd

 

顺时针填入 是从上向下看

    void BuildPlane() {
        List<Vector3> verts = new List<Vector3>();
        List<int> indices = new List<int>();
        
        verts.Add(new Vector3(0,0,0));
        verts.Add(new Vector3(1,0,0));
        verts.Add(new Vector3(1,0,1));
        verts.Add(new Vector3(0,0,1));
        
        indices.Add(0);
        indices.Add(2);
        indices.Add(1);
        indices.Add(0);
        indices.Add(3);
        indices.Add(2);

        Mesh mesh = new Mesh();
        mesh.vertices = verts.ToArray();

        mesh.triangles = indices.ToArray();
        mesh.RecalculateBounds();
        mesh.RecalculateNormals();

        meshFilter.mesh = mesh;
    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值