Files
tianrunCRM/Assets/CoolapeFrame/Scripts/toolkit/TweenCameraZoom.cs
2020-07-04 14:41:25 +08:00

121 lines
2.7 KiB
C#

/*
********************************************************************************
*Copyright(C),coolae.net
*Author: chenbin
*Version: 2.0
*Date: 2017-01-09
*Description: 摄像机视图FieldView的变化
*Others:
*History:
*********************************************************************************
*/
using UnityEngine;
using System.Collections;
namespace Coolape
{
public class TweenCameraZoom : MonoBehaviour
{
public float speed = 1;
public Camera camera;
public Camera subCamera;
public bool ignoreTimeScale = true;
float midFieldOfView = 60;
float toFieldOfView = 60;
bool isPlaying = false;
float element = 1;
object onFinsihCallback;
bool needBack = false;
float staySeconds = 0;
bool isPlayBack = false;
// Use this for initialization
void Start ()
{
enabled = false;
}
float tmpField = 0;
bool isFinished = false;
float toFiled = 0;
float deltaTime = 0;
void Update ()
{
if (!isPlaying) {
return;
}
deltaTime = ignoreTimeScale ? Time.unscaledDeltaTime : Time.deltaTime;
tmpField = camera.fieldOfView;
tmpField += element * deltaTime * speed * 50;
toFiled = toFieldOfView;
if (needBack && !isPlayBack) {
toFiled = midFieldOfView;
}
if ((element > 0 && tmpField - toFiled > 0)
|| (element < 0 && tmpField - toFiled < 0)) {
tmpField = toFiled;
isFinished = true;
}
camera.fieldOfView = tmpField;
if (subCamera != null) {
subCamera.fieldOfView = tmpField;
}
if (isFinished) {
if (needBack) {
if (!isPlayBack) {
isPlayBack = true;
isPlaying = false;
Invoke ("playBack", staySeconds);
} else {
onFinish ();
}
} else {
onFinish ();
}
}
}
void playBack ()
{
zoom (toFieldOfView, speed, onFinsihCallback);
}
void onFinish ()
{
isPlaying = false;
enabled = false;
Utl.doCallback (onFinsihCallback, this);
}
public void zoom (float zoomValue, float speed, object callback)
{
this.speed = speed;
toFieldOfView = zoomValue;
onFinsihCallback = callback;
element = zoomValue - camera.fieldOfView > 0 ? 1 : (zoomValue - camera.fieldOfView == 0 ? 0 : -1);
needBack = false;
isFinished = false;
enabled = true;
isPlaying = true;
}
public void zoomFromTo (float mid, float to, float staySeconds, float speed, object callback)
{
midFieldOfView = mid;
toFieldOfView = to;
this.staySeconds = staySeconds;
this.speed = speed;
onFinsihCallback = callback;
element = mid - camera.fieldOfView > 0 ? 1 : (mid - camera.fieldOfView == 0 ? 0 : -1);
needBack = true;
isFinished = false;
isPlaying = true;
enabled = true;
isPlayBack = false;
}
}
}