材质(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. 笔记14 灯光、预设体、3d物体的事件、碰撞体、刚体、炸箱子、触发器、物理材质、射线

    笔记14 灯光.预设体.3d物体的事件.碰撞体.刚体.炸箱子.触发器.物理材质.射线 灯光 基本项 烘焙 灯光的种类 Lighting窗口 预设体 了解预设体 利用代码操作预设体 实例化预设体Inst ...

  2. unity材质球发光_unity自发光材质

    [www.520z-2.com - 话题作文] 篇一:<Unity内置Shader着色器效果整理> Unity内置及常用Shader整理 一.Shader脚本结构: Shader &quo ...

  3. Unity Prefabs 预设体

    prefabs 预设体是一个游戏物体及其组件的集合. Unity prefab系统将游戏物体所有的组件,属性值和子物体作为一个可重复使用的资源,并且允许你新建,配置,存储这样一个游戏物体.预制资产充当 ...

  4. Unity(贴图、材质、预设体)

    我们创建一个地形(Terrain),在Inspector栏下就有个Terrain的组件,其功能是可以编辑地形, 首先橙色箭头所指的按钮,其功能可以设置地形的限高,地形的大小等待. 蓝色箭头所指的按钮, ...

  5. Unity批量预设体替换材质球

    using System.Collections; using System.Collections.Generic; using UnityEditor; using UnityEngine; us ...

  6. unity项目:坦克大战:炮弹预设体

    给炮弹预设体添加刚体和碰撞体组件和一个脚本. 炮弹预设体就是个球,生成点在坦克的炮筒上,在炮筒上创建一个空对象来标记生成位置,坦克的前方是炮弹的飞行方向. using UnityEngine;publ ...

  7. Unity使用c#开发遇上的问题(六)(3dmax围绕指定中心旋转,unity中动态调用预制体并根据模型旋转指定角度)

    文章目录 前言 一.3dmax创建子弹.炮塔及武器库 1.相关模型 2.炮塔模型引入unity,无法绕旋转球旋转,重新调整 1.3dmax中默认炮管的中心点 2.选择层次界面 3.选择编辑工作轴 4. ...

  8. 【Unity3D】材质 Material ( 材质简介 | 创建材质 | 设置材质属性 | 对 3D 物体应用材质 | 资源拖动到 Inspector 检查器中的 Material 属性中 )

    文章目录 一.材质 Material 简介 二.创建材质 三.设置材质属性 四.对 3D 物体应用材质 五.资源拖动到 Inspector 检查器中的 Material 属性中 一.材质 Materi ...

  9. unity创建一个6面体的3D模型,确保它每一个面都是不同的。能旋转每一个面唤醒不同的物品

    文章目录 前言 unity创建一个6面体的3D模型,确保它每一个面都是不同的.能旋转每一个面唤醒不同的物品 一.物体每一面旋转停止呼出不同面板 二.使用步骤 1.控制旋转与唤醒 总结 前言 unity ...

最新文章

  1. python数学库的使用方法_浅谈numpy库的常用基本操作方法
  2. VTK修炼之道80:VTK开发基础_智能指针与引用计数
  3. 【leetcode刷题笔记】Excel Sheet Column Number
  4. 【IPF2020】浪潮集团高级副总裁彭震:智算中心 筑基智慧世界
  5. Spring Boot集成Redis缓存之注解方式
  6. MySQL的四种事务隔离级别实践
  7. c语言warning scanf,【C】将m~n之间的素数输出与VS2005以上版本对C语言的scanf的警告warning C4996...
  8. 你觉得Mate30 5G可以用到四年吗?
  9. oracle和db2之间的基本差别
  10. 微信网页授权 获取 unionId
  11. mysql 批量插入 性能_MySQL批量插入数据性能比较
  12. GNSS 观测 O 文件的解读
  13. java根据cookie统计uv,利用Cookie统计UV流量 | 学步园
  14. matlab ri值,基于Matlab的中国地面气候资料日值数据集(V3.0)快速处理
  15. airbnb北京民宿运营情况分析
  16. windows的cmd与bat批处理脚本(batch script)
  17. mongodb集群修改IP地址
  18. 链路聚合的定义、链路聚合的概念和基本术语、链路聚合的特点
  19. Android图片加载框架最全解析(二),从源码的角度理解Glide的执行流程
  20. linux界面配置网卡命令,linux网卡的详细配置

热门文章

  1. 腾讯云数据库客户数超50万,携手合作伙伴共建数据库生态
  2. 为什么HR 20分钟就淘汰了一个前端高级工程师?
  3. mongoDB 文档概念
  4. TestBird烧烤趴,几维安全专属报名通道
  5. c# 第28节 面向对象概述
  6. 关于SQLServer和MySQL动态条数限制
  7. IntelliJ IDEA中JAVA连接MYSQL
  8. Linux的chattr与lsattr命令详解
  9. Jquery各版本下载
  10. The user specified as a definer ('root'@'%') does not exist