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
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

时间: 2024-08-02 14:56:55

Unity -- 材质-Material和预设体-Prefabs的相关文章

【蓝鸥Unity开发基础三】课时12 预设体

推荐视频讲师博客:http://11165165.blog.51cto.com/ 预设体 预设体能够使游戏对象和资源重复使用 相同的游戏对象可以使用同一个预设体来创建 对预设体进行修改后,所有游戏对象都会相应改变 把预设体作为的一个模板原型,在使用的过程中,我们可以把预设体拖至场景中来创建一个新的游戏对象,能够让我们的游戏对象和资源能重复利用,并且对于预设体进行修改,可以对当前所以的游戏对象发生一样的修改. 接下来我们在Unity中来演示一下 1.预设体的创建--创建一个Cube--创建一个材质

Unity学习笔记13——代码动态加载Prefab预设体

在进行一些功能开发的时候,我们常常将一些能够复用的对象制作成.prefab的预设物体,然后将预设体存放到Resources目录之下,使用时再动态加载到场景中并进行实例化.例如:子弹.特效甚至音频等,都能制作成预设体. 一.预设动态加载到场景: 一个预设体要能够通过代码控制在场景中进行显示,需要三个步骤,这里我们以动态加载怪物血条为例子分析一个常见的误区: 1.预设体资源加载: //加载预设体资源 GameObject hp_bar = (GameObject)Resources.Load("Pr

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

之前一直在想如果要在Unity3d上创建很多个具有相同结构的对象,是如何做的,后来查了相关资料发现预设体可以解决这个问题! 预设体的概念: 组件的集合体 , 预制物体可以实例化成游戏对象. 创建预设体的作用: 可以重复的创建具有相同结构的游戏对象. .1下面来讲解一下如何制作一个简单的预设体(上下为流程和结果图): .2 创建多个prefabs_new(代码,结果图): 1 using UnityEngine; 2 using System.Collections; 3 4 //[Execute

NGUI UIGrid(或UITable)回收利用Item预设体 [未解决]

在我们的项目中,有挺多界面都需要垂直拖拽滚动面板,而面板上面有几十到上百个Item,这个时候肯定Item的动态添加肯定是用预设体来实现! 在编码的时候,尝试写个对预设体Item的回收再用list,但是却行不通(现在暂时是用网上大部分blog所提到的用Destroy(GameObject)来实现动态删除),我的想法是这样的: 1.使用Transform UIGrid.RemoveChild(int index)移除UIGird下的子控件,同时函数会返回被删除控件的Transform,这个时候重置数

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

接物体的工具 using UnityEngine; using System.Collections; public class Tool : MonoBehaviour { float hor; Vector3 moveDir; public float moveSpeed = 3f; int score = 0; void Update() { hor = Input.GetAxis ("Horizontal"); //获取移动方向向量 moveDir = hor * Vector

Perfabs预设体

预设体的设置方法: ①.可以直接在层次视图里面将预设体创建好,然后拖到项目视图,然后将层次视图的游戏对象删除: ②.在脚步中创建,如下面代码:在脚步中可以给定一个预设体,也可以直接通过外联给定:一般都是采用外联的方式来完成预设体的创建: 1 using System.Collections; 2 using System.Collections.Generic; 3 using UnityEngine; 4 5 public class Script:MonoBehaviour{ 6 7 pub

Unity 材质之_stander shader

Unity自带的两个新的Shader, 分别是Standard以及Standard(Specular setup) 如果你没有为你的材质选择这两个Shader之一, 那么你的材质是不会有PBS效果的, 对比一下PBS. 第一幅图是使用了Unity4中的Bumped Specular, 第二幅图使用了Standard(Specular Setup), 值得一提的是为了展现最纯粹的光照效果我特意关掉了PBS的另一大特性, Reflection. 而如果开启了Reflection, 上面的截图差距应该

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

猴子原创,欢迎转载.转载请注明: 转载自Cocos2Der-CSDN,谢谢! 原文地址: http://blog.csdn.net/cocos2der/article/details/46854411 项目中,有时候导入一些资源时候,需要对应创建材质球,如果每次自己动手创建,还是挺麻烦的,下面是如何导入资源时候自动创建材质球. using UnityEngine; using System.Collections; using System.Collections.Generic; using

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

概念 静态碰撞体(Static Collider):物体勾选为静态Static,有Collider组件,无Rigidbody组件. 静态碰撞体的陷阱 Unity在游戏初始化时,会把所有的静态碰撞体合并为一个很大的Collider,Unity会认为这些物体在游戏中是不能移动的.但是若在游戏中不小心移动了这些静态碰撞体的位置(它们是可以被移动的),那么会导致一个严重的性能问题,所有那些与被移动的静态碰撞体合并到一起的其他静态碰撞体重新被计算. 所以在游戏中不要对静态碰撞体进行移动.禁用disable