Unity入门——核心系统

Unity入门——核心系统
Aholic~茜光源组件
面板控制
Type
光源类型
- Spot(聚光灯)
- Range(发光范围)
- Spot Angle(光锥角度)
- Direction(方向光)
- Point(点光源)
- Area(面光源)
Color
颜色
Mode
光源模式
- Realtime
- 实时光源
- 每帧实时计算,效果好,但是性能消耗大
- Baked
- 烘焙光源
- 事先计算好,无法动态变化
- Mixed
- 混合光源
- 预先计算+实时运算
Intensity
光源亮度
Indirect Multiplier
改变间接光的强度
低于1,每次反弹会使光更暗
大于1,每次反弹会使光更亮
Shadow Type
- NoShadows——关闭阴影
- HardShadows——生硬阴影
- SoftShadows——柔和阴影
RealtimeShadows
Strength——阴影暗度0~1,越大越黑
Resolution——阴影贴图渲染分辨率,越高越逼真,消耗越高
Bias——阴影推离光源距离
Normal Bias——阴影投射面沿法线收缩距离
Near Panel——渲染阴影的近裁剪面
Cookie
投影遮罩
Cookie Size
Draw Halo
球形光环开关
Flare
耀斑
Render Mode
渲染优先级
Auto——运行时确定
Important——以像素质量为单位来进行渲染,消耗大
Not Important——以快速模式进行渲染
Culling Mask
剔除遮罩层,决定哪些层的对象受到光源影响
代码相关
面板上能看到的东西都可以通过代码来进行调节。
光面板相关
环境相关
Skybox Material(天空盒材质)
可以修改天空盒
Sun Source(太阳来源)
不设置会默认使用场景中最亮的方向光代表太阳
Environment Lighting(环境光设置)
Source——环境光光源颜色
- Skybox——天空和材质作为环境光颜色
- Gradient——可以为天空、地平线、地面单独选择颜色和他们之间混合
Intensity Multiplier——环境光亮度
Ambient Mode——全局光照模式(只有启用了实时全局和全局烘焙时才会有用)
- Realtime(已弃用)
- Baked
其他设置
Fog(雾)
Color(雾颜色)
Mode(雾计算模式)
- Linear——随距离线性增加
- Start——离摄像机多远开始有雾
- End——离摄像机多远完全遮挡
- Exponential——随距离指数增加——Density——强度
- Exponential Qquare——随距离比指数更快的增加——Density——强度
Halo Texture
光源周围挥着光环纹理
Halo Strength
光环可见性
Flare Fade Speed
耀斑淡出时间(最初出现之后淡出的时间)
Flare Strength
耀斑强度
Spot Cookie
聚光灯剪影纹理
碰撞检测
刚体
碰撞产生的必要条件,两个物体都有碰撞器,至少一个物体有刚体。
RigidBody组件信息
Mass
质量——默认为千克
质量越大惯性越大
Drag
空气阻力——依据力移动对象时的影响对象的空气阻力大小
0表示没有空气阻力
Angular Drag
依据扭矩旋转对象时影响对象的空气阻力大小。0表示没有空气阻力
Use Gravity
是否受到重力影响
Is Kinematic
如果启动了此选项,物体将不会被物理引擎驱动,只能通过(Transform)对其进行操作。对于移动平台,或者如果要动画化附加HingeJoint的刚体,此属性非常有用
Interpolate
插值运算——让刚体物体移动更平滑
None——不应用
Internpolate——根据前一帧的变换来平滑变换
Extrapolate——差值运算,根据下一帧的估计变换来平滑变换
Collison Detection
碰撞检测模式,用于防止快速移动的对象穿过其他对象而不检测碰撞
Discrete——离散检测
对场景中的所有其他碰撞体使用离散碰撞检测。其他碰撞体在测试碰撞时会使用离散碰撞检测
Continuous——连续检测
Continuous Dynamic——连续动态检测(性能消耗高)
Continuous Speculative——连续推测检测
Constraints
约束——对刚体运动的限制
Freeze Position——有规则的停止刚体沿着某个轴的移动
Freeze Rotation——有规则的停止刚体围绕局部轴旋转。
碰撞器
3D碰撞器种类
- 盒状
- 球状
- 胶囊
- 网格
- 轮胎
- 地形
- 共同参数
共同参数
Is Trigger
是否是触发器,如果启用则该碰撞体将用于触发事件,并被物理引擎忽略。
主要用于没有物理效果的碰撞检测
Material
物理材质,可以确定碰撞体和其它对象碰撞时的交互方式
Center
碰撞体在对象局部空间中的中心店位置
常用碰撞器
BoxCollider盒状碰撞器
Size——碰撞体在XYZ方向上的大小
Sphere Collider球状碰撞器
Radius——球状碰撞器的半径大小
Capsule Collider胶囊碰撞器
Radius——胶囊体半径
Height——胶囊体高度
Direction——胶囊体在对象局部空间中的轴向
异性物体使用多种碰撞器组合
刚体对象的子对象碰撞器信息参与碰撞检测
不常用的碰撞器
Mesh Collider网格碰撞器
Convex——该网格碰撞器将与别的网格碰撞器发生碰撞。Convex Mesh Collider最多255个三角形
Cooking Options——影响物理引擎对网格处理方式的网格烹制选项
Mesh——引用需要用于碰撞的网格
Wheel Collider环状碰撞器
不会单独使用,一定是配合汽车来进行使用
必须先给汽车加一个刚体,而且质量必须足够大,不然汽车会直接被弹飞。
Terrain Collider地形碰撞器
Terrain Data——地形数据
Enable Tree Colliders——选中时将启动树碰撞体。
物理材质
创建物理材质
在Project窗口右键创建物理材质
物理材质参数
Dynamic Friction
移动时的摩擦力。通常为0~1之间。0就像是冰块一样,1就会让物体立马停下来
Static Friction
静止摩擦力。通常在0~1之间。0就像是冰块一样,1就会让物体难以移动
Bounciness
表面弹性,一般在0~1之间。0表示不会反弹,1表示反弹时不会造成任何能量损失
Friction Combine
两个碰撞对象的摩擦力组合方式
- Average——使用两个摩擦力的平均值
- Minimum——使用两个值中的最小值
- Maximum——使用两个值中的最大值
- Multiply——两个摩擦值相乘
unce Combine
两个碰撞对象的弹性组合方式。其中的模式与Friction Combine模式相同。
碰撞检测函数
碰撞和触发响应函数都是特殊的生命周期函数,也是通过反射进行调用,触发时间在每一次物理帧更新之后
物理碰撞检测响应函数
1 | //碰撞触发接触时会自动执行这个函数 |
触发器检测响应函数
1 | //第一次接触时,会自动调用 |
什么时候会响应函数
只要挂载的对象能和别的物体产生碰撞或者触发,那么对应的这6个函数就能够被响应。
如果是一个异性物体,刚体在父对象上,如果想通过子对象上挂脚本检测碰撞时不行的,必须挂载到这个刚体父对象上才行
碰撞和触发器都能重写
一般会把想要重写的碰撞触发函数写成保护类型,不会主动调用。
刚体加力
刚体添加力的方法
给刚体加力的目标就是让它有一个速度,朝向某个方向移动
1 | Rigidbody rigid; |
力的几种模式
1 | //加速力模式,给物体一个持续的加速度,忽略其重量 |
力场脚本
Unity自带脚本
刚体休眠
Unity为了节约性能,总是会在运行后的一段时间将刚体休眠,只有一些特殊操作才能再次唤醒刚体
1 | if(rigid.IsSleeping) |
音效系统
音频文件录入
常用格式
- wav
- mp3
- ogg
- aiff
属性设置
Force To Mono
多声道转单声道
Normalize:强制为单声道时,混合过程中被标准化
Load In Background
在后台加载,不阻塞主线程
Ambisonic
立体混响声,非常适合360视频和XR应用程序
LoadType
加载类型
- Decompress On Load:不压缩形式存在内存,加载快,但是内存占用高,适用于小音效
- Compress in memory:压缩形式存在内存,加载慢,内存小,适用于较大音效文件
- Streaming:以流行式存在,使用时解码。内存占用最小,cpu消耗大,性能换内存
Preload Audio Data
预加载音频,勾选后进入场景就加载,不勾选,第一次使用时才加载
Compression Format
压缩方式
- PCM音频以最高质量存储
- Vorbis相对PCM压缩更小,根据质量决定
- ADPCM包含噪音,会被多次播放的声音,比如碰撞声
Quality
音频质量,确定要应用于压缩剪辑的压缩量,不适用于PCM/ADPCM/HEVAG格式
Sample Rate Setting
PCM和ADPCM压缩格式允许自动优化或手动降低采样率
- Preserve Sample Rate:保持采样率不变
- Optimize Sample:根据分析的最高频率内容自动优化采样率
- Override Sample Rate:允许手动覆盖采样率,可以有效地将其用于丢弃频率内容
音频源和音频监听
AudioSource
AudioClip
声音剪辑文件(音频文件)
Output
默认将直接输出到场景中的音频监听器,可以更改为输出到混音器
Mute
静音开关
Bypass Effect
开关滤波器效果
Bypass Listener Effect
快速开关所有监听器
Bypass Reverb Zones
快速开关所有混响区
Play On Awake
对象创建时就播放音乐
Loop
循环播放
Priority
优先级
Volume
音量大小
Pitch
音高
Stereo Pan
2D声音立体声位置,相当于左右声道
Spatial Blend
音频受3D空间的影响程度
Reverb Zone Mix
到混响区的输出信号量
3D Sound Settings
和Spatial Blend参数成正比应用
Doppler Level——多普勒效果等级
Spread——扩散角度设置为3D立体声还是多声道
Volume Rolloff——声音衰减速度
Min/Max Distance——最小距离内,声音保持最大响度 / 最大距离外,声音开始减弱
音频监听脚本
Audio Listener 为一个挂载到对象上的一个脚本,主要是用来挂载音频的一个音频监听器。
代码控制音频源
1 | AudioSource audioSource; |
- Unity没有提供音效播放完成的回调事件
- 必须通过Update持续检测状态
- 适用于需要精确控制音效结束时间的场景
- Unity没有提供音效播放完成的回调事件
如何动态控制音效播放
- 方式一:直接挂载控制
- 脚本和AudioSource挂载在同一GameObject上
- 适合长期存在的背景音乐控制
- 方式二:实例化预制体
- 创建带有AudioSource的预制体
- 需要时实例化:Instantiate(soundPrefab)
- 适合一次性音效,但需要管理对象销毁
- 方式三:单一AudioSource控制多音效
- 使用PlayOneShot()方法 [[PlayOneShot]]
- 可动态切换不同的AudioClip
- 资源利用率高,适合频繁播放的音效
麦克风输入
1 | //获取麦克风信息 |