You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
2.3 KiB
73 lines
2.3 KiB
using System; |
|
using System.Collections; |
|
using UnityEngine; |
|
|
|
namespace UnityStandardAssets.Utility |
|
{ |
|
[Serializable] |
|
public class FOVKick |
|
{ |
|
public Camera Camera; // optional camera setup, if null the main camera will be used |
|
[HideInInspector] public float originalFov; // the original fov |
|
public float FOVIncrease = 3f; // the amount the field of view increases when going into a run |
|
public float TimeToIncrease = 1f; // the amount of time the field of view will increase over |
|
public float TimeToDecrease = 1f; // the amount of time the field of view will take to return to its original size |
|
public AnimationCurve IncreaseCurve; |
|
|
|
|
|
public void Setup(Camera camera) |
|
{ |
|
CheckStatus(camera); |
|
|
|
Camera = camera; |
|
originalFov = camera.fieldOfView; |
|
} |
|
|
|
|
|
private void CheckStatus(Camera camera) |
|
{ |
|
if (camera == null) |
|
{ |
|
throw new Exception("FOVKick camera is null, please supply the camera to the constructor"); |
|
} |
|
|
|
if (IncreaseCurve == null) |
|
{ |
|
throw new Exception( |
|
"FOVKick Increase curve is null, please define the curve for the field of view kicks"); |
|
} |
|
} |
|
|
|
|
|
public void ChangeCamera(Camera camera) |
|
{ |
|
Camera = camera; |
|
} |
|
|
|
|
|
public IEnumerator FOVKickUp() |
|
{ |
|
float t = Mathf.Abs((Camera.fieldOfView - originalFov)/FOVIncrease); |
|
while (t < TimeToIncrease) |
|
{ |
|
Camera.fieldOfView = originalFov + (IncreaseCurve.Evaluate(t/TimeToIncrease)*FOVIncrease); |
|
t += Time.deltaTime; |
|
yield return new WaitForEndOfFrame(); |
|
} |
|
} |
|
|
|
|
|
public IEnumerator FOVKickDown() |
|
{ |
|
float t = Mathf.Abs((Camera.fieldOfView - originalFov)/FOVIncrease); |
|
while (t > 0) |
|
{ |
|
Camera.fieldOfView = originalFov + (IncreaseCurve.Evaluate(t/TimeToDecrease)*FOVIncrease); |
|
t -= Time.deltaTime; |
|
yield return new WaitForEndOfFrame(); |
|
} |
|
//make sure that fov returns to the original size |
|
Camera.fieldOfView = originalFov; |
|
} |
|
} |
|
}
|
|
|