《我的世界》基础篇:生成贴图

系列概述

      这套教程涵盖了Unity Mesh编程、模拟水算法(water simulations)、方块移动算法(marching-cubes)等等。这是一套比较有深度的教程,可能需要你了解一些Unity和C#相关的知识。

 

预备开始

上一次我们制作了一些函数去设置网格数据,在这篇文章中,我将教大家怎么为方块贴图。

 

贴图嘛,首先你得有图才行呀。因此请你将下面这张图右键保存到你的工程目录中:

 

 

打开该图片的导入设置,设置图片类型(Texture Type)为 Advanced,然后将所有的勾都去掉,将过滤模式(Filter Mode)设置为 Point(no filter)。最后的设置如下所示:

 

 

好,让我们来看看为什么要这么设置呢?大家可从下面几张图中看出效果:

(point模式)

(Bilinear模式)

 

为什么会这样呢?总之请大伙们记住的就是,如果做像素游戏那么就选择Point模式就对了。而Bilinear模式会对纹理进行插值计算,会先找出最接近像素的四个图素进行插值运算,这会使得纹理更为平滑;而Point模式只是对纹理进行简单的插值,会使用包含像素最多的部分的图素来贴图,容易出现所谓的“马赛克”想象。而“马赛克”想象正是我们想要的效果。

 

接下来拖拽该图片到上一篇创建好的Chunk物体上,这时你会看到工程目录中多出了一个Metarials文件夹,这是由Unity根据拖拽的纹理自动生成的,这边省去了手动创建纹理的时间。

 

接下来打开我们的Block脚本,我们需要使用一个结构体去保存纹理信息,以便对纹理坐标进行修改:

 

 

        接下来我们创建一个函数,该函数用于根据指定方面的面对纹理进行修改,简单的说就是给指定方向上的面贴指定的纹理:

 

 

        该函数很简单,就是返回一个修改好的Tile类型的结构体,也就是纹理上的坐标位置。

 

        接下来我们需要一个float类型的产量,用于表示纹理位置的比例:

 

        为什么会是0.25f呢,下图有解释:

        如果还不理解,没关系,我们继续往下走。

 

        下面的函数用于生成对应方向面的UV位置:

 

 

        好,暂时不解释,接下来再在faceData*(*代表各个方向上的函数)函数中添加如下代码:

        

        

        最后在Chunk.cs脚本的RenderMesh函数中添加两行代码来渲染我们的UV贴图即可:

 

        先不做解释,先测试一番看看效果:

 

        一个石块便完美的展示出来了。

 

        好,接下来让我们来分析分析该石块制作的过程:

 

        首先,用于生成UV位置的主要函数是如下函数:

 

 

        然后该函数调用了TexturePosition函数来生成UV的 x 和 y 的位置:

 

 

        在该函数中将 x 和 y 都设置为0。然后让我们回到FaceUVs函数中来,计算计算最终生成UV的位置:

        

 

        对应我们纹理中的位置如下图所示:

        由于我们在各个方向的面都使用了同一个纹理坐标,因此该方块的每个都面都是上图中的纹理,接下来让我们生成文章前头看到的那个草块。

 

        让我们新建一个C#脚本,命名为“BlockGrass.cs”,双击打开脚本,为其添加如下代码:

 

 

        其实这个脚本很简单,我们只是在TexturePosition函数中对某个方面上的面做了些特殊操作,仅此而已。

 

        然后在初始化创建方块的地方为其添加如下代码:

 

 

        这时候Play游戏,你将会看到如下图所示效果:

 

 

至于为什么会生成,前面已经有做过解释,这里就不再赘述。

 

好吧,今早就到这吧。下一章给大家讲一下网格碰撞的实现。

 

关于Unity墙外的世界

Unity墙外的世界 --- 这里有国外的经典案例、教程、文章,在这里你将会学到更为先进的Unity开发知识。

更新文章请进入《Unity墙外的世界》公众号中查看

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值