决定写这个系列起因于刚才的偶然所见,我发现当前版本的Unity有一个 Utility 标准资源包,里面有一个 FPSCounter 脚本提供了显示游戏运行帧率的基本功能,而我几周前刚刚写过一个同样功能的脚本。“重复造轮子”的挫折感深深刺激了我,鉴于Unity官方并没有对他们的标准资源做多少介绍性的工作,所以我打算对标准资源中几个比较有用的包做一个简单的研究和介绍,避免自己和其他人浪费不必要的时间和精力。
Utility包(Unity5.3.4),顾名思义是工具集。
ActivateTrigger:
多功能脚本,由Trigger模式的Collider触发,有Trigger、Replace、Activate、Enable、Animate、Deactivate五种Action属性设置。当Repeat Trigger选中时,每次OnTriggerEnter时都会触发脚本动作;当Repeat Trigger未选中时,每次OnTriggerEnter时Trigger Count减1,当Trigger Count减至0时触发脚本动作。
Trigger:向Target游戏物体广播“DoActivateTrigger”消息
Replace:使用Source预设的实例替换Target游戏物体
Activate:激活Target游戏物体
Enable:激活Target脚本(不知为何测试未成功)
Animate:播放Target游戏物体上的动画
Deactivate:禁用Target游戏物体
AutoMobileShaderSwitch:
当目标平台为手机平台时,将自身材质上使用的Shader替换为新Shader,可指定多个 Original-Replacement 对。
AutoMoveAndRotate:
用于控制自身gameObject自动位移和旋转。
Value:每秒叠加量
Space:坐标系类型(自身坐标/世界坐标)
Ignore Timescale:是否按真实时间计算
CameraRefocus:
非MonoBehaviour,用于Camera旋转角度的复位。CameraRefocus(Camera camera, Transform parent, Vector3 origCameraPos)方法用于注册摄像机和摄像机父级,GetFocusPoint()方法用于更新摄像机父级的forward方向,SetFocusPoint()方法用于将摄像机旋转至与父级forward方向一致。
CurveControlledBob:
非MonoBehaviour,提供以正弦曲线速率晃动摄像机的基本功能。Setup(Camera camera, float bobBaseInterval)方法用于注册摄像机和晃动频率,DoHeadBob(float speed)方法用于获取当前晃动中摄像机应该处于的localPosition(需手动赋值)。
DragRigidbody:
无公共属性,故不截图。提供鼠标拖拽刚体的基本功能。
DynamicShadowSettings:
动态改变实时阴影的脚本,建议挂在主摄像机上,因为它的Height指的是主摄像机距其正下方最近的碰撞面间的距离。
EventSystemChecker:
无公共属性,故不截图。Awake阶段检查当前场景中是否存在UGUI的EventSystem,若不存在则自动创建。
FollowTarget:
使本游戏物体跟随指定的目标游戏物体。
Target:要跟随的游戏物体
Offset:本游戏物体与目标游戏物体间的距离(世界坐标)
ForcedReset:
无公共属性,故不截图。用于控制游戏复位,当虚拟摇杆“ResetObject”按下时,重新载入活动场景列表中的首个场景。
FOVKick:
非MonoBehaviour,用于控制摄像机视角变化。
FOVIncrease:视角改变量
TimeToIncrease:视角增大的缓动时长
TimeToDecrease:视角减小的缓动时长
IncreaseCurve:视角变化时使用的动画曲线
FPSCounter:
无公共属性,故不截图。用于显示当前游戏的帧率。Utility/Prefabs 文件夹下有做好的 FramerateCounter 预设体可供使用。
LerpControlledBob:
非MonoBehaviour,用于获取以线性速率变化的先增后减的数值。DoBobCycle()方法用于启动数值变化,Offset()方法用于获取当前数值。
BobDuration:数值从0增加到最大所用的时间
BobAmount:数值的最大值
ObjectResetter:
无公共属性,故不截图。提供恢复游戏物体位置和旋转的功能。DelayedReset(float delay)方法用于启动延时恢复,delay秒后将游戏物体恢复至Start阶段的状态。
ParticleSystemDestroyer:
延时一段时间,然后关闭自身及子游戏物体上的粒子系统,当粒子生命周期结束后销毁本游戏物体。Stop()方法用于提前结束延时。
MinDuration:延时的最短时间
MaxDuration:延时的最长时间
PlatformSpecificContent:
提供针对特定平台启用GameObject和MonoBehaviour的功能,当前平台与BuildTargetGroup不符时禁用GameObject和MonoBehaviour。
BuildTargetGroup:目标平台,可选Standalone和Mobile
Content:要启用或禁用的GameObject集合
MonoBehaviours:要启用或禁用的MonoBehaviour集合
ChildrenOfThisObject:启用或禁用时是否包含子游戏物体
SimpleActivatorMenu:
提供循环激活一组游戏物体的功能。NextCamera()方法用于循环激活游戏物体,当一个游戏物体启用时其他游戏物体禁用。
CamSwitchButton:用于输出当前激活的游戏物体的名称
Objects:用于循环激活的游戏物体集合
SimpleMouseRotator:
提供使用鼠标旋转摄像机的功能,挂载于摄像机所在游戏物体上使用。
RotationRange:横向和纵向的旋转范围
RotationSpeed:旋转速率
DampingTime:阻尼时长,摄像机跟随鼠标转动时使用Vector3.SmoothDamp(Vector3 current, Vector3 target, ref Vector3 currentVelocity, float smoothTime)进行平滑阻尼,DampingTime将作为其smoothTime参数传入
AutoZeroVerticalOnMobile:当目标平台为移动平台时,是否在旋转后自动复位纵向旋转
AutoZeroHorizontalOnMobile:当目标平台为移动平台时,是否在旋转后自动复位横向旋转
Relative:选中时读取虚拟摇杆数据,否则读取鼠标数据
SmoothFollow:
提供有阻尼延时效果的跟随功能。
Target:本游戏物体跟随的目标游戏物体
Distance:本游戏物体与目标游戏物体在x-z平面上的距离
Height:本游戏物体与目标游戏物体在y轴方向上的距离,为负时本物体将位于目标物体下方
RotationDamping:旋转阻尼
HeightDamping:高度变化阻尼
TimedObjectActivator:
多功能脚本,提供延时触发特定操作的功能。
Activate:延时后启用指定游戏物体
Deactivate:延时后禁用指定游戏物体
Destroy:延时后销毁指定游戏物体
ReloadLevel:延时后载入首个场景
Call:延时后调用指定方法(未实现,需自己补完)
TimedObjectDestructor:
延时销毁脚本。
TimeOut:延时时长
DetachChildren:选中时销毁本游戏物体前将移出所有子游戏物体
还有两个脚本WaypointCircuit和WaypointProgressTracker,提供路点功能,因为代码量有点大而且不太常用就不多介绍了。