unity3d介绍
简介
unity3d
是由unity technologies公司开发的用于轻松创建游戏和三维互动内容的开发工具,是一个国际领先的专业游戏引擎
游戏
- 在移动平台,unity几乎成为3d游戏开发的标准工具,使用它开发的游戏数不胜数
- 2d游戏:视角完全锁定,二维坐标
- 3d游戏:可以任意变化视角,无锁定,三维坐标
虚拟现实
- virtual reality:是世界前沿科技之一,利用电脑模拟产生一个三维空间的虚拟世界,并提供视觉、听觉、触觉等感官的模拟。使用者通过各种输入设备与虚拟环境中的事务进行交互,从而产生身临其境的体验
- augmented reality:增强现实,通过电脑技术,将虚拟的信息应用到真实世界,真实环境和虚拟的物体实时地叠加到了同一个画面或空间
游戏引擎
- 什么是游戏引擎:是程序的框架,是一款游戏最核心的代码
- 包含的系统:渲染引擎、物理引擎、碰撞检测系统、音效、脚本引擎、动画系统、人工智能、 络引擎、场景管理
- 使用游戏引擎,开发者可以重用已有的核心技术,将精力集中在游戏逻辑和设计上,从而简单快速的创建游戏
unity特点
- 简单易用
- 开发效率高
- 价格偏移
- 新手居多
- 跨平台
游戏公司大致分工
- 策划
- 美工
- 软件工程师
- 测试工程师
工具介绍
面板
project项目资源面板
- 存放游戏的所有资源
- 与项目中资源文件夹Assets对应,例如场景、脚本、模型、音频、图片等
hierarchy层次面板
- 显示当前场景中所有游戏对象的层次关系
- 包含了当前场景的游戏对象(GameObject),其中一些是资源文件的实例,如3D模型和其它预制组件的实例
scene面板
提供设计游戏界面的可视化面板
常用快捷键
- 按下鼠标左键:选择,移动
- 按下鼠标右键:旋转
- 按下鼠标中键:移动scene观察位置
- 鼠标滚轮滚动:缩放scene
- 鼠标右键+wasd:场景漫游
- 手型工具选中对象+F,或者hierarchy中双击对象:将对象设置为scene视图中心
- alt+鼠标左键:旋转
- alt+鼠标右键:缩放
- alt+鼠标中键:移动scene观察位置
game面板
预览游戏运行后的界面
inspector检视面板
- 显示当前选定对象的附加组件及其属性信息
- 为重要游戏物体选择图标
工具
变换工具
- 移动场景Q
- 移动物体W
- 旋转物体E
- 缩放物体R
- 顶点吸附:选择对象后按住V键,再拖拽到目标物体某个顶点上,松开V键
变化切换
- 改变游戏对象的轴心点
- center:设置轴心点在物体中心
- pivot:使用物体本身的轴心
- 改变物体的坐标
- local:自身坐标
- global:世界坐标
播放控件
- 从左到右依次是预览游戏、暂停游戏、逐帧播放
- 在预览游戏中,任何改变都是暂时的,推出后会重置
视图
- ISO:正交观察模式
- persp:透视观察模式
基础概念
坐标
- 坐标:x红色、y绿色、z蓝色
- 本地坐标:物体自身坐标,随旋转而改变
- 世界坐标:整个场景的固定坐标,不随物体旋转而改变
场景
scene
一组相关联的游戏对象的集合,通常游戏中每个关卡就是一个场景,用于展现当前关卡中的所有物体
物体(游戏对象)
GameObejct
- 运行时出现在场景中的游戏物体
- 是一种容器,可以挂载组件
- 在hierarchy面板中,将一个物体拖进另一个物体中,子物体将继承父物体的移动、旋转和缩放属性,但子物体不影响父物体
组件
component
- 是游戏对象的功能模块
- 每个组件都是一个类的实例
- transform变换组件:决定物体的位置、旋转、缩放
- mesh filter 格过滤器:用于从资源中获取 格信息
- mesh renderer 格渲染器:从 格过滤器中获得几何形状,再根据变化组件定义的位置进行渲染
- 格过滤器与 格渲染器联合使用,使模型显示到屏幕上
材质
- 材质:物质的质地,指色彩、纹理、光滑度、透明度、反射率、折射率、发光度等,实际上就是shader的实例
- shader着色器:专门用来渲染3D图形的技术,可以使纹理以某种方式展现,实际就是一段嵌入到渲染管线中的程序,可以控制GPU运算图像效果的算法
- texture纹理:附加到物理表面的贴图
纹理、着色器与材质的关系

物理着色器
基于物理特性的shader是unity 5.x的重大革新之一,所谓物理着色器(physically based shading PBS)就是遵从物理学的能量守恒定律,可以创建出在不同光照环境下都接近真实的效果
摄像机
- 附加了摄像机camera组件的游戏对象
- 向玩家捕获和显示世界的设备
- 场景中摄像机的数量不受限制
摄像机的组件
- transform:变换组件
- camera摄像机:向玩家捕获和显示世界
- flare layer耀斑层:激活可显示光源耀斑
- GUI layer:激活可渲染二维GUI元素
- Audio Listener音频监听器:接收场景输入的音频源Audio Source并通过计算机的扬声器播放声音
摄像机的属性
- clear flag清除标识:决定屏幕的空白部分如何处理
- skybox天空盒:空白部分显示天空盒图案
- solid color纯色:空白部分显示背景颜色
- depth only仅深度:画中画效果时,小画面摄像机选择该项可清除屏幕空部分信息只保留物体颜色信息
- don‘t clear不清除: 不清除任何颜色或深度缓存
- background背景:所有元素绘制后,没有天空盒的情况下,剩余屏幕的颜色
- culling mask 选择遮蔽层:勾选的层为要渲染的,不渲染的层则不会显示
- projection投射方式
- perspective透视:filed of view 摄像机视距
- orthographic正交:size 摄像机视距
- clipping planes剪裁面:near之内的不渲染,far之外的不渲染
- viewport rect 视口矩形:该相机在屏幕上绘制的坐标和大小
- depth深度:相机在渲染顺序上的位置,越大越靠前
天空盒
- 围绕整个场景的包装器,用于模拟天空的材质
使用天空盒
- 设置摄像机clear flag属性为skybox
- 方式一:摄像机添加组件skybox
- 方式二:光照窗口,window-rendering-lighting-environment
- skybox可以作为反射源将天空色彩反射到场景中的物体
小技巧
ctrl+shift+f,让选中对象移动到当前位置
渲染管线
- 图形数据在GPU经过运算处理,最后输出到屏幕的过程
-
- 游戏
- 图形API
- CPU与GPU分界线
- 顶点处理
- 图元装配
- 光栅化
- 像素处理
- 缓存
-
- 绘制调用draw call:每次引擎准备数据并通知GPU的过程,通俗讲,每帧调用显卡渲染物体的次数
顶点处理
- 接收模型顶点数据
- 坐标系转换
图元装配
组装面:连接相邻的顶点,绘制为三角面
光栅化
计算三角面上的像素,并为后面着色阶段提供合理的插值参数
像素处理
- 对每个像素区域进行着色
- 写入到缓存中
缓存
- 一个存储像素数据的内存块,最重要的缓存是帧缓存与深度缓存
- 帧缓存:存储每个像素的色彩,即渲染后的图像,帧缓存常常在显存中,显卡不断读取并输出到屏幕中
- 深度缓存z-buffer:存储像素的深度信息,即物体到摄像机的距离,光栅化时便计算各像素的深度值,如果新的深度值比现有值更近,则像素颜色被写到帧缓存,并替换深度缓存
遮挡剔除
occlusion culling
- 即时遮挡剔除:instant occlusion culling
- 这趟剔除:当物体被送到渲染流水线之前,将摄像机视角内看不到的物体进行剔除,从而减少了每帧渲染数据量,提高渲染性能
步骤
- 为物体创建层和标签,并添加
- 为物体添加碰撞器collider组件
- 摄像机附加IOCcam脚本
属性
-
layer mask:参与遮挡剔除的游戏对象层
-
IOC tag:将为指定标签的游戏对象自动添加IOClod脚本对象
-
Samples:每帧摄像机发射的射线数目,数量多剔除效果好,但是性能开销大,通常在150-500之间
-
Rays FOV:射线视野,应大于摄像机视野Field of view
-
view distance:视图距离,射线长度,与far相同
-
hide delay:延迟隐藏,当物体被剔除时延迟的帧数,建议在50-100之间
-
PreCull check:检查采集信息,建议勾选,可以提高剔除效率
-
realtime shadows:实时阴影,一般不勾选
多层次细节LOD
- Levels of detail:LOD技术指根据物体模型的节点在显示环境中所处的位置和重要度,决定物体渲染的资源分配,降低非重要物体的面数和细节度,从而获得高效率的渲染效率
步骤
- 创建层和标签
- 创建空物体,并添加不同精度的模型
- 为之前的空物体指定层和标签,不应用到子对象
- 父物体或子物体添加碰撞检测组件
- 摄像机附加脚本IOCcam
属性
- Lod1 distance:摄像机到物体距离小于当前距离时,使用Lod_0模型
- Lod2 distance:摄像机到物体距离大于Lod1且小于当前距离时,使用Lod1模型,大于当前值使用Lod2模型
- Lod Margin:LOD边缘,如果物体在LOD各阶段过度时发生闪烁,尝试提高当前值
光照系统
简介
全局光照
Global Illumination
- 简称GI,即全局光照
- 能够计算直接光,间接光,环境光以及反射光的光照系统
- 通过GI算法可以使渲染出来的光照效果更为丰富真实
直接光照
- 从光源直接发出的光,通过light组件实现
- type类型:灯光对象的当前类型
- directional light 平行光:平行发射光线,可以照亮场景内所有物体,用于模拟太阳
- point light 点光源:在灯光位置上向四周发射光线,可以照射其范围内的所有对象,用于模拟灯泡
- spot light 聚光灯:在灯光位置上向圆锥区域内发射光线,只有在这个区域内的物体才会收到光线照射,用于模拟探照灯
- area light 区域光:由一个面向一个方向发射光线,只照射该区域内的物体,仅烘焙时有效,用在光线较为集中的区域
- range 范围:光从物体的中心发射的范围,仅适用于点光源和聚光灯
- spot angle 聚光角度:灯光的聚光角度,只适用于聚光灯
- color颜色:光线的颜色
- intensity 强度:光线的明亮程度
- culling mask 选择遮蔽层:选择要照射的layer
- shadow type 阴影类型:
- no shadow:没有阴影
- hard 硬阴影:效果较差
- soft 软阴影:效果逼真
- strength 硬度:阴影的黑暗程度
- resolution分辨率:阴影的细节程度
- bias 偏移:物体与阴影的偏移
- 通过 mesh renderer组件启用/禁用阴影
- cast/receive shadows 当前物体是否投射/接收阴影
- off 不投射阴影
- on投射阴影
- two sided 双面阴影
- shadows only 隐藏物体,只投射阴影
- cast/receive shadows 当前物体是否投射/接收阴影
- 阴影剔除:设置显示阴影的距离
- edit->project->settings->quality->shadows distance
环境光照
- 作用于场景内所有物体的光照,通过enviroment lighting中的ambient控制
- ambient source 环境光源
- skybox 通过天空盒颜色设置环境光照
- gradient 梯度颜色
- sky 天空颜色
- equator 地平线颜色
- ground 地面颜色
- ambient color 纯色
- ambient intensity 环境光强度
- ambient GI 环境光GI模式
- realtime 实时更新,环境光源会改变
- backed 烘焙,环境光源不会改变
间接光照
- 物体表面在接受光照后反射出来的光
- 通过light组件中bounce intensity反弹强度控制
- 可以通过scene面板irradiance模式查看间接光照
- 只有标记lightmaping static的物体才能产生间接反弹光照
反射光照
- 根据天空盒或立方体贴图计算作用于所有物体的反射效果,通过environment reflection控制
- reflection source 反射源
- skybox 天空盒
- resolution 分辨率
- compression 是否压缩
- custom 自定义
- cubemap 立方体贴图
- skybox 天空盒
- reflection intensity 反射强度
- reflection bounces 使用reflectionprobe后允许不同游戏对象间来回反弹的次数
实时GI
realtime GI
- 所谓实时,是指在运行期间任意修改光源,所有的变化可以立即更新
- 由于unity5引入了行业领先的实时全局光照技术enlighten系统,才可以在运行时产生间接光照,使场景更加真实丰富
- 操作步骤
- 游戏对象设置为static
- 启用lighting面板的precomputed realtime GI
- 点击build按钮
烘焙GI
lightmap
当场景中包含大量物体时,实时光照和阴影对游戏性能有很大影响,使用烘焙技术,可以将光线效果预渲染成贴图,再作用于物体上模拟光影,从而提高性能,适用于在性能比较低的设备上运行的程序
步骤
- 游戏对象设置为static
- 设置light组件的baking属性
- 启用lighting面板的backed GI
- 点击build
光源侦测
light probes
由于lightMapping只能作用于static物体,所以导致运动的物体与场景中的光线无法融合在一起,显得非常不真实,而light probes组件可以通过probe收集光影信息,然后对运动物体邻近的几个probe进行插值运算,最后将光照作用到物体上
步骤
- 创建游戏对象light probe group
- 添加侦测小球 add probe
- 点击build 按钮
- 勾选需要侦测物体的meshrenderer组件的use light probes属性
声音
简介
unity支持的音频文件格式
- mp3、ogg、wav、aif、mod、it、s3m、xm
- 声音分为2D、3D两类
- 2D声音:适合背景音乐
- 3D声音:有空间感,近大远小
- 在场景中产生声音,主要依靠两个重要组件
- 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:结束衰减距离
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!