材质(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 -- 材质-Material和预设体-Prefabs的更多相关文章

  1. Unity3d学习 预设体(prefab)的一些理解

    之前一直在想如果要在Unity3d上创建很多个具有相同结构的对象,是如何做的,后来查了相关资料发现预设体可以解决这个问题! 预设体的概念: 组件的集合体 , 预制物体可以实例化成游戏对象. 创建预设体 ...

  2. Demon_接金币(三个掉落物品预设体,一接物体的工具)

    接物体的工具 using UnityEngine; using System.Collections; public class Tool : MonoBehaviour { float hor; V ...

  3. 在Unity中使用带碰撞体的TiledMap

    虽然最近Unity2018版本推出了自己的瓦片地图,但是这个瓦片地图有点BUG,在场景内把瓦片地图铺好做成预制体,动态生成的时候居然丢失了碰撞体,于是我决定还是使用Tiled软件绘制地图并使用Tile ...

  4. 自己主动生成材质Material(Unity3D开发之十九)

    猴子原创,欢迎转载.转载请注明: 转载自Cocos2Der-CSDN,谢谢! 原文地址: http://blog.csdn.net/cocos2der/article/details/46854411 ...

  5. 自动生成材质Material(Unity3D开发之十九)

    猴子原创,欢迎转载.转载请注明: 转载自Cocos2Der-CSDN,谢谢! 原文地址: http://blog.csdn.net/cocos2der/article/details/46854411 ...

  6. 【Unity笔记】静态碰撞体的陷阱

    概念 静态碰撞体(Static Collider):物体勾选为静态Static,有Collider组件,无Rigidbody组件. 静态碰撞体的陷阱 Unity在游戏初始化时,会把所有的静态碰撞体合并 ...

  7. unity材质球贴图滚动

       using System.Collections; using System.Collections.Generic; using UnityEngine; public class NewBe ...

  8. unity, access material

    MeshRenderer meshRenderer=gameObject.GetComponent<MeshRenderer>();                if(meshRende ...

  9. 材质(Material)和几何体(Geometry)

    1.    材质 一个材质结合一个几何体可以组成一个mesh对象.材质就像物体的皮肤,决定了几何体的外表.例如:皮肤定义了一个几何体看起来是否像金属.透明与否,或者显示为线框. 基本的材质如下: 1. ...

随机推荐

  1. selenium随笔

    1.点击一个连接通常录制一个click命令,通常需要改变它到clickAndWait命令,确保案例暂停,新的页面完全被转载进来. 2.测试案例需要检查Web页的属性,需要assert和verify命令 ...

  2. win 8系统下如何安装搭建python

    python的环境搭建除了python本身,还有Aptana和pip的安装.Aptana提供了更好的集成开发环境,pip主要用于安装第三方的包. 具体安装流程可参考以下两篇文章: InSky关于安装p ...

  3. php+mysqli预处理技术实现添加、修改及删除多条数据的方法

    本文实例讲述了php+mysqli预处理技术实现添加.修改及删除多条数据的方法.分享给大家供大家参考.具体分析如下: 首先来说说为什么要有预处理(预编译)技术?举个例子:假设要向数据库添加100个用户 ...

  4. [Android]APK一键反编译

    每次反编译就是件很烦的事情,烦了就开始偷懒.直接写成脚本节省操作. 使用apktool,d2j-dex2jar进行反编译 脚本:reseve-complie-apk.py import os impo ...

  5. Kafka 1.0版本发布

    Kafka 1.0版本发布 1.0.0 2017年11月1日发布 源码下载: kafka-1.0.0-src.tgz(asc,sha512) 二进制下载: Scala 2.11 - kafka_2.1 ...

  6. 洛谷P3245 [HNOI2016]大数 【莫队】

    题目 题解 除了\(5\)和\(2\) 后缀数字对\(P\)取模意义下,两个位置相减如果为\(0\),那么对应子串即为\(P\)的倍数 只用对区间种相同数个数\(x\)贡献\({x \choose 2 ...

  7. HTTP协议详解之消息报头

    原文地址:http://www.cnblogs.com/devinzhang/archive/2012/02/06/2340186.html HTTP消息由客户端到服务器的请求和服务器到客户端的响应组 ...

  8. HDU 4786 最小生成树变形 kruscal(13成都区域赛F)

    Fibonacci Tree Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  9. [ARC082F] Sandglass(线段树)

    Description 有一个沙漏由两个上下相通玻璃球 \(A\) 和 \(B\) 构成,这两个玻璃球都含有一定量的沙子,我们暂且假定 \(AB\) 中位于上方的玻璃球的为 \(U\),下方的玻璃球为 ...

  10. 洛谷 [P2341] 受欢迎的牛

    强连通分量 一个结论: 在有向图中, 一个联通块能被所有点遍历当且仅当图中只有一个连通块出度为零 #include <iostream> #include <cstdio> # ...