使用Mesh网格绘制正方体

效果如图:

我们首先需要设置所需要连接的点,以及渲染的面。

 


    void Start()
    {
        Mesh mesh = new Mesh();
        this.GetComponent<MeshFilter>().mesh = mesh;
        List<Vector3> vector3s = new List<Vector3>();//顶点坐标
        vector3s.Add(new Vector3(0, 0, 0));
        vector3s.Add(new Vector3(0, 1, 0));
        vector3s.Add(new Vector3(1, 1, 0));
        vector3s.Add(new Vector3(1, 0, 0));
        vector3s.Add(new Vector3(1, 0, 1));
        vector3s.Add(new Vector3(1, 1, 1));
        vector3s.Add(new Vector3(0, 1, 1));
        vector3s.Add(new Vector3(0, 0, 1));
        mesh.vertices = vector3s.ToArray();//渲染顺序
        mesh.triangles = new int[] {
            0, 1, 2,
            0, 2, 3,
            3, 2, 5,
            3, 5, 4,
            4, 5, 6,
            4, 6, 7,
            7, 6, 1,
            7, 1, 0,
            0, 4, 7,
            0, 3, 4,
            1, 6, 5,
            1, 5, 2
        };
    }



现在绘制出的正方体没有法线的缘故会导致有些不完整,无法受到光亮影响以及形状等其他因素;

我们在代码下方加上一行:mesh.RecalculateNormals();,它会去自动给我们添加法线并重新计算法线。

如上所致,我们渲染出来的正方体是个没有材质的正方体,所以我们去给他赋一个贴图,通过Uv坐标进行渲染。

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

public class MeshSan : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        List<Vector2> vector2s = new List<Vector2>();//贴图坐标
        vector2s.Add(new Vector2(0, 0));
        vector2s.Add(new Vector2(1, 0));
        vector2s.Add(new Vector2(1, 1));
        vector2s.Add(new Vector2(0, 1));
        vector2s.Add(new Vector2(0, 0));
        vector2s.Add(new Vector2(1, 0));
        vector2s.Add(new Vector2(1, 1));
        vector2s.Add(new Vector2(0, 1));
        mesh.uv = vector2s.ToArray();

    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

这样我们带有材质的正方体就绘制完成了。

整体代码如下:

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

public class MeshSan : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        Mesh mesh = new Mesh();
        this.GetComponent<MeshFilter>().mesh = mesh;
        List<Vector3> vector3s = new List<Vector3>();//顶点坐标
        vector3s.Add(new Vector3(0, 0, 0));
        vector3s.Add(new Vector3(0, 1, 0));
        vector3s.Add(new Vector3(1, 1, 0));
        vector3s.Add(new Vector3(1, 0, 0));
        vector3s.Add(new Vector3(1, 0, 1));
        vector3s.Add(new Vector3(1, 1, 1));
        vector3s.Add(new Vector3(0, 1, 1));
        vector3s.Add(new Vector3(0, 0, 1));
        mesh.vertices = vector3s.ToArray();//渲染顺序
        mesh.triangles = new int[] {
            0, 1, 2,
            0, 2, 3,
            3, 2, 5,
            3, 5, 4,
            4, 5, 6,
            4, 6, 7,
            7, 6, 1,
            7, 1, 0,
            0, 4, 7,
            0, 3, 4,
            1, 6, 5,
            1, 5, 2
        };
        mesh.RecalculateNormals();//重新计算法线
        List<Vector2> vector2s = new List<Vector2>();//贴图坐标
        vector2s.Add(new Vector2(0, 0));
        vector2s.Add(new Vector2(1, 0));
        vector2s.Add(new Vector2(1, 1));
        vector2s.Add(new Vector2(0, 1));
        vector2s.Add(new Vector2(0, 0));
        vector2s.Add(new Vector2(1, 0));
        vector2s.Add(new Vector2(1, 1));
        vector2s.Add(new Vector2(0, 1));
        mesh.uv = vector2s.ToArray();

    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值