決定寫這個系列起因於剛才的偶然所見,我發現當前版本的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,提供路點功能,因為代碼量有點大而且不太常用就不多介紹了。