栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 游戏开发 > Unity3D

unity模型制作(二):绘制一个铰链

Unity3D 更新时间:发布时间: 百科书网 趣学号

       (不重要的前言:该博文为系列博文,每一篇有前后文关系,例如基类、组件的集成,如果发现有陌生组件和基类,请查看前面文章,本系列文章单纯应用unity的mesh来绘制模型,并未使用任何三方插件,文章内容、代码都是纯手打,望支持)

         在开始制作铰链之前,先做个基类,本教程会制作很多模型,所以必然会有很多重复代码,将重复部分集成进基类BaseMesh:

public class BaseMesh : MonoBehaviour
{
        protected List vertices;
        protected List triangles;
        protected List uvs;

        public virtual void Create()
        {
            
        }

        public virtual List GetVertices()
        {
            return vertices;
        }

        public virtual List GetTriangles()
        {
            return triangles;
        }

        public virtual List GetUVs()
        {
            return uvs;
        }
}

基类有四个支持覆盖的方法

        Create():创建

        GetVertices():获取顶点

        GetTriangles():获取三角面

        GetUVs():获取uv

在Create里获取顶点、三角面和uv然后创建模型是这个数据结构的基本思路。

        那么现在开始制作铰链,所谓铰链,就是若干个矩形块,同侧相连组成一个条状图形,常见的应用例如:楼梯的表面、折叠的纸张、圆柱体侧面等等。

        顶点:铰链每个块彼此相连,所以顶点数组按顺序设置更容易处理,例如想制作下面这个铰链,就应该先准备好0-11共12个顶点,这个算法就不写了,比较简单。

        三角面:每一个矩形有两个三角面,例如0123组成的矩形有021和312两个三角面,一次类推,把所有三角面组合起来:

        public override List GetTriangles()
        {
            List triangles = new List();

            for (int i = 0; i < vertices.Count / 2 - 1; i++)
            {
                int index0 = i * 2 + 0;
                int index1 = i * 2 + 1;
                int index2 = i * 2 + 2;
                int index3 = i * 2 + 3;

                triangles.Add(index0);
                triangles.Add(index2);
                triangles.Add(index1);

                triangles.Add(index3);
                triangles.Add(index1);
                triangles.Add(index2);
            }
            return triangles;
        }

         uv:

        每个顶点设置一个uv

        public override List GetUVs()
        {
            List uvs = new List();

            float count = vertices.Count / 2;

            for (int i = 0; i < count; i++)
            {
                uvs.Add(new Vector2(0, i / count));
                uvs.Add(new Vector2(1, i / count));
            }

            return uvs;
        }

看看效果:

 几十行代码就能绘制出一个楼梯表面。

转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/1068791.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号