unity 怎么为组件设置材质?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了unity 怎么为组件设置材质?相关的知识,希望对你有一定的参考价值。

如图我想为Tank_Row1下的Tank(*)(*为任意整数整数)下的槽体下的药水组件,赋予一个材质,在Camera组件下赋予,我该如何写脚本呢?

参考技术A 关键词

MeshRenderer m_meshrender = 通过任意方法找到药水的物体.GetComponent<MeshRenderer> ();
m_meshrender.material=你的材质 ;追问

那个“你的材质”,我赋值内容是什么?字符串?包括路径吗?

追答

如果你的材质不在场景中,需要临时加载,那么需要使用resource.load等方式从resource文件夹下加载;
推荐事先就将需要的材质放到场景中,例如
public Material m_material;
将材质拖入
m_meshrender.material=m_material;

参考技术B 这个你可以到paws3d上看看他们在实际开发中是怎么做的

Unity -- 材质-Material和预设体-Prefabs

材质(Materials)用来把网格(Mesh)或粒子渲染器(Particle Renderers)贴到游戏对象上。他们在定义对象怎么被显示发挥重要组成部分。材质包括用于呈现网状或颗粒着色器的参考,所以这些组件不能在没有材质的情况下显示。
Material这个需要结合Shader来讲,计算机图形学里本身就没有Material这个东西,引擎加入这个其实是在shader和主程序之间搭建了一座桥梁,可以说Material是一个着色器管理器,所以很多接口都是对shader的控制。这里我们先讲Material,后续章节会讲到Shader。
Unity中材质和预设物是我们常用的两种资源,可以在Project视图中直接创建,非常好用,能够简化我们开发项目的过程。下面就对它们进行详细介绍。

一、材质-Material

Unity中给我们提供的材质有三种:Material(普通材质)、Physic Material(物理材质)、Physics2D Material(2D的物理材质)。这里主要讲前面两种。

1、Material

我们首先创建一个材质,步骤如图1.1:

技术分享
图1.1


图1.2就是我们创建的新材质的Inspector视图:

技术分享
图1.2


任何材质的属性取决于选定的着色器(Shader)发生变化。这是最常用的三种属性:Shader(着色器)-将被材质(Material)使用的着色器。Main Color(主颜色)-任何一种色调都可使用,不填色就使用白色。Base(基本)- 将被显示的纹理。
材质是用来放置纹理(Textures)到你的游戏对象。您不能在没有材质的情况下直接增加纹理,这样做会隐式地创建一个新的材质。正确的工作流程是创建一个材质,选择一个着色器,并选择纹理资源(s),以一并显示。
当我们创建好一个材质后,第一件事情就应该决定使用的着色器。我们可以从着色器下拉菜单选择。如图1.3:

技术分享
图1.3


我们可以选择任何在项目资源文件夹存在的着色器或一个内置的着色器。还可以创建你自己的着色器,其实就是选择一个材质类型。使用内置的着色器的详细信息,查看内置着色器指南(Built-in Shader Guide),这里不对着色器进行研究。下面我们就用Standard(标准类型)类型的Shader来进行介绍。图1.1就是Standard类型的Inspector视图。
我们可以在Albedo后面的选项中点击选择材质的颜色,还可以通过属性前面的小圆圈按钮给材质添加纹理。如图1.4:

技术分享
图1.4


图中圆圈标出的地方是材质反射光,用来反射材质的颜色和纹理,如图1.5:

技术分享
图1.5
2、Physic Material

按照图1.1我们创建一个新的Physic Material,如图1.6既是Physic Material的Inspector视图:

技术分享
图1.6


Daynamic Friction:动摩擦系数,是物体运动时的摩擦系数。取值范围为0-1,取值为0将导致物体表面接近冰面的特性,取值为1是,除非有外力或重力作用,物体将处于静止。
Static Friction:静态摩擦系数,是物体静止不动时的摩擦系数。取值0-1。
物理中对摩擦力的定义是:当一个物体在另一个物体的表面上相对运动(或有相对运动的趋势)时,受到的阻碍相对运动(或阻碍相对运动趋势)的力,叫摩擦力,可分为静摩擦力和滑动摩擦力。静摩擦力—— 有相对运动的趋势时发生作用; 滑动摩擦力 ——相对运动是发上作用。静摩擦力<=动摩擦力。所以静态摩擦系数要<=动摩擦系数。
Bounciness:弹力或弹性,取值0-1,0表示不发生弹跳,即物体的动能完全损失;1表示物体发生没有动能损失的反弹,用自由落体来说明的话,如果值为1,则物体会反弹到自由落体开始的地方,而且一直这样弹跳下去。
Friction Combine:摩擦力组合。如图1.7:

技术分享
图1.7


图中Average-使用两个摩擦力的平均值;Minimum-使用两个摩擦力中的最小值;Maximum-使用两个摩擦力中的最大值;Multiply-使用两个摩擦力的乘积。
Bounce Combine:反弹组合,同摩擦力组合的选项类似。如图1.8:

技术分享
图1.8
材质创建好后直接按住鼠标左键拖到Scene视图中的游戏对象上即可,拖到Hierarchy视图中的游戏对象上也行。
二、预设体-Prefabs

Prefabs意为预设体,可以理解为一个游戏对象及其组件的集合,目的是使游戏对象及资源能够被重复利用。预设体作为一个资源,可以应用在整个项目的不同场景中。当拖动预设体到场景中就创建了一个实体。该实体与原始预设体是关联的。对预设体进行更改,实例也将同步修改。这样的操作除了可以提高资源的利用率,还可以提高开发的效率。理论上推荐需要多次使用的对象都制成预设体。下面我们就创建一个新的prefabs.
首先我们创建一个Prefabs文件夹来管理我们创建的prefabs。图1.1中也可以看到prefab选项,单击就可以创建了,结果如图1.9:

技术分享
图1.9


这个空的预设体相当于一个空的容器,等待游戏对象数据来填充,下一步我们就把Hierarchy视图中的Cube游戏对象(需要做成预设体的游戏对象)拖到这个名为prefab-1的空预设体上,此时prefab-1的图标会变化,而且Hierarchy视图中的Cube字体颜色变成了蓝色,如图2.0:

技术分享
图2.0


这时一个完整的预设体就创建完成了,我们可以把预设体拖动放入Scene视图场景中,多拖入几个,如图2.1:

技术分享
图2.1


此时如果我们对预设体prefab-1进行改变,那么Scene场景中的所有预设体的实例游戏对象都会随之改变,如图2.2:

技术分享
图2.2


图中预设体prefab-1改变了颜色,所以Scene场景中的所有预设体的实例都变成了蓝色,同理如果我们改变预设体prefab-1的纹理贴图,那么它的实例也会全部改变,这里不做实验了。
值得说一下的小技巧是:将Hierarchy视图中的游戏对象直接拖动到Project视图中的Prefabs文件夹中也可以快速制成一个预设体,这样就省去了创建一个空预设体的步骤。



作者:S_H_C
链接:http://www.jianshu.com/p/12e0e06e3112
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

以上是关于unity 怎么为组件设置材质?的主要内容,如果未能解决你的问题,请参考以下文章

新人求教:Unity系统默认的材质怎样通过代码

unity5怎么样让材质自发光

unity里怎么用代码更换材质球的颜色,求具体的步骤

unity中GetComponent获取组件中的材质的颜色,用C#写

unity 3d 怎么能同时给数个材质贴上同一张max烘焙的光影贴图

Unity -- 材质-Material和预设体-Prefabs