(四)Unity纹理、贴图和材质

(四)Unity纹理、贴图和材质,第1张

在Unity中,我们可以这样理解:Material(材质)包含Map(贴图),Map包含Texture(纹理)。

首先在工程中创建一个Terrain(地形)和一个Cube(立方体),然后我们基于这两个物体来深入学习什么是纹理、贴图和材质。

下面我们添加一个地形纹理和一个LOL泳池派对纹理。(其实就是图片)

我们来学习一下纹理的Inspector视图中都有什么属性功能,以“泳池派对”为例。

效果如下:

详情如下:

Texture:纹理

Normal map:法线贴图

(游戏场景中譬如雕刻这种3D细节,如果做3D模型的话,就会浪费显示芯片,使游戏性能下降,便会用法线贴图,既不影响玩家体验游戏又不影响游戏性能)

Editor GUI and Legacy GUI:编辑器的GUI和传统的GUI

Sprite(2D and UI):图片精灵

Cursor:设为光标

Cubemap:立方体贴图

Cookie:聚光灯贴图

Lightmap:光照贴图

Advanced:高级选项(当你想要有纹理的具体参数并想拥有纹理的完全控制的时候选择该项)

UV坐标:水平方向是U,竖直方向是V。因为图片(纹理)是一个二维的平面,所以只需要UV坐标便可以确定图片的位置。(当然也有三维贴图,要用到UVW坐标,暂时还接触不到。)

贴图:一种就是就是把纹理通过UV坐标映射到3D物体的表面,另一种就是把纹理加入一些功能,这两种都是贴图。贴图具有 UV 坐标属性或者一些功能,而纹理没有。

我们把Terrain加上纹理,此时这个名为“地形”的纹理就成为了Terrain的贴图。

Shader负责将输入的Mesh(网格)以指定的方式和输入的贴图或者颜色等组合作用,然后输出。绘图单元可以依据这个输出来将图像绘制到屏幕上。

将输入的贴图或者颜色,加上对应的Shader,以及对Shader的特定的参数设置,将这些打包在一起就是一个材质了。之后,我们便可以将材质赋予合适的renderer(渲染器)来进行渲染。

点击Create,添加一个材质和一个物理材质。

选色:

上色:

Dynamic Friction:动摩擦系数

Static Firction:静摩擦系数

Bounciness:d性系数

Friction Combine:联动摩擦

Bounce Combine:联动反d

Average:取平均值。

Minimum:取最低值。

Multiply:取相乘值。

Maximum:取最大值。

第1步打开unity3d场景在里面导入一个相对更复杂的模型。第2步首先我们给这个模型添加Rigdibody刚体组件。第3步接着在Compont给其添加Mesh Collider组件。第4步勾选里面的 Convex,会默认根据自己的模型生成一个碰撞范围,但是不是很精确。第5步如果要更精确的碰撞,我们可以根据模型对应的部分,创建多个碰撞网格模型。第6步然后我们展开模型,把里面的网格ear1拖放到Mesh中,然后勾选Convex就可以在对应的位置建立碰撞范围,比如这里的右边的耳朵。第7步接着我们可以再次添加一个Mesh Collider把模型的另一个耳朵ear也添加上碰撞范围ear2。第8步同样的方式我们可以把模型需要添加碰撞的地方都添加上去,然后运行就可以得到更真实的物理效果了。特别提示作为碰撞使用的每个模型网格点面不能超过256个,否则转换的时候会报错。

使用unity3D制作场景的时候,我们需要在里面导入各种模型,其中有些比较复杂的模型我们需要给其添加碰撞效果,这时候我们可以使用对应的网格碰撞组件,然后自己设置相对更精确的网格作为碰撞检测的范围就可以了,下面就给大家带来实际 *** 作,希望能帮助到有需要的人。

工具/软件

电脑型号:联想(Lenovo)天逸510S; 系统版本:Windows7; 软件版本:Unity3D

方法/步骤

第1步

打开unity3d场景在里面导入一个相对更复杂的模型。

第2步

首先我们给这个模型添加Rigdibody刚体组件。

第3步

接着在Compont给其添加Mesh Collider组件。

第4步

勾选里面的 Convex,会默认根据自己的模型生成一个碰撞范围,但是不是很精确。

第5步

如果要更精确的碰撞,我们可以根据模型对应的部分,创建多个碰撞网格模型。

第6步

然后我们展开模型,把里面的网格ear1拖放到Mesh中,然后勾选Convex就可以在对应的位置建立碰撞范围,比如这里的右边的耳朵。

第7步

接着我们可以再次添加一个Mesh Collider把模型的另一个耳朵ear也添加上碰撞范围ear2。

第8步

同样的方式我们可以把模型需要添加碰撞的地方都添加上去,然后运行就可以得到更真实的物理效果了。

特别提示

作为碰撞使用的每个模型网格点面不能超过256个,否则转换的时候会报错

如何让unity中物理效果更加逼真

物理可能不是每个人最喜欢的那个科目,但事实是,物理学在游戏行业的发展中起着非常重要的作用。

想象在这样一个情况下:你终于决定要做一些大事情!一些值得注意的事情!有很多现实物理和图形的大事情!这是一个大游戏,一切都岌岌可危!

设计已经完成了,架构也已经弄好了,看上去一切就绪。但是这时候你开始实现最有技巧的那个部分:”游戏的物理部分”!

一切都开始分崩离析,你遇到了低FPS、奇怪的运动、碰撞/触发方面的问题,CPU使用率很高以及其他各种各样的问题。

错误或不适当的物理表现可以赶走潜在的玩家。而且它涉及的不仅仅是物理表现的不正确,它还会让一个原本流畅的游戏体验变得延迟不舒服。

让物理部分表现的很恰当而且不影响效率是不容易达到的。的确,物理是游戏开发过程中最困难和最重要的一部分,而且你根本避不开,必须面对它!

人们可以争论说,“好的物理表现需要非常快的CPU!”

但是相信我这并不总是真的!大多数时候可以通过深入分析Unity的原理来获得适当的物理表现!以及通过学习它是如何工作的来让物理部分表现的更好。

当我还是一个初学者的时候,我不得不处理100件和物理部分有关的事情。它大概花费了我一年的时间,我才记下在处理物理部分的时候需要记住的要点!

所以我决定写这篇文章,来帮你跳过这个痛苦的学习阶段,并成为游戏物理部分的专业开发人员!

我不会谈论如何使用Unity的物理部分,而我将列出技巧和要点来告诉你该如何优化你的游戏物理部分,所以如果你是一个初学者的话,我会建议你首先对Unity的物理部分有一个大概的了解。

因为物理是一个非常、非常、非常、非常(还可以有很多非常进行修饰:P)巨大而广泛的概念,我决定分成几个不同的部分和并尽可能的简化。

所以让我们开始吧!系好你的安全带,这将是一个漫长而愉快的旅程。

降低固定的更新时间间隔。。。!

Unity的文档是这么描述的,”物理部分的计算与更新是与帧速率无关的,FixedUpdate()时间也是与与帧速率无关的”。这个默认值是0.02(单位是秒),这意味着每20毫秒物理部分将要更新一次。所有的FixedUpdate() 函数也是20毫秒执行一次。

但是如果你的游戏不是严重依赖物理部分的话,你总是可以增加时间间隔,从而获得更好的结果。(即减少物理部分的调用)。

你需要对这个值进行测试调整来得到理想的效果。

让我们举个简单的例子:

“如果你要做一个简单的纸牌游戏,没有太多使用物理的地方。最好是减少调用物理引擎的次数。但是需要记住这么一个事情:如果你把调用物理引擎的次数减少的太多的话,你可能不会得到恰当的物理表现。”

让我们通过下面这些例子来更好的理解这个事情

1在场景中摆放3- 4球。让他们彼此相隔一定距离。

2创建一个物理材料,并将摩擦系数减少为0,并将反d系数设为1。

3将新创建的物理材质附加到球体的碰撞体物理材质上。

4给球体添加刚体组件(这将向引擎表明它是一个物理物体)。

5在场景中摆放一个平面,并且按需要来给这个平面添加物理材质。

6让球体保持在平面上的一定距离,并且让重力影响这些球体。

7按下播放键,检查结果。

这些球体会不停的d上d下。

这与固定时间步长有什么关系?

上面这些只是一些预设置,现在我们来调整下固定的时间步长值。

在菜单栏里面找到Edit >>Project Settings>>Time ,在这里你将看到Fixed Time Step Value:the value will be around 0.02(正如我之前提到的那样)。

现在把这个值提为0.1,然后再执行游戏。

你注意到区别是什么了么?

首先你会注意到球体有一些运动滞后。

其次,球体不会反d了,而是直接穿过了平面。

为什么会这样?(不需要跳动的如此之快:P)

如果你把固定时间步长设置为0.1,那么这意味着物理部分的更新将每100毫秒发生一次,这很明显的有点过长了,并且将无法将测到碰撞。

这表明过多的降低固定时间步长也不是个很理想的情况。现在让我们改变时间步长为更实用的值0.03 - 0.04(根据你的球体的设置可能会有所不同)。

现在如果你执行游戏的话,你将无法看到任何变化。只要物理看起来适合你,那就没关系。如果你仔细检查的话,物理碰撞会略有不同。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11772340.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存