- Home /
This post has been wikified, any user with enough reputation can edit it.
Question by
CrilleStyles · Jun 08, 2014 at 09:59 AM ·
noobfov
If I let shift go restore fov
How do I restore the fov here if I let shift go?
var zoom : int = 20; //determines amount of zoom capable. Larger number means further zoomed in
var normal : int = 60; //determines the default view of the camera when not zoomed in
var smooth : float = 5; //smooth determines speed of transition between zoomed in and default state
private var zoomedIn = false; //boolean that determines whether we are in zoomed in state or not
function Update () {
if(Input.GetKeyDown(KeyCode.LeftShift)){ //This function toggles zoom capabilities with the Z key. If it's zoomed in, it will zoom out
zoomedIn = !zoomedIn;
}
if(zoomedIn == true){ //If "zoomedIn" is true, then it will not zoom in, but if it's false (not zoomed in) then it will zoom in.
camera.fieldOfView = Mathf.Lerp(camera.fieldOfView,zoom,Time.deltaTime*smooth);
}
else{
if(Input.GetKeyUp(KeyCode.LeftShift))
camera.fieldOfView = Mathf.Lerp(camera.fieldOfView,normal,Time.deltaTime*smooth);
}
}
Comment
Answer by darthbator · Jun 11, 2014 at 01:16 AM
The way this is written it will only run for 1 frame when you release shift. What you want to do is fire a routine that will do the LERP for you over multiple frames. Something like
if(Input.GetKeyUp(KeyCode.LeftShift)){
StartCoroutine(lerpFoV(normal));
}
IEnumerator lerpFov (toVal) {
float progress = 0f;
while (progress < 1f) {
camera.fieldOfView = Mathf.Lerp(camera.fieldOfView,toVal,Time.deltaTime*smooth);
progress += Time.deltaTime;
yield return null;
}
}
That's a really poor approximatio I just typed into a text window but I hope you see the idea.
Your answer
Follow this Question
Related Questions
Hold down 2 buttons and do something 1 Answer
Animation Not playing? (Noob) 1 Answer
Rigidbody controller counter movement 1 Answer
How to access and change scriptable objects on instantiated prefabs 1 Answer
Is it the same javascript 1 Answer