# Unity3d基础1

# 简介

由Unity Technologies公司开发的用于轻松创建游戏和三维互动内容的开发工具,是一个国际领先的专业游戏引擎,在移动端几乎成为3D游戏开发的标准。它简单易用,开发效率高,价格便宜。

# 游戏引擎

游戏引擎是指一些已编写好的可编辑电脑游戏系统或者一些交互式实时图像应用程序的核心组件。这些系统为游戏设计者提供编写游戏所需的各种工具,其目的在于让游戏开发者可以重用已有的核心技术,将精力集中在游戏逻辑和设计上,能容易和快速地做出游戏程序而不用由零开始。

一个游戏引擎包含渲染引擎、物理引擎、碰撞检测系统、音效、脚本引擎、动画系统、人工智能、寻路、网络引擎、灯光系统、以及场景管理等。它要解决的问题主要有:

  1. 光影效果,场景中的光源对处于其中的人和物的影响。
  2. 动画系统,分为两种:一是骨骼动画系统,另一种是模型动画系统。
  3. 物理碰撞,使物体的运动遵循固定的规律,检测两个3D模型是否碰撞。
  4. 渲染效果,把模型,动画,光影,特效等所有效果实时计算出来展示在屏幕上,它是所有系统中最复杂的,直接决定着最终的输出质量。
  5. 处理外设,处理鼠标,键盘信号。

# Unity3d历史

  • 2004年丹麦哥本哈根三位热爱游戏的年轻人决定开发一个易于使用、与众不同并且费用低廉的游戏引擎,帮助所有喜爱游戏的年轻人实现游戏创作梦想。
  • 2005年发布了Unity1.0版本,并将总部设在美国旧金山。
  • 2007年发布了Unity2.0版本--新增了地形引擎、实时动态阴影、网络多人联机功能等。
  • 2009年发布了Unity2.5版本--推出Windows版本,支持IOS和Wii任天堂游戏机。
  • 2010年发布了Unity3.0版本--支持Android平台。
  • 2012年发布了Unity4.0版本--支持Web及其他游戏机平台。
  • 2012年Unity上海分公司成立,正式进军中国市场。同年苹果公司一份报告,在App Store中55%的3D游戏都是使用Unity开发的,而Android的市场应该比苹果更大。
  • 截止2013年6月,Unity Technologies公司在中国、加拿大、丹麦、英国、日本、韩国、立陶宛、瑞典等国家和地区都建立了相关机构,在全球拥有30个不同国家和地区的 超过290名雇员,全新版本的Unity4.0引擎已经能够支持包括MAC OS X、安卓、IOS、Windows等在内的十个平台发布。
  • 2015年3月发布了Unity 5.0版本—包括了许多新功能及改进,如:实时全局光照、音频、动画系统等。
  • 2016年7月14日,Unity宣布融资1.81亿美元,此轮融资也让Unity公司的估值达到15亿美元左右。
  • 2019年全球最具创新力企业TOP50中,Unity Technologies排名第18。
  • 2020年5月9日,Unity宣布收购加拿大技术服务公司Finger Food,拓展工业应用版图。
  • 2020年6月15日,Unity宣布和腾讯云合作推出Unity游戏云,从在线游戏服务、多人联网服务和开发者服务三个层次打造一站式联网游戏开发。

由Unity3d引擎开发的游戏有:《天涯明月刀》,《原神》,《万国觉醒》,《地下城与勇士》,《明日方舟》,《精灵宝可梦GO》,《王者荣耀》,《炉石传说》,《神庙逃亡》,《崩坏3》,《纪念碑谷》,《战歌竞技场》。

# 基本界面

  • Project面板,存放游戏所有资源,它是项目中的Asset文件夹,存放场景,脚本,模型,音频,图片等资源。
  • Hierarchy层次面板,显示当前场景中所有游戏对象的层级关系,存放游戏对象(GameObject),还有一些资源文件的实例(3D模型和其他预制组件)。
  • Scene场景面板,提供游戏设计的可视化面板,按f可将物体设置为场景视图中心。选择物体按V可拖拽吸附到目标物体的某个顶点上。
  • Game游戏面板,预览游戏运行后的界面。
  • Inspector检视面板,显示当前选定游戏对象附加的组件及其属性信息。

# 坐标系

Unity3d中有三种坐标系:世界坐标系,屏幕坐标系,视口坐标系,GUI坐标系。

# 世界坐标系

Unity3d的方向和坐标系的对应:

Unity3d方向 坐标系
前方(transform.forward) z轴(蓝轴)
右方(transform.right) x轴(红轴)
上方(transform.up) y轴(绿轴)
  • 其中Unity3d中的视口(Scene面板)有两种操作方式:ISO(正交观察)和Persp(透视观察)。
  • 在Unity上方正中,能切换Scene中的坐标系是世界坐标系还是自身坐标系。
  • 操作物体的轴心点有两种方式:
    • Center:模型的几何中心。
    • Pivot:对应3dMax中的轴,可由模型制作者确定。

# 局部坐标系

物体局部坐标系(Local Space)是每个物体独立的坐标系,原点为模型轴心点,随物体移动或旋转而改变。它的作用是表示物体间相对位置与方向。

# 屏幕坐标系

屏幕坐标(Screen Space)是以像素来定义的,它的范围是以左下角为(0,0),右上角为(Screen.width,Screen.height)定义的这样一个矩形。屏幕坐标是一个3D坐标,Z轴是以到相机的世界单位来衡量的。

# 视口坐标系

视口坐标(Viewport Space)是标准化后的屏幕坐标。标准化的概念我们可以引申到向量的标准化中,视口坐标是以0到1间的数字来表示的,它的范围是以左下角为(0,0),右上角为(1,1)定义的这样一个矩形。视口坐标是一个3D坐标,Z轴是以相机的世界单位来衡量的。通过对比可以发现视口坐标和屏幕坐标特别的相似。

# GUI坐标系

GUI坐标是指通过OnGUI方法绘制UI时使用的坐标。这个坐标系和屏幕坐标类似,它同样是以像素来定义的,它的范围是以左上角为(0,0),右下角为(Screen.width,Screen.height)定义的这样一个矩形,GUI坐标是一个2D坐标(绝对坐标)。我们知道使用绝对坐标来进行布局的话是没有办法做自适应的,UI自适应的一个主要观点就是不要使用绝对坐标!

Unity 4.6 以后推出UGUI,在Screen Space模式下,Unity3D的编辑器以屏幕坐标来显示UI元素的位置;在World Space模式下,Unity3D的编辑器以世界坐标来显示UI元素的位置。uGUI的坐标本质上是特殊的屏幕坐标,因为uGUI的Anchor决定了该坐标系的原点,pivot决定了元素本身坐标系的原点,RectTransform组件继承自Transform,所以它们的position和localPosition是等价的,都是世界坐标;anchoredPosition是UI元素的屏幕坐标,在对UI元素进行操作的时候应该考虑使用这个坐标。

# 坐标系转换

  • 世界坐标同屏幕坐标转换:Camera.main.WorldToScreenPoint()和Camera.main.ScreenToWorldPoint()。
  • 世界坐标同视口坐标转换:Camera.main.WorldToViewportPoint()和Camera.main.ViewportToWorldPoint()。
  • 视口坐标同屏幕坐标转换:Camera.main.ViewportToScreenPoint()和Camera.main.ScreenToViewportPoint()。
  • 屏幕坐标转换为GUI坐标:GUIUtility.ScreenToGUIPoint()。
  • 屏幕坐标转换为UGUI坐标:RectTransformUtility.ScreenPointToWorldPointInRectangle转换为世界坐标,再赋值给transform.position。
  • 局部坐标系转换为世界坐标系:
    • transform.TransformPoint:转化点,受变换组件位置、旋转和缩放影响。
    • transform.TransformDirection:转换方向,受变换组件旋转影响。
    • transform.TransformVector:转换向量,受变换组件旋转和缩放影响。
  • 世界坐标系转换为局部坐标系:
    • transform.InverseTransformPoint:转换点,受变换组件位置、旋转和缩放影响。
    • transform.InverseTransformDirection:转换方向,受变换组件旋转影响。
    • transform.InverseTransformVector:转换向量,受变换组件旋转和缩放影响。

# 基本概念

  • 场景(Scene):它是一组相关联的游戏对象的集合,通常游戏中的每个关卡就是一个场景,用于展现当前关卡中的所有物体。
  • 游戏对象(GameObject):它代表出现在场景中的游戏物体,一种可以挂载组件的容器。在Hierarchy面板中,把一个物体拖拽到另一个物体下面,会形成父子关系。
  • 组件(Component):每个组件都是一个类的实例,是游戏对象的功能模块。常见的组件有:
    • Transform组件:决定物体位置,旋转,缩放。
    • MeshFilter(网格过滤器):从资源中获取网格信息。
    • MeshRender(网格渲染器):从网格过滤器中获的几何形状,根据变换组件定义的位置进行渲染。它和MeshFilter一块使用,把模型显示到屏幕上。

# 材质

相关概念有:

  • Material(材质):物体的质地,指色彩、纹理、光滑度、透明度、反射率、折射率、发光度等,实际就是Shader的实例。
  • Shader(着色器):专门用来渲染3D图形的技术,可以使纹理以某种方式展现。实际就是一段嵌入到渲染管线中的程序,可以控制GPU运算图像效果的算法。
  • Texture(纹理):附加到物体表面的贴图。

它们之间的关系是:

MaterialShader

# 物理着色器

物理着色器(Physically Based Shading,PBS)就是遵从物理学的能量守恒定律,可以创建出在不同光照环境下都接近真实的效果,基于物理特性的Shader是Unity 5.x的重大革新之一。

# 材质属性

  1. 渲染模式:

    • Opaque 不透明,默认选项。
    • Transparent 透明,用于半透明和全透明物体,如玻璃。
    • Cutout 镂空,用于完全透明或完全不透明物体,如栅栏。
    • Fade 渐变,用于需要淡入淡出的物体。
  2. MainMaps:

    • Albedo 基础贴图:决定物体表面纹理与颜色。
    • Metallic 金属:使用金属特性模拟外观。
    • Specular 镜面反射:使用镜面特性模拟外观。
    • Smoothness 光滑度:设置物体表面光滑程度。
    • Normal Map 法线贴图:描述物体表面凹凸程度。
    • Emission 自发光:控制物体表面自发光颜色和贴图。
      • None 不影响环境
      • Realtime 实时动态改变
      • Backed 烘焙生效
    • Tiling :沿着不同的轴,纹理平铺个数。
    • Offset 偏移:滑动纹理。

# 摄像机

相机是为玩家捕捉和显示世界的一种游戏对象。一个摄像机常有的组件有:

  • Transform 变换组件
  • Camera 摄像机:显示世界和其他对象
  • Flare Layer:光晕层,光晕指的是在镜头中存在光源时,光源会在镜头中产生一种带有颜色的连续光圈特效,可参考LensFlare镜头光晕 (opens new window)
  • Audio Listener:音频监听器,接收场景输入的音频源Audio Source并通过计算机的扬声器播放声音。

# Camera属性

  • Clear Flags(清除标识):决定屏幕的空白部分如何处理
    • Skybox(天空盒):空白部分显示天空盒图案
    • Solid Color(纯色):空白部分显示背景颜色
    • Depth Only(仅深度):画中画效果时,小画面摄像机选择该项可清除屏幕空部分信息只保留物体颜色信息。
    • Don’t Clear(不清除):不清除任何颜色或深度缓存。
  • Background(背景):所有元素绘制后,没有天空盒的情况下,剩余屏幕的颜色。
  • Culling Mask(选择遮蔽层):选择要照射的层Layer。
  • Projection 投射方式:
    • Perspective 透视:透视图,物体具有近大远小效果。
    • Orthographic 正交: 摄像机会均匀地渲染物体,没有透视感,通常小地图使用。
  • Size 大小(正交模式):摄影机视口的大小
  • Field of view 视野(透视模式):设置相机视野的远近距离
  • Field of view 裁剪面 :相机开始和结束渲染的距离
    • Near 近:绘制的最近点。
    • Far 远:绘制的最远点。
  • Viewport Rect 视口矩形:标明这台相机视图将会在屏幕上绘制的屏幕坐标。
    • X:摄像机视图的开始水平位置。
    • Y:摄像机视图的开始垂直位置。
    • W宽度:摄像机输出在屏幕上的宽度。
    • H高度:摄像机输出在屏幕上的高度。
  • Depth 深度:相机在渲染顺序上的位置,具有较低深度的摄像机将在较高深度的摄像机之前渲染。

# 天空盒(SkyBox)

天空盒是围绕整个场景的包装器,用于模拟天空的材质。它的种类有:6 Sided,Procedure,Cubemap。

# 使用方式

  1. 把摄像机的ClearFlags属性设置为Skybox,然后给摄像机添加Skybox组件。
  2. Window->Rendering->Lighting Settings->Environment设置Skybox。可作为反射源将天空色彩反射到场景中物体。

# Shaders

在Skybox中有6 Sided,Procudural,Panoramic,Cubemap。

  • 6 Sided中常用属性有:
    • Tint Color 色彩
    • Exposure 亮度
    • Rotation 旋转
  • Procudural常用属性有:
    • Sun 太阳模式
      • None 没有
      • Simple 简单
      • Hight Quality 高质量
    • Atmoshpere Thickness 大气层厚度
    • Ground 地面颜色
    • 如果为Environment Lighting的Sun属性设置一个平行光,场景中会根据平行光角度自动创建太阳,并且位置随平行光旋转而改变。如果不设置,系统将默认选择场景中最亮的平行光。

# 渲染管线

渲染管线是图形数据在GPU上经过运算处理,最后输出到屏幕的过程。它的过程详解如下:

renderpipeline

其中游戏调用图形API,这是CPU处理的,这个过程叫Draw Call(绘制调用),就是每次引擎准备数据并通知GPU的过程,通俗的将就是每帧调用显卡渲染物体的次数。

而GPU处理的部分如下:

  • 顶点处理:接收模型顶点数据并进行坐标系转换。
  • 图元装配:组装面,连接相邻顶点,绘制为三角面。
  • 光栅化:计算三角面上的像素,为后面的着色阶段提供合理的插值参数。
  • 像素处理:对每个像素区域进行着色,写到缓存中。
  • 缓存:一个存储像素数据的内存块,最重要的缓存是帧缓存与深度缓存。
    • 帧缓存:存储每个像素的色彩,即渲染后的图像。帧缓存常常在显存中,显卡不断读取并输出到屏幕中。
    • 深度缓存z-buffer:存储像素的深度信息,即物体到摄像机的距离。光栅化时便计算各像素的深度值,如果新的深度值比现有值更近,则像素颜色被写到帧缓存,并替换深度缓存。

# 性能优化

# InstantOC

Instant Occlusion Culling(即时遮挡剔除),当物体被送进渲染流水线之前,将摄像机视角内看不到的物体进行剔除,从而减少了每帧渲染数据量,提高渲染性能。

为什么要用即时遮挡剔除?因为在摄像机的视锥内也有被物体所被遮挡而看不见的物体如果一起渲染出来会浪费大量的性能!游戏引擎是实时运行的,渲染能力和计算能力在单位时间内都是有限的,因此我们就可以用遮挡剔除来优化性能,这在减少GPU的工作量但同时也会增加CPU的工作量,如果在物体少或者没有遮挡的情况下就不要使用遮挡剔除了,因为如果所有物体都需要渲染的话那再使用遮挡剔除无疑是给CPU增加了负担。

# 如何使用

Unity3d中需要借助一些插件,比如InstantOC Dynamic Occlusion Culling + LOD,它的最新一版是3.0.1(2016),不能在高版本中使用,需要使用IOC的需要看看其他插件,但是使用原理是不变的。这里还是以该插件为主:

  1. 创建层
  2. 为将参与遮挡剔除的游戏物体指定层
  3. 物体添加碰撞器Collider组件
  4. 摄像机附加脚本IOCcam

IOCcam常用属性:

  • Layer mask:参与遮挡剔除的游戏对象层。
  • IOC Tag:将为指定标签的游戏对象自动添加IOClod脚本对象。
  • Samples:每帧摄像机发射的射线数目。数量多剔除效果好,但性能开销大。通常在150—500之间。
  • Rays FOV:射线视野,应大于摄像机视野Field of View。
  • View Distance:视图距离,射线长度。将影响摄像机Clipping Planes –Far 数值。
  • Hide Delay:延迟隐藏,当物体被剔除时延迟的帧数,建议50—100之间。
  • PreCull Check:检查采集信息,建议勾选,可以提高剔除效率。
  • Realtime Shadows:实时阴影,如果场景需要实时阴影,建议启用,确保剔除物体显示正常的阴影。

# LOD

Levels of Detail(多细节层次),该技术主要是指根据物体模型的节点在显示环境中所处的位置和重要度,决定物体渲染的资源分配,降低非重要物体的面数和细节度,从而获得高效率的渲染运算。

# 使用步骤

  1. 创建层
  2. 创建空物体并将模型添加到其中模型命名:Lod_0 Lod_1 Lod_2
  3. 为父物体指定层与标签
  4. 父物体或子物体添加碰撞器组件
  5. 摄像机附加脚本IOCcam

常用属性有:

  • Lod 1 distance:摄像机到物体距离小于当前距离时,使用Lod_0模型。
  • Lod 2 distance:摄像机到物体距离大于Lod1且小于当前距离时,使用Lod_1模型,大于当前值使用Lod_2模型。
  • Lod Margin:LOD边缘,如果物体在LOD各阶段过渡时发生闪烁,尝试提高当前值。

# 光照系统

Unity3d中的光照系统:

  • 全局光照(GI)
    • 实时GI
    • 烘焙GI
  • 直接光照
  • 间接光照
    • 环境光照
    • 反射光照

下面出自Unity3D自带功能:灯光及光照烘焙 (opens new window)

现实生活中的光线是有反射、折射、衍射等特性的,对这些基本特性的模拟一直以来都是计算机图形图像学的重要研究方向。最早期的时候,人们利用各种方式来模拟真实光照的效果,比如手动在贴图上画上柔和阴影,或者用一盏微弱的面积光源去照明物体的暗部以模拟漫反射现象等等。然后出现了所谓的高级渲染器,用计算机的计算来代替我们的手工劳动来进行这个“模拟”的工作。在漫长的发展过程中,出现过很多很多计算方案,总体上分为这样几类:

  1. 直接模拟光线从被光源发出到最终被物体完全吸收的正向过程,也就是常说的GI(Global Illumination);
  2. 不直接模拟光线,而是反向搜集物体表面特定点的受光照强度来模拟现实照明效果,也就是常说的FG(Final Gathering);
  3. 完全不考虑光线的行为,单纯基于“物体上与其他物体越接近的区域,受到反射光线的照明越弱”这一现象来模拟模拟现实照明(的一部分)效果,也就是常说的AO(Ambient Occlusion);
  4. 将场景光照结果完全烘焙到模型贴图上,从而完完全全的假冒现实光照效果,也就是我们所说的Lightmap。

不论是GI还是FG,计算量都是非常大的,一帧图片需要几十分钟甚至几十小时来渲染,所以很难被应用在游戏设计领域。因此在游戏设计领域,光照贴图技术依然是目前的主流方式。由于光照贴图需要事先烘焙(baking)出来,且仅支持静态物体(Static Object),而我们的游戏场景中几乎不可能全都是静态物体,所以通常游戏场景中的灯光照明是多种照明方式的混合作用。

  • 对于静态物体来说,大多使用光照贴图来模拟间接光的照明效果,然后加上直接光源的动态照明效果;
  • 对于运动物体来说,则仅用直接光源的动态照明效果,或者使用光照探针来模拟间接光的照明效果。

# 全局光照

全局光照即为Global Illumination,简称GI。能够计算直接光,间接光,环境光以及反射光的光照系统。通过GI算法可以使渲染出来的光照效果更为真实丰富。

# 实时GI

实时指的是运行期间任意修改光源,所有变化可立即更新。

Unity5的操作步骤如下:

  1. 游戏对象设置为 Lightmaping Static。
  2. 启用 Lighting 面板的 Precomputed Realtime GI。
  3. 点击Build按钮。

# 烘焙GI

当场景包含大量物体时,实时光照和阴影对游戏性能有很大影响。使用烘焙技术,可以将光线效果预渲染成贴图再作用到物体上模拟光影,从而提高性能。适用于在性能较低的设备上运行的程序。

Unity5的操作步骤如下:

  1. 游戏对象设置为 Lightmaping Static。
  2. 设置Light组件Baking属性为Baked。Realtime是仅实时光照时起作用,Mixed是烘焙与实时光照都起作用,Baked是仅烘焙时起作用 。
  3. 启用 Lighting 面板的 Baked GI。
  4. 点击Build按钮。

# GeneralGI

常规GI设置,同时适用于实时GI与烘焙GI。

  • Directional Mode 定向模式:
    • Non – Directional 无定向模式,使用1种光照贴图存储 光照信息。
    • Directional 定向模式,使用2种光照贴图存储光照信息, 相比之下效果更好,但空间占用更大。
    • Direction Specular 定向反射模式,使用4种光照贴图存 储光照信息,效果最好,但占用空间最大。
  • 除无定向模式外必须运行在GLES2.0与SM2.0以上的设备。GLES 指OpenGL ES针对移动端,从iPhone5s开始支持;SM 指 Shader Model 针对 PC 端,目前大部分显卡支持。
  • Indirect Intensity 最终间接光照的强度。1为默认强度,小于1则减低强度,大于1则增大强度。
  • Bounce Boost 增强间接光照。
  • Default Parameters:
    • Default 默认
    • Default – HighResolution 高分辨率
    • Default – LowResolution 低分辨率
    • Default – VeryLowResolution 非常低的分辨率

# 直接光照

直接光照是从光源直接发出的光,通过Light组件实现。它有四种类型:

  • Directional Light 平行光:平行发射光线,可以照射场景里所有物体,用于模拟太阳。
  • Point Light 点光源:在灯光位置上向四周发射光线,可以照射其范围内的所有对象,用于模拟灯泡。
  • Spot Light 聚光灯:在灯光位置上向圆锥区域内发射光线,只有在这个区域内的物体才会受到光线照射,用于模拟探照灯。
  • Area Light区域光:由一个面向一个方向发射光线,只照射该区域内物体,仅烘焙时有效,用在光线较为集中的区域。

常用属性有:

  • Range 范围:光从物体的中心发射的范围。仅适用于点光源和聚光灯。
  • Spot Angle 聚光角度:灯光的聚光角度。只适用于聚光灯。
  • Color 颜色:光线的颜色。
  • Intensity 强度:光线的明亮程度。
  • Culling Mask 选择遮蔽层 : 选择要照射的层Layer。
  • Shadow Type 阴影类型: Hard硬阴影(阴影边缘清晰)、Soft软阴影(阴影边缘柔和,有过渡)。不论是硬阴影还是软阴影,本质上都用阴影贴图模拟的阴影效果,不是真实光照自然产生的暗色区域。
    • Strength 硬度:阴影的黑暗程度。
    • Resolution 分辨率: 设置阴影的细节程度。
    • Bias 偏移 :物体与阴影的偏移。

每个物体可通过Mesh Renderer组件来控制阴影,Cast / Receive Shadows 当前物体是否投射/接收阴影:

  • Off 不投射阴影
  • On 投射阴影
  • Two Sided 双面阴影
  • Shadows Only 隐藏物体只投射阴影

还可设置显示阴影的距离,剔除阴影,在Edit->Project Settings->Quality->Shadows Disdance设置。

# 间接光照

物体表面在接受光照后反射出来的光,间接光有几个来源:

  1. 环境光照(Ambient Light)。环境光照(Ambient Lighting)作用于场景内所有物体的光照,决定场景的整体外观和亮度,如果不使用预计算照明,环境照明的光不会被遮挡住,不会有比较真实的效果,如果使用Baked GI或Precomputed Realtime GI(需要将对象标记为static),来自天空的光就会遮挡住一部分,增加场景的真实性。环境光的设置可在Rendering->Lighting settings->Environment Lighting处设置。
  2. 反射光,根据天空盒或立方体贴图计算的作用于所有物体的反射效果,可通过Rendering->Lighting settings->Environment Reflection设置。
  3. 自发光物体,也是通过光照贴图或灯光探针来模拟。

# 光源侦测

由于LightMapping只能作用于static物体,所以导致运动的物体与场景中的光线无法融合在一起,显得非常不真实。而Light Probe组件可以通过Probe收集光影信息,然后对运动物体邻近的几个Probe进行插值运算,最后将光照作用到物体上。

  1. 设置光源Inspector面板中的Mode为Mixed或Bake
  2. 打开Lighting窗口->Scene, 勾选Mixed Lighting与Realtime Lighting中的Global Illumination
  3. 将受影响的物体Inspector中的Contribute Global勾选,然后设定Receive Global Illumination为Light Probes
  4. 在场景中的某个物体上添加Light Probe Group组件,并点击Edit Light Probes,将那些光线拾取器放置在恰当位置
  5. 点击Lighting窗口最下方的 Generate Light 生成光照贴图

# 声音

Unity3d中常用的声音格式有四种:

  • .AIFF 适用于较短的音乐文件可用作游戏打斗音效
  • .WAV 适用于较短的音乐文件可用作游戏打斗音效
  • .MP3 适用于较长的音乐文件可用作游戏背景音乐
  • .OGG 适用于较长的音乐文件可用作游戏背景音乐

音频文件分为两类:原生和压缩,对于短音效使用原生(WAV,AIFF),压缩声音则是通过从编辑器导入时选择compressed选项。

常用的组件有两个:

  • Audio Source(音频源)。
  • Audio Listener(音频监听器):接收场景中音频源Audio Source发出的声音,通过计算机的扬声器播放声音。

Audio Source的常用属性有:

  • Audio Clip 音频剪辑:需要播放的音频资源。
  • Mute 静音:如果启用,播放音频没有声音 。
  • Play On Awake 唤醒播放:勾选后场景启动时自动播放。
  • Loop 循环:循环播放音频。
  • Volume 音量:音量大小
  • Pitch 音调 :通过改变音调值调节音频播放速度。1是正常播放。
  • Stereo Pan:2D声音设置左右声道。
  • Spatial Blend:2D 与 3D声音切换。
  • 3D声音设置:
    • Volume Rolloff 音量衰减方式
    • Min Distance 开始衰减距离
    • Max Distance 结束衰减距离